From 4462a486485790f19c0a2a41f2e3b9bd330ce7b7 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 4 Jan 2021 22:14:19 +0100 Subject: [PATCH] made jetpacks less garbage, new explosion FX test --- .../assets/hbm/textures/particle/flare.png | Bin 0 -> 20717 bytes .../hbm/extprop/HbmExtendedProperties.java | 50 +++++++ .../java/com/hbm/handler/HbmKeybinds.java | 8 + .../hbm/handler/guncfg/GunFatmanFactory.java | 21 +++ .../java/com/hbm/inventory/FluidTank.java | 33 +---- .../java/com/hbm/inventory/MagicRecipes.java | 4 +- src/main/java/com/hbm/items/ModItems.java | 7 +- .../java/com/hbm/items/armor/JetpackBase.java | 78 ++++++++++ .../com/hbm/items/armor/JetpackBreak.java | 139 ++++++++---------- .../com/hbm/items/armor/JetpackRegular.java | 118 ++++++--------- .../hbm/items/armor/JetpackVectorized.java | 130 +++++++--------- .../com/hbm/items/special/ItemSyringe.java | 34 ++--- src/main/java/com/hbm/main/ClientProxy.java | 73 +++++++++ .../java/com/hbm/main/ModEventHandler.java | 17 ++- src/main/java/com/hbm/main/ServerProxy.java | 9 ++ .../java/com/hbm/packet/KeybindPacket.java | 49 ++++++ .../java/com/hbm/packet/PacketDispatcher.java | 2 + .../java/com/hbm/particle/ParticleHadron.java | 3 + .../com/hbm/particle/ParticleMukeCloud.java | 14 ++ .../com/hbm/particle/ParticleMukeFlash.java | 86 +++++++++++ .../com/hbm/particle/ParticleMukeWave.java | 70 +++++++++ 21 files changed, 671 insertions(+), 274 deletions(-) create mode 100644 src/main/java/assets/hbm/textures/particle/flare.png create mode 100644 src/main/java/com/hbm/extprop/HbmExtendedProperties.java create mode 100644 src/main/java/com/hbm/handler/HbmKeybinds.java create mode 100644 src/main/java/com/hbm/items/armor/JetpackBase.java create mode 100644 src/main/java/com/hbm/packet/KeybindPacket.java create mode 100644 src/main/java/com/hbm/particle/ParticleMukeCloud.java create mode 100644 src/main/java/com/hbm/particle/ParticleMukeFlash.java create mode 100644 src/main/java/com/hbm/particle/ParticleMukeWave.java diff --git a/src/main/java/assets/hbm/textures/particle/flare.png b/src/main/java/assets/hbm/textures/particle/flare.png new file mode 100644 index 0000000000000000000000000000000000000000..314851a1b7c3a31acac49cdff36a5cfb626a3b8a GIT binary patch literal 20717 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

