diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index 8ec561e2e..497ab8fd0 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -294,6 +294,7 @@ public class ClientProxy extends CommonProxy MinecraftForgeClient.registerItemRenderer(Mekanism.PartTransmitter.itemID, handler); MinecraftForgeClient.registerItemRenderer(Mekanism.GasMask.itemID, handler); MinecraftForgeClient.registerItemRenderer(Mekanism.ScubaTank.itemID, handler); + MinecraftForgeClient.registerItemRenderer(Mekanism.Balloon.itemID, handler); //Register block handlers RenderingRegistry.registerBlockHandler(new MachineRenderingHandler()); diff --git a/common/mekanism/client/render/entity/RenderBalloon.java b/common/mekanism/client/render/entity/RenderBalloon.java index a55e69225..a2e5f59b1 100644 --- a/common/mekanism/client/render/entity/RenderBalloon.java +++ b/common/mekanism/client/render/entity/RenderBalloon.java @@ -1,9 +1,11 @@ package mekanism.client.render.entity; +import mekanism.api.EnumColor; import mekanism.client.model.ModelBalloon; import mekanism.common.EntityBalloon; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -16,6 +18,8 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class RenderBalloon extends Render { + private Minecraft mc = Minecraft.getMinecraft(); + public ModelBalloon model = new ModelBalloon(); @Override @@ -29,14 +33,20 @@ public class RenderBalloon extends Render { EntityBalloon balloon = (EntityBalloon)entity; + render(((EntityBalloon)entity).color, x, y, z); + } + + public void render(EnumColor color, double x, double y, double z) + { GL11.glPushMatrix(); GL11.glTranslated(x, y, z); GL11.glRotatef(180, 1, 0, 0); GL11.glTranslatef(0, 0.9F, 0); - bindTexture(getEntityTexture(entity)); - model.render(0.0625F, balloon.color); + mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "Balloon.png")); + + model.render(0.0625F, color); GL11.glPopMatrix(); } diff --git a/common/mekanism/client/render/item/ItemRenderingHandler.java b/common/mekanism/client/render/item/ItemRenderingHandler.java index f7b32502c..28565ea45 100644 --- a/common/mekanism/client/render/item/ItemRenderingHandler.java +++ b/common/mekanism/client/render/item/ItemRenderingHandler.java @@ -16,6 +16,7 @@ import mekanism.client.model.ModelRobit; import mekanism.client.model.ModelScubaTank; import mekanism.client.model.ModelTransmitter; import mekanism.client.render.MekanismRenderer; +import mekanism.client.render.entity.RenderBalloon; import mekanism.client.render.tileentity.RenderBin; import mekanism.common.IElectricChest; import mekanism.common.IEnergyCube; @@ -23,6 +24,7 @@ import mekanism.common.Mekanism; import mekanism.common.Tier.EnergyCubeTier; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.inventory.InventoryBin; +import mekanism.common.item.ItemBalloon; import mekanism.common.item.ItemBlockBasic; import mekanism.common.item.ItemBlockMachine; import mekanism.common.item.ItemGasMask; @@ -31,7 +33,6 @@ import mekanism.common.item.ItemRobit; import mekanism.common.item.ItemScubaTank; import mekanism.common.item.ItemWalkieTalkie; import mekanism.common.multipart.ItemPartTransmitter; -import mekanism.common.tileentity.TileEntityBin; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.block.Block; @@ -43,7 +44,6 @@ import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -71,7 +71,8 @@ public class ItemRenderingHandler implements IItemRenderer public ModelGasMask gasMask = new ModelGasMask(); public ModelScubaTank scubaTank = new ModelScubaTank(); - public RenderBin binRenderer = (RenderBin)TileEntityRenderer.instance.specialRendererMap.get(TileEntityBin.class); + public RenderBalloon balloonRenderer = new RenderBalloon(); + public RenderBin binRenderer = new RenderBin(); private final RenderItem renderItem = (RenderItem)RenderManager.instance.getEntityClassRenderObject(EntityItem.class); @Override @@ -343,6 +344,19 @@ public class ItemRenderingHandler implements IItemRenderer Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ScubaSet.png")); scubaTank.render(0.0625F); } + else if(item.getItem() instanceof ItemBalloon) + { + if(type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) + { + GL11.glScalef(2.5F, 2.5F, 2.5F); + GL11.glTranslatef(0.2F, 0, 0.1F); + GL11.glRotatef(15, -1, 0, 1); + balloonRenderer.render(((ItemBalloon)item.getItem()).getColor(item), 0, 1.9F, 0); + } + else { + balloonRenderer.render(((ItemBalloon)item.getItem()).getColor(item), 0, 1, 0); + } + } else if(item.getItem() instanceof ItemPartTransmitter) { GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); diff --git a/common/mekanism/common/EntityBalloon.java b/common/mekanism/common/EntityBalloon.java index 431915737..f4c6c3d92 100644 --- a/common/mekanism/common/EntityBalloon.java +++ b/common/mekanism/common/EntityBalloon.java @@ -1,11 +1,13 @@ package mekanism.common; import mekanism.api.EnumColor; +import mekanism.api.Object3D; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.EntityFX; import net.minecraft.client.particle.EntityReddustFX; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import universalelectricity.core.vector.Vector3; @@ -17,6 +19,7 @@ import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData { public EnumColor color = EnumColor.DARK_BLUE; + public Object3D latched; public EntityBalloon(World world) { @@ -30,15 +33,31 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData motionY = 0.04; } - public EntityBalloon(World world, double x, double y, double z) + public EntityBalloon(World world, double x, double y, double z, EnumColor c) { this(world); setPosition(x + 0.5F, y + 3F, z + 0.5F); - prevPosX = x; - prevPosY = y; - prevPosZ = z; + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + + color = c; + } + + public EntityBalloon(World world, Object3D obj, EnumColor c) + { + this(world); + + latched = obj; + setPosition(latched.xCoord + 0.5F, latched.yCoord + 3F, latched.zCoord + 0.5F); + + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + + color = c; } @Override @@ -48,55 +67,46 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData prevPosY = posY; prevPosZ = posZ; - motionY = Math.min(motionY*1.02F, 0.2F); - - moveEntity(motionX, motionY, motionZ); - - motionX *= 0.98; - motionZ *= 0.98; - - if(onGround) + if(posY > 255) { - motionX *= 0.7; - motionZ *= 0.7; + pop(); + return; } - if(motionY == 0) + if(latched != null && latched.getBlockId(worldObj) == 0) { - motionY = 0.04; + latched = null; + } + + if(latched == null) + { + motionY = Math.min(motionY*1.02F, 0.2F); + + moveEntity(motionX, motionY, motionZ); + + motionX *= 0.98; + motionZ *= 0.98; + + if(onGround) + { + motionX *= 0.7; + motionZ *= 0.7; + } + + if(motionY == 0) + { + motionY = 0.04; + } + } + else { + motionX = 0; + motionY = 0; + motionZ = 0; } } - - @Override - public boolean canBePushed() - { - return true; - } - @Override - public boolean canBeCollidedWith() + private void pop() { - return !isDead; - } - - @Override - protected boolean canTriggerWalking() - { - return false; - } - - @Override - protected void entityInit() {} - - @Override - protected void readEntityFromNBT(NBTTagCompound nbtTags) - { - color = EnumColor.values()[nbtTags.getInteger("color")]; - } - - @Override - public boolean hitByEntity(Entity entity) - { worldObj.playSoundAtEntity(this, "mekanism:etc.Pop", 1, 1); if(worldObj.isRemote) @@ -115,6 +125,44 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData } setDead(); + } + + @Override + public boolean canBePushed() + { + return latched == null; + } + + @Override + public boolean canBeCollidedWith() + { + return !isDead && latched == null; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + protected void entityInit() {} + + @Override + protected void readEntityFromNBT(NBTTagCompound nbtTags) + { + color = EnumColor.values()[nbtTags.getInteger("color")]; + + if(nbtTags.hasKey("latched")) + { + latched = Object3D.read(nbtTags); + } + } + + @Override + public boolean hitByEntity(Entity entity) + { + pop(); return true; } @@ -122,6 +170,11 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData protected void writeEntityToNBT(NBTTagCompound nbtTags) { nbtTags.setInteger("color", color.ordinal()); + + if(latched != null) + { + latched.write(nbtTags); + } } @Override @@ -132,6 +185,18 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData data.writeDouble(posZ); data.writeInt(color.ordinal()); + + if(latched != null) + { + data.writeBoolean(true); + + data.writeInt(latched.xCoord); + data.writeInt(latched.yCoord); + data.writeInt(latched.zCoord); + } + else { + data.writeBoolean(false); + } } @Override @@ -140,5 +205,25 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData setPosition(data.readDouble(), data.readDouble(), data.readDouble()); color = EnumColor.values()[data.readInt()]; + + if(data.readBoolean()) + { + latched = new Object3D(data.readInt(), data.readInt(), data.readInt()); + } + else { + latched = null; + } } + + @Override + public boolean isInRangeToRenderDist(double dist) + { + return dist <= 64; + } + + @Override + public boolean isInRangeToRenderVec3D(Vec3 par1Vec3) + { + return true; + } } diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index c3cbbad8b..65a36ebd4 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -42,6 +42,7 @@ import mekanism.common.block.BlockObsidianTNT; import mekanism.common.block.BlockOre; import mekanism.common.block.BlockTransmitter; import mekanism.common.item.ItemAtomicDisassembler; +import mekanism.common.item.ItemBalloon; import mekanism.common.item.ItemBlockBasic; import mekanism.common.item.ItemBlockEnergyCube; import mekanism.common.item.ItemBlockGasTank; @@ -225,6 +226,7 @@ public class Mekanism public static ItemScubaTank ScubaTank; public static ItemGasMask GasMask; public static Item Dictionary; + public static Item Balloon; //Blocks public static Block BasicBlock; @@ -641,6 +643,7 @@ public class Mekanism Jetpack = (ItemJetpack)new ItemJetpack(configuration.getItem("Jetpack", 11223).getInt()).setUnlocalizedName("Jetpack"); WalkieTalkie = new ItemWalkieTalkie(configuration.getItem("WalkieTalkie", 11224).getInt()).setUnlocalizedName("WalkieTalkie"); PartTransmitter = new ItemPartTransmitter(configuration.getItem("MultipartTransmitter", 11225).getInt()).setUnlocalizedName("MultipartTransmitter"); + Balloon = new ItemBalloon(configuration.getItem("Balloon", 11226).getInt()).setUnlocalizedName("Balloon"); configuration.save(); //TODO 1.7, fix item shifts @@ -670,6 +673,7 @@ public class Mekanism GameRegistry.registerItem(Dictionary, "Dictionary"); GameRegistry.registerItem(GasMask, "GasMask"); GameRegistry.registerItem(ScubaTank, "ScubaTank"); + GameRegistry.registerItem(Balloon, "Balloon"); } /** diff --git a/common/mekanism/common/item/ItemBalloon.java b/common/mekanism/common/item/ItemBalloon.java new file mode 100644 index 000000000..738aa375e --- /dev/null +++ b/common/mekanism/common/item/ItemBalloon.java @@ -0,0 +1,82 @@ +package mekanism.common.item; + +import java.util.List; + +import mekanism.api.EnumColor; +import mekanism.api.Object3D; +import mekanism.common.EntityBalloon; +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import universalelectricity.core.vector.Vector3; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemBalloon extends ItemMekanism +{ + public ItemBalloon(int id) + { + super(id); + setHasSubtypes(true); + } + + public EnumColor getColor(ItemStack stack) + { + return EnumColor.values()[stack.getItemDamage()]; + } + + @Override + public void getSubItems(int i, CreativeTabs tabs, List list) + { + for(EnumColor color : EnumColor.values()) + { + ItemStack stack = new ItemStack(this); + stack.setItemDamage(color.ordinal()); + list.add(stack); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer) + { + if(!world.isRemote) + { + Vector3 vec = new Vector3(); + vec.z += 0.3; + vec.x -= 0.4; + vec.rotate(entityplayer.renderYawOffset); + vec.translate(new Vector3(entityplayer)); + + world.spawnEntityInWorld(new EntityBalloon(world, vec.x-0.5, vec.y-0.25, vec.z-0.5, getColor(itemstack))); + } + + itemstack.stackSize--; + + return itemstack; + } + + @Override + public String getItemDisplayName(ItemStack stack) + { + return getColor(stack).getName() + " Balloon"; + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) + { + if(!world.isRemote) + { + world.spawnEntityInWorld(new EntityBalloon(world, new Object3D(x, y, z), getColor(stack))); + } + + stack.stackSize--; + + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister register) {} +} diff --git a/common/mekanism/common/item/ItemConfigurator.java b/common/mekanism/common/item/ItemConfigurator.java index 6581e84ec..0d883df97 100644 --- a/common/mekanism/common/item/ItemConfigurator.java +++ b/common/mekanism/common/item/ItemConfigurator.java @@ -63,7 +63,7 @@ public class ItemConfigurator extends ItemEnergized implements IToolWrench { if(!world.isRemote) { - world.spawnEntityInWorld(new EntityBalloon(world, x, y, z)); + world.spawnEntityInWorld(new EntityBalloon(world, x, y, z, EnumColor.RED)); TileEntity tile = world.getBlockTileEntity(x, y, z); diff --git a/common/mekanism/common/item/ItemGasMask.java b/common/mekanism/common/item/ItemGasMask.java index 1860d51a4..8d8f8afba 100644 --- a/common/mekanism/common/item/ItemGasMask.java +++ b/common/mekanism/common/item/ItemGasMask.java @@ -4,6 +4,7 @@ import mekanism.client.render.ModelCustomArmor; import mekanism.client.render.ModelCustomArmor.ArmorModel; import mekanism.common.Mekanism; import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemArmor; @@ -24,6 +25,10 @@ public class ItemGasMask extends ItemArmor MinecraftForge.EVENT_BUS.register(this); } + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister register) {} + @Override public boolean isValidArmor(ItemStack stack, int armorType, Entity entity) { diff --git a/common/mekanism/common/item/ItemJetpack.java b/common/mekanism/common/item/ItemJetpack.java index fe4fa359b..2e7334853 100644 --- a/common/mekanism/common/item/ItemJetpack.java +++ b/common/mekanism/common/item/ItemJetpack.java @@ -12,6 +12,7 @@ import mekanism.client.render.ModelCustomArmor.ArmorModel; import mekanism.common.Mekanism; import mekanism.common.util.MekanismUtils; import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -36,6 +37,10 @@ public class ItemJetpack extends ItemArmor implements IGasItem setNoRepair(); } + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister register) {} + @Override public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { diff --git a/common/mekanism/common/item/ItemScubaTank.java b/common/mekanism/common/item/ItemScubaTank.java index 916b29c99..b8e51a7d0 100644 --- a/common/mekanism/common/item/ItemScubaTank.java +++ b/common/mekanism/common/item/ItemScubaTank.java @@ -11,6 +11,7 @@ import mekanism.client.render.ModelCustomArmor; import mekanism.client.render.ModelCustomArmor.ArmorModel; import mekanism.common.Mekanism; import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -229,4 +230,8 @@ public class ItemScubaTank extends ItemArmor implements IGasItem setGas(filled, new GasStack(GasRegistry.getGas("oxygen"), ((IGasItem)filled.getItem()).getMaxGas(filled))); list.add(filled); } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister register) {} } diff --git a/common/mekanism/common/multipart/ItemPartTransmitter.java b/common/mekanism/common/multipart/ItemPartTransmitter.java index 3c2089d03..b2449d5bd 100644 --- a/common/mekanism/common/multipart/ItemPartTransmitter.java +++ b/common/mekanism/common/multipart/ItemPartTransmitter.java @@ -9,6 +9,7 @@ import mekanism.api.transmitters.ITransmitter; import mekanism.api.transmitters.ITransmitterNetwork; import mekanism.api.transmitters.TransmissionType; import mekanism.common.Mekanism; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -33,6 +34,10 @@ public class ItemPartTransmitter extends JItemMultiPart setHasSubtypes(true); setCreativeTab(Mekanism.tabMekanism); } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister register) {} @Override public TMultiPart newPart(ItemStack stack, EntityPlayer player, World world, BlockCoord coord, int face, Vector3 vecHit) @@ -131,6 +136,6 @@ public class ItemPartTransmitter extends JItemMultiPart @Override public String getUnlocalizedName(ItemStack stack) { - return getUnlocalizedName()+"."+TransmissionType.values()[stack.getItemDamage()].name().toLowerCase(); + return getUnlocalizedName() + "." + TransmissionType.values()[stack.getItemDamage()].name().toLowerCase(); } }