Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/items/tool/ItemColtanCompass.java
2025-01-13 16:26:40 +01:00

155 lines
4.7 KiB
Java

package com.hbm.items.tool;
import java.util.List;
import java.util.Random;
import com.hbm.main.MainRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureCompass;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.texture.TextureUtil;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class ItemColtanCompass extends Item {
public int lastX = 0;
public int lastZ = 0;
public long lease = 0;
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
list.add("Points towards the coltan deposit.");
list.add("The deposit is a large area where coltan ore spawns like standard ore,");
list.add("it's not one large blob of ore on that exact location.");
}
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean inhand) {
if(world.isRemote) {
if(stack.hasTagCompound()) {
lastX = stack.stackTagCompound.getInteger("colX");
lastZ = stack.stackTagCompound.getInteger("colZ");
lease = System.currentTimeMillis() + 1000;
Vec3 vec = Vec3.createVectorHelper(entity.posX - lastX, 0, entity.posZ - lastZ);
MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m", MainRegistry.proxy.ID_COMPASS);
}
if(ItemColtanCompass.this.lease < System.currentTimeMillis()) {
lastX = 0;
lastZ = 0;
}
} else {
if(!stack.hasTagCompound()) {
stack.stackTagCompound = new NBTTagCompound();
Random colRand = new Random(world.getSeed() + 5);
int colX = (int) (colRand.nextGaussian() * 1500);
int colZ = (int) (colRand.nextGaussian() * 1500);
stack.stackTagCompound.setInteger("colX", colX);
stack.stackTagCompound.setInteger("colZ", colZ);
}
}
}
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register) {
if(register instanceof TextureMap) {
TextureMap map = (TextureMap) register;
TextureColtass cumpiss = new TextureColtass(this.getIconString());
map.setTextureEntry(this.getIconString(), cumpiss);
this.itemIcon = cumpiss; //apparently i was quite pissed when i wrote this
} else {
this.itemIcon = register.registerIcon(this.getIconString());
}
}
@SideOnly(Side.CLIENT)
public class TextureColtass extends TextureCompass {
public TextureColtass(String texture) {
super(texture);
}
public void updateAnimation() {
Minecraft minecraft = Minecraft.getMinecraft();
if(minecraft.theWorld != null && minecraft.thePlayer != null && !(ItemColtanCompass.this.lastX == 0 && ItemColtanCompass.this.lastZ == 0)) {
this.updateCompass(minecraft.theWorld, minecraft.thePlayer.posX, minecraft.thePlayer.posZ, (double) minecraft.thePlayer.rotationYaw, false, false);
} else {
this.updateCompass((World) null, 0.0D, 0.0D, 0.0D, true, false);
}
}
public void updateCompass(World world, double x, double z, double yaw, boolean ignoreDestination, boolean instantSnap) {
if(!this.framesTextureData.isEmpty()) {
double angle = 0.0D;
if(world != null && !ignoreDestination && world.provider.isSurfaceWorld() && ItemColtanCompass.this.lease > System.currentTimeMillis()) {
double d4 = (double) ItemColtanCompass.this.lastX - x;
double d5 = (double) ItemColtanCompass.this.lastZ - z;
yaw %= 360.0D;
angle = -((yaw - 90.0D) * Math.PI / 180.0D - Math.atan2(d5, d4));
} else {
angle = Math.random() * Math.PI * 2.0D;
}
if(instantSnap) {
this.currentAngle = angle;
} else {
double d6;
for(d6 = angle - this.currentAngle; d6 < -Math.PI; d6 += (Math.PI * 2D)) {
;
}
while(d6 >= Math.PI) {
d6 -= (Math.PI * 2D);
}
if(d6 < -1.0D) {
d6 = -1.0D;
}
if(d6 > 1.0D) {
d6 = 1.0D;
}
this.angleDelta += d6 * 0.1D;
this.angleDelta *= 0.8D;
this.currentAngle += this.angleDelta;
}
int i;
for(i = (int) ((this.currentAngle / (Math.PI * 2D) + 1.0D) * (double) this.framesTextureData.size()) % this.framesTextureData.size(); i < 0; i = (i + this.framesTextureData.size()) % this.framesTextureData.size()) {
;
}
if(i != this.frameCounter) {
this.frameCounter = i;
TextureUtil.uploadTextureMipmap((int[][]) this.framesTextureData.get(this.frameCounter), this.width, this.height, this.originX, this.originY, false, false);
}
}
}
}
}