mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
155 lines
4.7 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|