From 4fd4aa819baf5caa301262cb9d5893f826ee0777 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 30 Apr 2025 12:43:36 +0200 Subject: [PATCH 1/2] crate dupe fix(?) --- changelog | 3 +- .../hbm/blocks/generic/BlockStorageCrate.java | 16 ++--- .../hbm/entity/item/EntityDeliveryDrone.java | 2 + .../hbm/entity/item/EntityRequestDrone.java | 2 + .../java/com/hbm/items/ItemInventory.java | 46 +++---------- .../items/block/ItemBlockStorageCrate.java | 66 +++++++++---------- .../java/com/hbm/items/tool/ItemLeadBox.java | 4 -- .../java/com/hbm/items/tool/ItemToolBox.java | 3 - 8 files changed, 49 insertions(+), 93 deletions(-) diff --git a/changelog b/changelog index 770e3049c..26ffd6999 100644 --- a/changelog +++ b/changelog @@ -5,4 +5,5 @@ ## Fixed * Fixed a potential crash caused by cargo dropships landing on cargo docks with no satellite chip installed * Fixed potential crash related to hazard handling for dropped items -* Fixed errors thrown when loading in old system bullet entities \ No newline at end of file +* Fixed errors thrown when loading in old system bullet entities +* Fixed dupe regarding breaking transport drones \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index e2d29a9f8..c06178eb0 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -214,18 +214,10 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - if(i == 0) { - world.setBlockMetadataWithNotify(x, y, z, 2, 2); - } - if(i == 1) { - world.setBlockMetadataWithNotify(x, y, z, 5, 2); - } - if(i == 2) { - world.setBlockMetadataWithNotify(x, y, z, 3, 2); - } - if(i == 3) { - world.setBlockMetadataWithNotify(x, y, z, 4, 2); - } + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); } @Override diff --git a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java index 1d3e9674b..951fae761 100644 --- a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java @@ -35,6 +35,8 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, @Override public boolean hitByEntity(Entity attacker) { + if(this.isDead) return false; + if(attacker instanceof EntityPlayer && !worldObj.isRemote) { this.setDead(); for (ItemStack stack : slots) { diff --git a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java index 6e8a742a1..108ba982c 100644 --- a/src/main/java/com/hbm/entity/item/EntityRequestDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityRequestDrone.java @@ -43,6 +43,8 @@ public class EntityRequestDrone extends EntityDroneBase { @Override public boolean hitByEntity(Entity attacker) { + if(this.isDead) return false; + if(attacker instanceof EntityPlayer && !worldObj.isRemote) { this.setDead(); if(heldItem != null) diff --git a/src/main/java/com/hbm/items/ItemInventory.java b/src/main/java/com/hbm/items/ItemInventory.java index e6d81ca8d..b9dc78852 100644 --- a/src/main/java/com/hbm/items/ItemInventory.java +++ b/src/main/java/com/hbm/items/ItemInventory.java @@ -23,14 +23,9 @@ public abstract class ItemInventory implements IInventory { public ItemStack[] slots; public ItemStack target; - public boolean toMarkDirty = false; - @Override public void markDirty() { - if(!toMarkDirty || player.getEntityWorld().isRemote) - return; - for(int i = 0; i < getSizeInventory(); ++i) { if(getStackInSlot(i) != null && getStackInSlot(i).stackSize == 0) { slots[i] = null; @@ -38,7 +33,6 @@ public abstract class ItemInventory implements IInventory { } ItemStackUtil.addStacksToNBT(target, slots); // Maintain compatibility with the containment boxes. - target.setTagCompound(checkNBT(target.getTagCompound())); } @@ -93,9 +87,10 @@ public abstract class ItemInventory implements IInventory { @Override public ItemStack decrStackSize(int slot, int amount) { ItemStack stack = getStackInSlot(slot); - if (stack != null) { + if(stack != null) { if (stack.stackSize > amount) { stack = stack.splitStack(amount); + markDirty(); } else { setInventorySlotContents(slot, null); } @@ -110,6 +105,7 @@ public abstract class ItemInventory implements IInventory { } slots[slot] = stack; + markDirty(); } @Override @@ -119,36 +115,12 @@ public abstract class ItemInventory implements IInventory { return stack; } - @Override - public ItemStack getStackInSlot(int slot) { - return slots[slot]; - } + @Override public ItemStack getStackInSlot(int slot) { return slots[slot]; } - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - return true; - } + @Override public boolean isUseableByPlayer(EntityPlayer player) { return true; } + @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } + @Override public int getInventoryStackLimit() { return 64; } - @Override - public boolean isItemValidForSlot(int slot, ItemStack stack) { - return true; - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public void openInventory() { - player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateOpen", 1.0F, 0.8F); - } - - @Override - public void closeInventory() { - toMarkDirty = true; - markDirty(); - toMarkDirty = false; - player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateClose", 1.0F, 0.8F); - } + @Override public void openInventory() { player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateOpen", 1.0F, 0.8F); } + @Override public void closeInventory() { player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateClose", 1.0F, 0.8F); } } diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index bcaa95e72..9f61bb66b 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -8,6 +8,7 @@ import com.hbm.items.tool.ItemKey; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.machine.storage.*; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -34,12 +35,10 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider if(!world.isRemote && stack.stackSize == 1) { if (stack.stackTagCompound != null && stack.stackTagCompound.hasKey("lock")) { for (ItemStack item : player.inventory.mainInventory) { - if(item == null) // Skip if no item. - continue; - if(!(item.getItem() instanceof ItemKey)) // Skip if item isn't a key. - continue; - if(item.stackTagCompound == null) // Skip if there is no NBT (wouldn't open it anyway). - continue; + + if(item == null) continue; // Skip if no item. + if(!(item.getItem() instanceof ItemKey)) continue; // Skip if item isn't a key. + if(item.stackTagCompound == null) continue; // Skip if there is no NBT (wouldn't open it anyway). if (item.stackTagCompound.getInteger("pins") == stack.stackTagCompound.getInteger("lock")) { // Check if pins are equal (if it can open it) TileEntityCrateBase.spawnSpiders(player, world, stack); player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); @@ -81,22 +80,19 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider } public static class InventoryCrate extends ItemInventory { - + public InventoryCrate(EntityPlayer player, ItemStack crate) { this.player = player; this.target = crate; - - slots = new ItemStack[this.getSizeInventory()]; - if(crate.stackTagCompound == null) - crate.stackTagCompound = new NBTTagCompound(); - else if(!player.worldObj.isRemote) { - for (int i = 0; i < this.getSizeInventory(); i++) - this.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(crate.stackTagCompound.getCompoundTag("slot" + i))); + + this.slots = new ItemStack[this.getSizeInventory()]; + if(target.stackTagCompound == null) { + target.stackTagCompound = new NBTTagCompound(); } - toMarkDirty = true; - this.markDirty(); - toMarkDirty = false; + + for(int i = 0; i < slots.length; i++) + this.slots[i] = ItemStack.loadItemStackFromNBT(target.stackTagCompound.getCompoundTag("slot" + i)); } @Nonnull @@ -128,38 +124,36 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider @Override public void markDirty() { // I HATE THIS SO MUCH - - if(player.getEntityWorld().isRemote || !toMarkDirty) { // go the fuck away - return; - } - NBTTagCompound nbt = new NBTTagCompound(); - int invSize = this.getSizeInventory(); for(int i = 0; i < invSize; i++) { ItemStack stack = this.getStackInSlot(i); - if(stack == null) - continue; + if(stack == null) continue; NBTTagCompound slot = new NBTTagCompound(); stack.writeToNBT(slot); nbt.setTag("slot" + i, slot); } - if(target.stackTagCompound != null) { // yes it's a bit jank, but it wants to clear otherwise so... - if(target.stackTagCompound.hasKey("lock")) - nbt.setInteger("lock", target.stackTagCompound.getInteger("lock")); - if(target.stackTagCompound.hasKey("lockMod")) - nbt.setDouble("lockMod", target.stackTagCompound.getDouble("lockMod")); - if(target.stackTagCompound.hasKey("spiders")) - nbt.setBoolean("spiders", target.stackTagCompound.getBoolean("spiders")); // fuck you!! + /*if(target.stackTagCompound != null) { // yes it's a bit jank, but it wants to clear otherwise so... + if(target.stackTagCompound.hasKey("lock")) nbt.setInteger("lock", target.stackTagCompound.getInteger("lock")); + if(target.stackTagCompound.hasKey("lockMod")) nbt.setDouble("lockMod", target.stackTagCompound.getDouble("lockMod")); + if(target.stackTagCompound.hasKey("spiders")) nbt.setBoolean("spiders", target.stackTagCompound.getBoolean("spiders")); // fuck you!! + }*/ + + /* + * target and held item stacks constantly desync, not being the same reference, while still holding the same value. + * code was tested with a copy of the containment box code using the CB's GUI and container to no avail. + * hypothesis: minecraft's keybind handling has some special bullshit case for ItemBlocks, since that is the only difference in the test. + * solution (?): check equality, then just access the held stack directly. if not, pray the target reference is still accurate and use that. + */ + if(player.getHeldItem() != null && ItemStack.areItemStacksEqual(player.getHeldItem(), target)) { + player.getHeldItem().setTagCompound(checkNBT(nbt)); + } else { + target.setTagCompound(checkNBT(nbt)); } - - target.setTagCompound(checkNBT(nbt)); - - player.inventory.setInventorySlotContents(player.inventory.currentItem, target); } } } diff --git a/src/main/java/com/hbm/items/tool/ItemLeadBox.java b/src/main/java/com/hbm/items/tool/ItemLeadBox.java index b57314db4..51e810c71 100644 --- a/src/main/java/com/hbm/items/tool/ItemLeadBox.java +++ b/src/main/java/com/hbm/items/tool/ItemLeadBox.java @@ -29,7 +29,6 @@ public class ItemLeadBox extends Item implements IGUIProvider { @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if(!world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); return stack; } @@ -60,9 +59,6 @@ public class ItemLeadBox extends Item implements IGUIProvider { if(fromNBT != null) { System.arraycopy(fromNBT, 0, slots, 0, slots.length); } - toMarkDirty = true; - this.markDirty(); - toMarkDirty = false; } @Override diff --git a/src/main/java/com/hbm/items/tool/ItemToolBox.java b/src/main/java/com/hbm/items/tool/ItemToolBox.java index 2d8b571c9..9739a6d26 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolBox.java +++ b/src/main/java/com/hbm/items/tool/ItemToolBox.java @@ -266,9 +266,6 @@ public class ItemToolBox extends Item implements IGUIProvider { if(fromNBT != null) { System.arraycopy(fromNBT, 0, slots, 0, slots.length); } - toMarkDirty = true; - this.markDirty(); - toMarkDirty = false; } @Override From c636632dc3d244a83baf40baffdf2ef8a3bfd02a Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 30 Apr 2025 16:18:37 +0200 Subject: [PATCH 2/2] flamethrower improvements, 12 gauge flechette fix --- changelog | 7 ++++++- .../items/weapon/sedna/factory/XFactory12ga.java | 4 ++-- .../weapon/sedna/factory/XFactoryFlamer.java | 2 ++ .../java/com/hbm/main/ModEventHandlerClient.java | 8 +++++++- .../tileentity/turret/TileEntityTurretFritz.java | 15 +++------------ 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/changelog b/changelog index 26ffd6999..2ad29c2c0 100644 --- a/changelog +++ b/changelog @@ -1,9 +1,14 @@ ## Changed * Nerfed AP and DU round damage multiplier * Effective damage is still much higher than on gunmetal ammo due to the armor piercing effect +* Increased flamethrower turret detection range from 32 to 48 blocks +* Flamethrower turrets now use the green fire effect when using balefire fuel +* Flamethrower turret projectile damage is now capped to 20 + * Balefire fuel should no longer instantly vaporize bosses ## Fixed * Fixed a potential crash caused by cargo dropships landing on cargo docks with no satellite chip installed * Fixed potential crash related to hazard handling for dropped items * Fixed errors thrown when loading in old system bullet entities -* Fixed dupe regarding breaking transport drones \ No newline at end of file +* Fixed dupe regarding breaking transport drones +* Fixed 12 gauge flechette DT negation not being the intended value \ No newline at end of file diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 011079a89..a13ade26a 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -69,7 +69,7 @@ public class XFactory12ga { public static BulletConfig g12_magnum; public static BulletConfig g12_explosive; public static BulletConfig g12_phosphorus; - public static BulletConfig g12_anthrax; + //public static BulletConfig g12_anthrax; public static BulletConfig g12_equestrian_bj; public static BulletConfig g12_equestrian_tkr; @@ -265,7 +265,7 @@ public class XFactory12ga { g12_bp_slug = new BulletConfig().setItem(EnumAmmo.G12_BP_SLUG).setCasing(EnumCasingType.SHOTSHELL, 12).setBlackPowder(true).setDamage(0.75F).setSpread(0.01F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP_SLUG")); g12 = new BulletConfig().setItem(EnumAmmo.G12).setCasing(EnumCasingType.BUCKSHOT, 6).setProjectiles(8).setDamage(1F/8F).setSpread(buckshotSpread).setRicochetAngle(15).setThresholdNegation(2F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xB52B2B, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA")); g12_slug = new BulletConfig().setItem(EnumAmmo.G12_SLUG).setCasing(EnumCasingType.BUCKSHOT, 6).setHeadshot(1.5F).setSpread(0.0F).setRicochetAngle(25).setThresholdNegation(4F).setArmorPiercing(0.15F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x393939, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_SLUG")); - g12_flechette = new BulletConfig().setItem(EnumAmmo.G12_FLECHETTE).setCasing(EnumCasingType.BUCKSHOT, 6).setProjectiles(8).setDamage(1F/8F).setThresholdNegation(5F).setThresholdNegation(3F).setArmorPiercing(0.2F).setSpread(0.025F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x3C80F0, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_FLECHETTE")); + g12_flechette = new BulletConfig().setItem(EnumAmmo.G12_FLECHETTE).setCasing(EnumCasingType.BUCKSHOT, 6).setProjectiles(8).setDamage(1F/8F).setThresholdNegation(5F).setArmorPiercing(0.2F).setSpread(0.025F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x3C80F0, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_FLECHETTE")); g12_magnum = new BulletConfig().setItem(EnumAmmo.G12_MAGNUM).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 6).setProjectiles(4).setDamage(2F/4F).setSpread(magnumSpread).setRicochetAngle(15).setThresholdNegation(4F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x278400, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_MAGNUM")); g12_explosive = new BulletConfig().setItem(EnumAmmo.G12_EXPLOSIVE).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 6).setDamage(2.5F).setOnImpact(LAMBDA_STANDARD_EXPLODE).setSpread(0F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xDA4127, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_EXPLOSIVE")); g12_phosphorus = new BulletConfig().setItem(EnumAmmo.G12_PHOSPHORUS).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 6).setProjectiles(8).setDamage(1F/8F).setSpread(magnumSpread).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x910001, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_PHOSPHORUS")) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java index 465f8506e..50e845278 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java @@ -41,6 +41,7 @@ import net.minecraftforge.common.util.ForgeDirection; public class XFactoryFlamer { public static BulletConfig flame_nograv; + public static BulletConfig flame_nograv_bf; public static BulletConfig flame_diesel; public static BulletConfig flame_gas; @@ -120,6 +121,7 @@ public class XFactoryFlamer { .setOnUpdate(LAMBDA_BALEFIRE).setOnRicochet(LAMBDA_LINGER_BALEFIRE); flame_nograv = flame_diesel.clone().setGrav(0); + flame_nograv_bf = flame_balefire.clone().setGrav(0).setLife(100); flame_topaz_diesel = flame_diesel .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D); flame_topaz_gas = flame_gas .clone().setProjectiles(2).setSpread(0.05F); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 54e833656..4b14ef3e6 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -984,11 +984,17 @@ public class ModEventHandlerClient { ItemDepletedFuel.class, ItemFluidDuct.class ); + + String prefix = "Gun "; + int scale = 8; + boolean ignoreNonNTM = true; List stacks = new ArrayList(); for (Object reg : Item.itemRegistry) { Item item = (Item) reg; + if(ignoreNonNTM && !Item.itemRegistry.getNameForObject(item).startsWith("hbm:")) continue; if(ignoredItems.contains(item)) continue; + if(!(item instanceof ItemGunBaseNT) && prefix.toLowerCase(Locale.US).startsWith("gun")) continue; if(collapsedClasses.contains(item.getClass())) { stacks.add(new ItemStack(item)); } else { @@ -996,7 +1002,7 @@ public class ModEventHandlerClient { } } - FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), "Block ", "wiki-block-renders-256", 8)); + FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), prefix, "wiki-block-renders-256", scale)); } } else { isRenderingItems = false; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index 650308411..e73c990c1 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -5,7 +5,6 @@ import java.util.List; import com.hbm.blocks.BlockDummyable; import com.hbm.entity.projectile.EntityBulletBaseMK4; -import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -16,11 +15,9 @@ import com.hbm.inventory.gui.GUITurretFritz; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.factory.XFactoryFlamer; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; -import com.hbm.packet.toclient.AuxParticlePacketNT; import api.hbm.fluid.IFluidStandardReceiver; import com.hbm.tileentity.IFluidCopiable; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -71,7 +68,7 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl @Override public double getDecetorRange() { - return 32D; + return 48D; } @Override @@ -112,18 +109,12 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl vec.rotateAroundZ((float) -this.rotationPitch); vec.rotateAroundY((float) -(this.rotationYaw + Math.PI * 0.5)); - EntityBulletBaseMK4 proj = new EntityBulletBaseMK4(worldObj, XFactoryFlamer.flame_nograv, (float) (trait.getHeatEnergy() / 500_000F), 0.05F, (float) rotationYaw, (float) rotationPitch); + float damage = Math.min((float) (trait.getHeatEnergy() / 500_000F), 20F); + EntityBulletBaseMK4 proj = new EntityBulletBaseMK4(worldObj, tank.getTankType() == Fluids.BALEFIRE ? XFactoryFlamer.flame_nograv_bf : XFactoryFlamer.flame_nograv, damage, 0.05F, (float) rotationYaw, (float) rotationPitch); proj.setPositionAndRotation(pos.xCoord + vec.xCoord, pos.yCoord + vec.yCoord, pos.zCoord + vec.zCoord, proj.rotationYaw, proj.rotationPitch); worldObj.spawnEntityInWorld(proj); worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:weapon.flamethrowerShoot", 2F, 1F + worldObj.rand.nextFloat() * 0.5F); - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaburst"); - data.setString("mode", "flame"); - data.setInteger("count", 2); - data.setDouble("motion", 0.025D); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, pos.xCoord + vec.xCoord, pos.yCoord + vec.yCoord, pos.zCoord + vec.zCoord), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50)); } }