wzc{Quxe?+ts`T66h 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 WFB{Q(gM(Pv0AQbki+z 0 && JetpackBooster.getFuel(slots[in]) < JetpackBooster.maxFuel) { + if(slots[in].getItem() instanceof JetpackBase && ((JetpackBase)slots[in].getItem()).fuel == this.type) { + if(this.fluid > 0 && JetpackBase.getFuel(slots[in]) < ((JetpackBase)slots[in].getItem()).maxFuel) { this.fluid--; - JetpackBooster.setFuel(slots[in], JetpackBooster.getFuel(slots[in]) + 1); - } else { - return; - } - } else if(slots[in].getItem() == ModItems.jetpack_break && this.type.name().equals(FluidType.KEROSENE.name())) { - if(this.fluid > 0 && JetpackBreak.getFuel(slots[in]) < JetpackBreak.maxFuel) { - this.fluid--; - JetpackBreak.setFuel(slots[in], JetpackBreak.getFuel(slots[in]) + 1); - } else { - return; - } - } else if(slots[in].getItem() == ModItems.jetpack_fly && this.type.name().equals(FluidType.KEROSENE.name())) { - if(this.fluid > 0 && JetpackRegular.getFuel(slots[in]) < JetpackRegular.maxFuel) { - this.fluid--; - JetpackRegular.setFuel(slots[in], JetpackRegular.getFuel(slots[in]) + 1); - } else { - return; - } - } else if(slots[in].getItem() == ModItems.jetpack_vector && this.type.name().equals(FluidType.KEROSENE.name())) { - if(this.fluid > 0 && JetpackVectorized.getFuel(slots[in]) < JetpackVectorized.maxFuel) { - this.fluid--; - JetpackVectorized.setFuel(slots[in], JetpackVectorized.getFuel(slots[in]) + 1); + JetpackBase.setFuel(slots[in], JetpackBase.getFuel(slots[in]) + 1); } else { return; } diff --git a/src/main/java/com/hbm/inventory/MagicRecipes.java b/src/main/java/com/hbm/inventory/MagicRecipes.java index 90800d991..2a574c874 100644 --- a/src/main/java/com/hbm/inventory/MagicRecipes.java +++ b/src/main/java/com/hbm/inventory/MagicRecipes.java @@ -28,7 +28,7 @@ public class MagicRecipes { comps.add(new ComparableStack(matrix.getStackInSlot(i)).makeSingular()); } - Collections.sort(comps); + //Collections.sort(comps); for(MagicRecipe recipe : recipes) { if(recipe.matches(comps)) @@ -104,7 +104,7 @@ public class MagicRecipes { public MagicRecipe(ItemStack out, AStack... in) { this.out = out; this.in = Arrays.asList(in); - Collections.sort(this.in); + //Collections.sort(this.in); } public boolean matches(List comps) { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 08ebd38b7..27bc10173 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -5,6 +5,7 @@ import com.hbm.handler.BucketHandler; import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility.LuckAbility; import com.hbm.handler.WeaponAbility; +import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.handler.guncfg.*; import com.hbm.items.armor.*; import com.hbm.items.bomb.*; @@ -4059,9 +4060,9 @@ public class ModItems { australium_iii = new ArmorAustralium(MainRegistry.aMatAus3, 9, 1).setUnlocalizedName("australium_iii").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":australium_iii"); jetpack_boost = new JetpackBooster(MainRegistry.aMatSteel, 9, 1).setUnlocalizedName("jetpack_boost").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_boost"); - jetpack_break = new JetpackBreak(MainRegistry.aMatSteel, 9, 1).setUnlocalizedName("jetpack_break").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_break"); - jetpack_fly = new JetpackRegular(MainRegistry.aMatSteel, 9, 1).setUnlocalizedName("jetpack_fly").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_fly"); - jetpack_vector = new JetpackVectorized(MainRegistry.aMatSteel, 9, 1).setUnlocalizedName("jetpack_vector").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_vector"); + jetpack_break = new JetpackBreak(MainRegistry.aMatSteel, 9, 1, FluidType.KEROSENE, 8000).setUnlocalizedName("jetpack_break").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_break"); + jetpack_fly = new JetpackRegular(MainRegistry.aMatSteel, 9, 1, FluidType.KEROSENE, 12000).setUnlocalizedName("jetpack_fly").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_fly"); + jetpack_vector = new JetpackVectorized(MainRegistry.aMatSteel, 9, 1, FluidType.KEROSENE, 16000).setUnlocalizedName("jetpack_vector").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_vector"); cape_test = new ArmorModel(MainRegistry.enumArmorMaterialEmerald, 9, 1).setUnlocalizedName("cape_test").setCreativeTab(null).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_test"); cape_radiation = new ArmorModel(ArmorMaterial.CHAIN, 9, 1).setUnlocalizedName("cape_radiation").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_radiation"); diff --git a/src/main/java/com/hbm/items/armor/JetpackBase.java b/src/main/java/com/hbm/items/armor/JetpackBase.java new file mode 100644 index 000000000..4e1be46fa --- /dev/null +++ b/src/main/java/com/hbm/items/armor/JetpackBase.java @@ -0,0 +1,78 @@ +package com.hbm.items.armor; + +import java.util.List; + +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.render.model.ModelJetPack; +import com.hbm.util.I18nUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public abstract class JetpackBase extends ItemArmor { + + private ModelJetPack model; + public FluidType fuel; + public int maxFuel; + + public JetpackBase(ArmorMaterial mat, int i, int j, FluidType fuel, int maxFuel) { + super(mat, i, j); + this.fuel = fuel; + this.maxFuel = maxFuel; + } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(I18nUtil.resolveKey(fuel.getUnlocalizedName()) + ": " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); + } + + @Override + public boolean isValidArmor(ItemStack stack, int armorType, Entity entity) { + return armorType == 1; + } + + @Override + @SideOnly(Side.CLIENT) + public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { + if (armorSlot == 1) { + if (model == null) { + this.model = new ModelJetPack(); + } + return this.model; + } + + return null; + } + + protected void useUpFuel(EntityPlayer player, ItemStack stack, int rate) { + + if(player.ticksExisted % rate == 0) + this.setFuel(stack, this.getFuel(stack) - 1); + } + + public static int getFuel(ItemStack stack) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + return 0; + } + + return stack.stackTagCompound.getInteger("fuel"); + + } + + public static void setFuel(ItemStack stack, int i) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + } + + stack.stackTagCompound.setInteger("fuel", i); + + } +} diff --git a/src/main/java/com/hbm/items/armor/JetpackBreak.java b/src/main/java/com/hbm/items/armor/JetpackBreak.java index de968bf1d..f2e69b8c3 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBreak.java +++ b/src/main/java/com/hbm/items/armor/JetpackBreak.java @@ -1,54 +1,26 @@ package com.hbm.items.armor; -import java.util.List; +import com.hbm.extprop.HbmExtendedProperties; +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.KeybindPacket; +import com.hbm.packet.PacketDispatcher; -import com.hbm.entity.particle.EntityGasFlameFX; -import com.hbm.render.model.ModelJetPack; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.model.ModelBiped; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class JetpackBreak extends ItemArmor { +public class JetpackBreak extends JetpackBase { - private ModelJetPack model; public static int maxFuel = 1200; - public JetpackBreak(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) { - super(p_i45325_1_, p_i45325_2_, p_i45325_3_); - } - - @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - list.add("Kerosene: " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); - } - - - @Override - public boolean isValidArmor(ItemStack stack, int armorType, Entity entity) { - return armorType == 1; - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { - if (armorSlot == 1) { - if (model == null) { - this.model = new ModelJetPack(); - } - return this.model; - } - - return null; + public JetpackBreak(ArmorMaterial mat, int i, int j, FluidType fuel, int maxFuel) { + super(mat, i, j, fuel, maxFuel); } @Override @@ -57,44 +29,57 @@ public class JetpackBreak extends ItemArmor { } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - - if(player.motionY < -0.25 && this.getFuel(stack) > 0) { - - Vec3 vec = Vec3.createVectorHelper(player.getLookVec().xCoord, 0, player.getLookVec().zCoord); - vec.normalize(); - player.motionY = -0.25; + + HbmExtendedProperties props = HbmExtendedProperties.getData(player); + + if(world.isRemote) { + + if(player == MainRegistry.proxy.me()) { + + boolean last = props.getKeyPressed(EnumKeybind.JETPACK); + boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); + + if(last != current) { + PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); + props.setKeyPressed(EnumKeybind.JETPACK, current); + } + } + + } else { + + if(getFuel(stack) > 0 && (props.getKeyPressed(EnumKeybind.JETPACK) || (!player.onGround && !player.isSneaking()))) { - if(!world.isRemote) { - EntityGasFlameFX fx = new EntityGasFlameFX(world); - fx.posX = player.posX - vec.xCoord; - fx.posY = player.posY - 1; - fx.posZ = player.posZ - vec.zCoord; - fx.motionY = -0.5; - world.spawnEntityInWorld(fx); - } - - player.fallDistance = 0; - - this.setFuel(stack, this.getFuel(stack) - 1); - } + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack"); + data.setInteger("player", player.getEntityId()); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); + } + } + + if(getFuel(stack) > 0) { + + if(props.getKeyPressed(EnumKeybind.JETPACK)) { + player.fallDistance = 0; + + if(player.motionY < 0.4D) + player.motionY += 0.1D; + + world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); + this.useUpFuel(player, stack, 5); + + } else if(!player.isSneaking() && !player.onGround) { + player.fallDistance = 0; + + if(player.motionY < -1) + player.motionY += 0.2D; + else if(player.motionY < -0.1) + player.motionY += 0.1D; + else if(player.motionY < 0) + player.motionY = 0; + + world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); + this.useUpFuel(player, stack, 10); + } + } } - - public static int getFuel(ItemStack stack) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - return 0; - } - - return stack.stackTagCompound.getInteger("fuel"); - - } - - public static void setFuel(ItemStack stack, int i) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - } - - stack.stackTagCompound.setInteger("fuel", i); - - } } diff --git a/src/main/java/com/hbm/items/armor/JetpackRegular.java b/src/main/java/com/hbm/items/armor/JetpackRegular.java index 75a0e3807..dcb31dc25 100644 --- a/src/main/java/com/hbm/items/armor/JetpackRegular.java +++ b/src/main/java/com/hbm/items/armor/JetpackRegular.java @@ -3,7 +3,16 @@ package com.hbm.items.armor; import java.util.List; import com.hbm.entity.particle.EntityGasFlameFX; +import com.hbm.extprop.HbmExtendedProperties; +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.KeybindPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.render.model.ModelJetPack; + +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.model.ModelBiped; @@ -12,42 +21,15 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class JetpackRegular extends ItemArmor { +public class JetpackRegular extends JetpackBase { - private ModelJetPack model; - public static int maxFuel = 3000; - - public JetpackRegular(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) { - super(p_i45325_1_, p_i45325_2_, p_i45325_3_); - } - - @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - list.add("Kerosene: " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); - } - - - @Override - public boolean isValidArmor(ItemStack stack, int armorType, Entity entity) { - return armorType == 1; - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { - if (armorSlot == 1) { - if (model == null) { - this.model = new ModelJetPack(); - } - return this.model; - } - - return null; + public JetpackRegular(ArmorMaterial mat, int i, int j, FluidType fuel, int maxFuel) { + super(mat, i, j, fuel, maxFuel); } @Override @@ -56,45 +38,41 @@ public class JetpackRegular extends ItemArmor { } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - - if(player.isSneaking() && this.getFuel(stack) > 0) { - - Vec3 vec = Vec3.createVectorHelper(player.getLookVec().xCoord, 0, player.getLookVec().zCoord); - vec.normalize(); - player.motionY += 0.15; + + HbmExtendedProperties props = HbmExtendedProperties.getData(player); + + if(world.isRemote) { + + if(player == MainRegistry.proxy.me()) { + + boolean last = props.getKeyPressed(EnumKeybind.JETPACK); + boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); + + if(last != current) { + PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); + props.setKeyPressed(EnumKeybind.JETPACK, current); + } + } + + } else { + + if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { - if(!world.isRemote) { - EntityGasFlameFX fx = new EntityGasFlameFX(world); - fx.posX = player.posX - vec.xCoord; - fx.posY = player.posY - 1; - fx.posZ = player.posZ - vec.zCoord; - fx.motionY = -0.15; - world.spawnEntityInWorld(fx); - } - - player.fallDistance = 0; - - this.setFuel(stack, this.getFuel(stack) - 1); - } + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack"); + data.setInteger("player", player.getEntityId()); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); + } + } + + if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { + player.fallDistance = 0; + + if(player.motionY < 0.4D) + player.motionY += 0.1D; + + world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); + this.useUpFuel(player, stack, 5); + } } - - public static int getFuel(ItemStack stack) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - return 0; - } - - return stack.stackTagCompound.getInteger("fuel"); - - } - - public static void setFuel(ItemStack stack, int i) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - } - - stack.stackTagCompound.setInteger("fuel", i); - - } - } diff --git a/src/main/java/com/hbm/items/armor/JetpackVectorized.java b/src/main/java/com/hbm/items/armor/JetpackVectorized.java index 73c26e4f0..567ae54d0 100644 --- a/src/main/java/com/hbm/items/armor/JetpackVectorized.java +++ b/src/main/java/com/hbm/items/armor/JetpackVectorized.java @@ -3,8 +3,16 @@ package com.hbm.items.armor; import java.util.List; import com.hbm.entity.particle.EntityGasFlameFX; +import com.hbm.extprop.HbmExtendedProperties; +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.KeybindPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.render.model.ModelJetPack; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.model.ModelBiped; @@ -13,42 +21,15 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class JetpackVectorized extends ItemArmor { +public class JetpackVectorized extends JetpackBase { - private ModelJetPack model; - public static int maxFuel = 6000; - - public JetpackVectorized(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) { - super(p_i45325_1_, p_i45325_2_, p_i45325_3_); - } - - @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - list.add("Kerosene: " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); - } - - - @Override - public boolean isValidArmor(ItemStack stack, int armorType, Entity entity) { - return armorType == 1; - } - - @Override - @SideOnly(Side.CLIENT) - public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { - if (armorSlot == 1) { - if (model == null) { - this.model = new ModelJetPack(); - } - return this.model; - } - - return null; + public JetpackVectorized(ArmorMaterial mat, int i, int j, FluidType fuel, int maxFuel) { + super(mat, i, j, fuel, maxFuel); } @Override @@ -57,49 +38,52 @@ public class JetpackVectorized extends ItemArmor { } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - - if(player.isSneaking() && this.getFuel(stack) > 0) { - - Vec3 vec = Vec3.createVectorHelper(player.getLookVec().xCoord, 0, player.getLookVec().zCoord); - vec.normalize(); + + HbmExtendedProperties props = HbmExtendedProperties.getData(player); + + if(world.isRemote) { + + if(player == MainRegistry.proxy.me()) { + + boolean last = props.getKeyPressed(EnumKeybind.JETPACK); + boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); + + if(last != current) { + PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); + props.setKeyPressed(EnumKeybind.JETPACK, current); + } + } + + } else { + + if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { - player.motionX += vec.xCoord * 0.2; - player.motionY += 0.15; - player.motionZ += vec.zCoord * 0.2; + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack"); + data.setInteger("player", player.getEntityId()); + data.setInteger("mode", 1); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); + } + } - if(!world.isRemote) { - EntityGasFlameFX fx = new EntityGasFlameFX(world); - fx.posX = player.posX - vec.xCoord; - fx.posY = player.posY - 1; - fx.posZ = player.posZ - vec.zCoord; - fx.motionX -= vec.xCoord * 0.2; - fx.motionY -= vec.yCoord * 0.2; - fx.motionZ -= vec.zCoord * 0.2; - world.spawnEntityInWorld(fx); - } - - player.fallDistance = 0; - - this.setFuel(stack, this.getFuel(stack) - 1); - } + if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { + + if(player.motionY < 0.4D) + player.motionY += 0.1D; + + Vec3 look = player.getLookVec(); + + if(Vec3.createVectorHelper(player.motionX, player.motionY, player.motionZ).lengthVector() < 2) { + player.motionX += look.xCoord * 0.1; + player.motionY += look.yCoord * 0.1; + player.motionZ += look.zCoord * 0.1; + + if(look.yCoord > 0) + player.fallDistance = 0; + } + + world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); + this.useUpFuel(player, stack, 3); + } } - - public static int getFuel(ItemStack stack) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - return 0; - } - - return stack.stackTagCompound.getInteger("fuel"); - - } - - public static void setFuel(ItemStack stack, int i) { - if(stack.stackTagCompound == null) { - stack.stackTagCompound = new NBTTagCompound(); - } - - stack.stackTagCompound.setInteger("fuel", i); - - } } diff --git a/src/main/java/com/hbm/items/special/ItemSyringe.java b/src/main/java/com/hbm/items/special/ItemSyringe.java index 96216c69d..4eea86d1f 100644 --- a/src/main/java/com/hbm/items/special/ItemSyringe.java +++ b/src/main/java/com/hbm/items/special/ItemSyringe.java @@ -3,11 +3,9 @@ package com.hbm.items.special; import java.util.List; import java.util.Random; +import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.items.ModItems; -import com.hbm.items.armor.JetpackBooster; -import com.hbm.items.armor.JetpackBreak; -import com.hbm.items.armor.JetpackRegular; -import com.hbm.items.armor.JetpackVectorized; +import com.hbm.items.armor.JetpackBase; import com.hbm.items.weapon.ItemGunBase; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; @@ -291,28 +289,24 @@ public class ItemSyringe extends Item { } } - if(this == ModItems.jetpack_tank && player.inventory.armorInventory[2] != null && - (player.inventory.armorInventory[2].getItem() == ModItems.jetpack_boost || player.inventory.armorInventory[2].getItem() == ModItems.jetpack_break || - player.inventory.armorInventory[2].getItem() == ModItems.jetpack_fly || player.inventory.armorInventory[2].getItem() == ModItems.jetpack_vector)) - { + if(this == ModItems.jetpack_tank && player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof JetpackBase) { if (!world.isRemote) { ItemStack jetpack = player.inventory.armorInventory[2]; - int fill = JetpackRegular.getFuel(jetpack) + 1000; - - if(jetpack.getItem() == ModItems.jetpack_boost && fill > JetpackBooster.maxFuel) - fill = JetpackBooster.maxFuel; - if(jetpack.getItem() == ModItems.jetpack_break && fill > JetpackBreak.maxFuel) - fill = JetpackBreak.maxFuel; - if(jetpack.getItem() == ModItems.jetpack_fly && fill > JetpackRegular.maxFuel) - fill = JetpackRegular.maxFuel; - if(jetpack.getItem() == ModItems.jetpack_vector && fill > JetpackVectorized.maxFuel) - fill = JetpackVectorized.maxFuel; + JetpackBase jetItem = (JetpackBase) jetpack.getItem(); - if(JetpackRegular.getFuel(jetpack) == fill) + if(jetItem.fuel != FluidType.KEROSENE) return stack; - JetpackRegular.setFuel(jetpack, fill); + int fill = JetpackBase.getFuel(jetpack) + 1000; + + if(fill > jetItem.maxFuel) + fill = jetItem.maxFuel; + + if(JetpackBase.getFuel(jetpack) == fill) + return stack; + + JetpackBase.setFuel(jetpack, fill); world.playSoundAtEntity(player, "hbm:item.jetpackTank", 1.0F, 1.0F); stack.stackSize--; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 61fe27e48..1e371f62c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -9,6 +9,9 @@ import net.minecraft.client.particle.EntityFireworkSparkFX; import net.minecraft.client.particle.EntityFlameFX; import net.minecraft.client.renderer.entity.RenderSnowball; import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; @@ -38,6 +41,7 @@ import com.hbm.entity.mob.botprime.EntityBOTPrimeHead; import com.hbm.entity.mob.sodtekhnologiyah.EntityBallsOTronSegment; import com.hbm.entity.particle.*; import com.hbm.entity.projectile.*; +import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.items.ModItems; import com.hbm.particle.*; import com.hbm.render.block.*; @@ -871,6 +875,61 @@ public class ClientProxy extends ServerProxy { world.spawnParticle(data.getString("mode"), x, y, z, mX, mY, mZ); } + if("jetpack".equals(type)) { + + Entity ent = world.getEntityByID(data.getInteger("player")); + + if(ent instanceof EntityPlayer) { + + EntityPlayer p = (EntityPlayer)ent; + + Vec3 vec = Vec3.createVectorHelper(0, 0, -0.25); + Vec3 offset = Vec3.createVectorHelper(0.125, 0, 0); + float angle = (float) -Math.toRadians(p.rotationYawHead - (p.rotationYawHead - p.renderYawOffset)); + + vec.rotateAroundY(angle); + offset.rotateAroundY(angle); + + double ix = p.posX + vec.xCoord; + double iy = p.posY + p.eyeHeight - 1; + double iz = p.posZ + vec.zCoord; + double ox = offset.xCoord; + double oz = offset.zCoord; + + double moX = 0; + double moY = 0; + double moZ = 0; + + int mode = data.getInteger("mode"); + + if(mode == 0) { + moY -= 0.2; + } + + if(mode == 1) { + Vec3 look = p.getLookVec(); + + moX -= look.xCoord * 0.1D; + moY -= look.yCoord * 0.1D; + moZ -= look.zCoord * 0.1D; + } + + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, p.motionX + moX * 2, p.motionY + moY * 2, p.motionZ + moZ * 2)); + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, p.motionX + moX * 2, p.motionY + moY * 2, p.motionZ + moZ * 2)); + Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, p.motionX + moX * 3, p.motionY + moY * 3, p.motionZ + moZ * 3)); + Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix - ox, iy, iz - oz, p.motionX + moX * 3, p.motionY + moY * 3, p.motionZ + moZ * 3)); + } + } + + if("muke".equals(type)) { + + ParticleMukeWave wave = new ParticleMukeWave(man, world, x, y, z); + ParticleMukeFlash flash = new ParticleMukeFlash(man, world, x, y, z); + + Minecraft.getMinecraft().effectRenderer.addEffect(wave); + Minecraft.getMinecraft().effectRenderer.addEffect(flash); + } + if("hadron".equals(type)) { /*for(int i = 0; i < 30; i++) { @@ -917,5 +976,19 @@ public class ClientProxy extends ServerProxy { Minecraft.getMinecraft().ingameGUI.func_110326_a(msg, false); } + + @Override + public boolean getIsKeyPressed(EnumKeybind key) { + + if(key == EnumKeybind.JETPACK) + return Minecraft.getMinecraft().gameSettings.keyBindJump.getIsKeyPressed(); + + return false; + } + + @Override + public EntityPlayer me() { + return Minecraft.getMinecraft().thePlayer; + } } diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 0aa0894fb..ba3edc077 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -25,6 +25,7 @@ import com.hbm.entity.mob.EntityTaintedCreeper; import com.hbm.entity.mob.botprime.EntityBOTPrimeHead; import com.hbm.entity.projectile.EntityBurningFOEQ; import com.hbm.entity.projectile.EntityMeteor; +import com.hbm.extprop.HbmExtendedProperties; import com.hbm.handler.BossSpawnHandler; import com.hbm.handler.RadiationWorldHandler; import com.hbm.handler.HTTPHandler; @@ -82,6 +83,7 @@ import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.ServerChatEvent; +import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.EntityEvent.EnteringChunk; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; @@ -129,6 +131,19 @@ public class ModEventHandler player.inventory.addItemStackToInventory(new ItemStack(ModItems.beta)); } } + + @SubscribeEvent + public void onEntityConstructing(EntityEvent.EntityConstructing event) { + + if(event.entity instanceof EntityPlayer) { + + EntityPlayer player = (EntityPlayer) event.entity; + + if(HbmExtendedProperties.getData(player) == null) { + + } + } + } @SubscribeEvent public void onEntityDeath(LivingDeathEvent event) { @@ -150,7 +165,7 @@ public class ModEventHandler if(event.entity instanceof EntityTaintedCreeper && event.source == ModDamageSource.boxcar) { - for(Object o : event.entity.worldObj.playerEntities) { + for(Object o : event.entity.worldObj.getEntitiesWithinAABB(EntityPlayer.class, event.entity.boundingBox.expand(50, 50, 50))) { EntityPlayer player = (EntityPlayer)o; player.triggerAchievement(MainRegistry.bobHidden); } diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index f8cb4f0e5..c2d5c868c 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -1,7 +1,9 @@ package com.hbm.main; +import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.sound.AudioWrapper; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; public class ServerProxy { @@ -25,4 +27,11 @@ public class ServerProxy { public void playSound(String sound, Object data) { } public void displayTooltip(String msg) { } + + public boolean getIsKeyPressed(EnumKeybind key) { + return false; + } + public EntityPlayer me() { + return null; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/packet/KeybindPacket.java b/src/main/java/com/hbm/packet/KeybindPacket.java new file mode 100644 index 000000000..a7d27c19a --- /dev/null +++ b/src/main/java/com/hbm/packet/KeybindPacket.java @@ -0,0 +1,49 @@ +package com.hbm.packet; + +import com.hbm.extprop.HbmExtendedProperties; +import com.hbm.handler.HbmKeybinds.EnumKeybind; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; + +public class KeybindPacket implements IMessage { + + int key; + boolean pressed; + + public KeybindPacket() { } + + public KeybindPacket(EnumKeybind key, boolean pressed) { + this.key = key.ordinal(); + this.pressed = pressed; + } + + @Override + public void fromBytes(ByteBuf buf) { + key = buf.readInt(); + pressed = buf.readBoolean(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(key); + buf.writeBoolean(pressed); + } + + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(KeybindPacket m, MessageContext ctx) { + + EntityPlayer p = ctx.getServerHandler().playerEntity; + HbmExtendedProperties props = HbmExtendedProperties.getData(p); + + props.setKeyPressed(EnumKeybind.values()[m.key], m.pressed); + + return null; + } + } +} diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 1ef1daa25..24f4ef011 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -95,6 +95,8 @@ public class PacketDispatcher { wrapper.registerMessage(GunAnimationPacket.Handler.class, GunAnimationPacket.class, i++, Side.CLIENT); //Sends a funi text to display like a music disc announcement wrapper.registerMessage(PlayerInformPacket.Handler.class, PlayerInformPacket.class, i++, Side.CLIENT); + //Universal keybind packet + wrapper.registerMessage(KeybindPacket.Handler.class, KeybindPacket.class, i++, Side.SERVER); } } diff --git a/src/main/java/com/hbm/particle/ParticleHadron.java b/src/main/java/com/hbm/particle/ParticleHadron.java index 95b34d1cc..923ca8b58 100644 --- a/src/main/java/com/hbm/particle/ParticleHadron.java +++ b/src/main/java/com/hbm/particle/ParticleHadron.java @@ -4,6 +4,8 @@ import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.particle.EntityFX; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; @@ -11,6 +13,7 @@ import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +@SideOnly(Side.CLIENT) public class ParticleHadron extends EntityFX { private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/hadron.png"); diff --git a/src/main/java/com/hbm/particle/ParticleMukeCloud.java b/src/main/java/com/hbm/particle/ParticleMukeCloud.java new file mode 100644 index 000000000..ea0f51b11 --- /dev/null +++ b/src/main/java/com/hbm/particle/ParticleMukeCloud.java @@ -0,0 +1,14 @@ +package com.hbm.particle; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.world.World; + +@SideOnly(Side.CLIENT) +public class ParticleMukeCloud extends EntityFX { + + public ParticleMukeCloud(World world, double x, double y, double z, double mx, double my, double mz) { + super(world, x, y, z, mx, my, mz); + } +} diff --git a/src/main/java/com/hbm/particle/ParticleMukeFlash.java b/src/main/java/com/hbm/particle/ParticleMukeFlash.java new file mode 100644 index 000000000..37a7e4e60 --- /dev/null +++ b/src/main/java/com/hbm/particle/ParticleMukeFlash.java @@ -0,0 +1,86 @@ +package com.hbm.particle; + +import java.util.Random; + +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +@SideOnly(Side.CLIENT) +public class ParticleMukeFlash extends EntityFX { + + private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/flare.png"); + private TextureManager theRenderEngine; + + public ParticleMukeFlash(TextureManager texman, World world, double x, double y, double z) { + super(world, x, y, z); + this.theRenderEngine = texman; + this.particleMaxAge = 20; + } + + public int getFXLayer() { + return 3; + } + + public void onUpdate() { + super.onUpdate(); + } + + public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) { + + this.theRenderEngine.bindTexture(texture); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + RenderHelper.disableStandardItemLighting(); + + tess.startDrawingQuads(); + + tess.setNormal(0.0F, 1.0F, 0.0F); + tess.setBrightness(240); + + this.particleAlpha = 1 - (((float)this.particleAge + interp) / (float)this.particleMaxAge); + float scale = (this.particleAge + interp) * 0.75F + 5; + + tess.setColorRGBA_F(1.0F, 0.9F, 0.75F, this.particleAlpha * 0.5F); + + float dX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX); + float dY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY); + float dZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ); + + Random rand = new Random(); + + for(int i = 0; i < 16; i++) { + + rand.setSeed(i * 31 + 1); + + float pX = (float) (dX + rand.nextDouble() * 5 - 2.5); + float pY = (float) (dY + rand.nextDouble() * 3 - 1.5); + float pZ = (float) (dZ + rand.nextDouble() * 5 - 2.5); + + tess.addVertexWithUV((double) (pX - x * scale - tx * scale), (double) (pY - y * scale), (double) (pZ - z * scale - tz * scale), 1, 1); + tess.addVertexWithUV((double) (pX - x * scale + tx * scale), (double) (pY + y * scale), (double) (pZ - z * scale + tz * scale), 1, 0); + tess.addVertexWithUV((double) (pX + x * scale + tx * scale), (double) (pY + y * scale), (double) (pZ + z * scale + tz * scale), 0, 0); + tess.addVertexWithUV((double) (pX + x * scale - tx * scale), (double) (pY - y * scale), (double) (pZ + z * scale - tz * scale), 0, 1); + } + tess.draw(); + + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glEnable(GL11.GL_LIGHTING); + } +} diff --git a/src/main/java/com/hbm/particle/ParticleMukeWave.java b/src/main/java/com/hbm/particle/ParticleMukeWave.java new file mode 100644 index 000000000..b21ed1e5a --- /dev/null +++ b/src/main/java/com/hbm/particle/ParticleMukeWave.java @@ -0,0 +1,70 @@ +package com.hbm.particle; + +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +@SideOnly(Side.CLIENT) +public class ParticleMukeWave extends EntityFX { + + private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/shockwave.png"); + private TextureManager theRenderEngine; + + public ParticleMukeWave(TextureManager texman,World world, double x, double y, double z) { + super(world, x, y, z); + this.theRenderEngine = texman; + this.particleMaxAge = 25; + } + + public int getFXLayer() { + return 3; + } + + public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) { + + this.theRenderEngine.bindTexture(texture); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDisable(GL11.GL_CULL_FACE); + RenderHelper.disableStandardItemLighting(); + + tess.startDrawingQuads(); + + tess.setNormal(0.0F, 1.0F, 0.0F); + tess.setBrightness(240); + + this.particleAlpha = 1 - (((float)this.particleAge + interp) / (float)this.particleMaxAge); + float scale = (this.particleAge + interp) * 2F; + + tess.setColorRGBA_F(1.0F, 1.0F, 1.0F, this.particleAlpha); + + float pX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double)interp - interpPosX); + float pY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double)interp - interpPosY); + float pZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double)interp - interpPosZ); + + tess.addVertexWithUV((double)(pX - 1 * scale), (double)(pY), (double)(pZ - 1 * scale), 1, 1); + tess.addVertexWithUV((double)(pX - 1 * scale), (double)(pY), (double)(pZ + 1 * scale), 1, 0); + tess.addVertexWithUV((double)(pX + 1 * scale), (double)(pY), (double)(pZ + 1 * scale), 0, 0); + tess.addVertexWithUV((double)(pX + 1 * scale), (double)(pY), (double)(pZ - 1 * scale), 0, 1); + tess.draw(); + + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glEnable(GL11.GL_LIGHTING); + } +}