From 585f8cf6d37ee64d1fc52166cd160e5eece69ddf Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sun, 10 May 2026 22:43:19 +0200 Subject: [PATCH] h --- changelog | 4 + src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../hbm/blocks/machine/MachineBigAssTank.java | 142 ++++++++++++++++++ .../java/com/hbm/config/GeneralConfig.java | 3 +- .../java/com/hbm/inventory/fluid/Fluids.java | 4 - .../hbm/inventory/recipes/MixerRecipes.java | 2 +- .../hbm/inventory/recipes/PrecAssRecipes.java | 10 +- .../anvil/AnvilSmithingCyanideRecipe.java | 4 +- .../com/hbm/items/tool/ItemRTTYPager.java | 15 ++ src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ModEventHandler.java | 7 +- src/main/java/com/hbm/main/NTMSounds.java | 3 + .../java/com/hbm/main/ResourceManager.java | 2 + .../render/tileentity/RenderBigAssTank.java | 137 +++++++++++++++++ .../hbm/tileentity/TileEntityLoadedBase.java | 24 ++- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../tileentity/machine/TileEntityCharger.java | 8 +- .../machine/TileEntityReactorZirnox.java | 2 +- .../machine/fusion/TileEntityFusionTorus.java | 2 +- .../oil/TileEntityMachineGasFlare.java | 2 +- .../oil/TileEntityMachineRefinery.java | 2 +- .../machine/storage/TileEntityBarrel.java | 3 +- .../storage/TileEntityMachineBigAssTank.java | 82 ++++++++++ .../storage/TileEntityMachineFluidTank.java | 5 +- .../storage/TileEntityMachineOrbus.java | 4 + .../network/TileEntityRadioTorchReceiver.java | 14 ++ src/main/resources/assets/hbm/sounds.json | 3 +- .../assets/hbm/sounds/block/metalImpact1.ogg | Bin 0 -> 30769 bytes .../assets/hbm/sounds/block/metalImpact2.ogg | Bin 0 -> 9793 bytes .../textures/models/machines/bigasstank.png | Bin 1580 -> 3306 bytes .../models/machines/blast_furnace.png | Bin 3163 -> 0 bytes 31 files changed, 460 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderBigAssTank.java create mode 100644 src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBigAssTank.java create mode 100644 src/main/resources/assets/hbm/sounds/block/metalImpact1.ogg create mode 100644 src/main/resources/assets/hbm/sounds/block/metalImpact2.ogg delete mode 100644 src/main/resources/assets/hbm/textures/models/machines/blast_furnace.png diff --git a/changelog b/changelog index 889b1bfbe..3e375c3f5 100644 --- a/changelog +++ b/changelog @@ -16,6 +16,10 @@ * Slightly adjusted the automatic buzzsaw's texture * Mobs can no longer spawn on most versions of concrete * Notable exceptions are mossy and cracked concrete bricks +* Increased the yield of lye from wood ash +* All fluid tanks larger than barrels now have dynamic IO speed instead of providing their entire contents instantly + * Tank fill will slow down the fuller the tank becomes, tank drain also slow downs as it gets emptier + * This means that multiple tanks in IO mode in the same network will still ping pong, but instead of firing their entire contents over the network, they will even out ## Fixed * Fixed RoR graph showing the wrong name in the GUI diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 6180127a9..4c6fc379c 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -995,6 +995,7 @@ public class ModBlocks { public static Block machine_fluidtank; public static Block machine_bat9000; + public static Block machine_bigasstank; public static Block machine_orbus; public static Block launch_pad; @@ -2209,6 +2210,7 @@ public class ModBlocks { machine_mixer = new MachineMixer(Material.iron).setBlockName("machine_mixer").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_fluidtank = new MachineFluidTank(Material.iron).setBlockName("machine_fluidtank").setHardness(5.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_bat9000 = new MachineBigAssTank9000(Material.iron).setBlockName("machine_bat9000").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_bigasstank = new MachineBigAssTank().setBlockName("machine_bigasstank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_orbus = new MachineOrbus(Material.iron).setBlockName("machine_orbus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_turbofan = new MachineTurbofan(Material.iron).setBlockName("machine_turbofan").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_turbinegas = new MachineTurbineGas(Material.iron).setBlockName("machine_turbinegas").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3254,6 +3256,7 @@ public class ModBlocks { register(machine_mixer); register(machine_fluidtank); register(machine_bat9000); + register(machine_bigasstank); register(machine_orbus); GameRegistry.registerBlock(machine_boiler_off, machine_boiler_off.getUnlocalizedName()); register(machine_steam_engine); diff --git a/src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java b/src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java new file mode 100644 index 000000000..aea632987 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineBigAssTank.java @@ -0,0 +1,142 @@ +package com.hbm.blocks.machine; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.IPersistentInfoProvider; +import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IPersistentNBT; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.storage.TileEntityMachineBigAssTank; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineBigAssTank extends BlockDummyable implements IPersistentInfoProvider { + + public MachineBigAssTank() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineBigAssTank(); + if(meta >= 6) return new TileEntityProxyCombo(false, false, true); + return null; + } + + @Override public int[] getDimensions() { return new int[] {5, 0, 4, 4, 4, 4}; } + @Override public int getOffset() { return 6; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + x += dir.offsetX * o; + z += dir.offsetZ * o; + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {4, 0, 5, -4, 2, 2}, this, dir); + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {4, 0, -4, 5, 2, 2}, this, dir); + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {4, 0, 2, 2, 5, -4}, this, dir); + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {4, 0, 2, 2, -4, 5}, this, dir); + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {3, 0, 6, -5, 0, 0}, this, dir); + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {3, 0, -5, 6, 0, 0}, this, dir); + + this.makeExtra(world, x + dir.offsetX * 6, y, z + dir.offsetZ * o); + this.makeExtra(world, x - dir.offsetX * 6, y, z - dir.offsetZ * o); + } + + @Override + protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, getDimensions(), x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, 0, 5, -4, 2, 2}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, 0, -4, 5, 2, 2}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, 0, 2, 2, 5, -4}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, 0, 2, 2, -4, 5}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {3, 0, 6, -5, 0, 0}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {3, 0, -5, 6, 0, 0}, x, y, z, dir)) return false; + return true; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + + if(world.isRemote) return true; + + if(!player.isSneaking()) { + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return false; + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); //we can do this because nobody is stopping me from doing this + return true; + } else if(player.isSneaking()){ + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return false; + + TileEntityMachineBigAssTank trialEntity = (TileEntityMachineBigAssTank) world.getTileEntity(pos[0], pos[1], pos[2]); + + if(trialEntity != null) { + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IItemFluidIdentifier) { + FluidType type = ((IItemFluidIdentifier) player.getHeldItem().getItem()).getType(world, pos[0], pos[1], pos[2], player.getHeldItem()); + + trialEntity.tank.setTankType(type); + trialEntity.markDirty(); + player.addChatComponentMessage(new ChatComponentText("Changed type to ").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)).appendSibling(new ChatComponentTranslation(type.getConditionalName())).appendSibling(new ChatComponentText("!"))); + } + } + return true; + } else { + return true; + } + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + return IPersistentNBT.getDrops(world, x, y, z, this); + } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(World world, int x, int y, int z, int side) { + + int meta = world.getBlockMetadata(x, y, z); + + if(meta >= 6) { + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return 0; + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + + if(!(te instanceof TileEntityMachineBigAssTank)) return 0; + + TileEntityMachineBigAssTank tank = (TileEntityMachineBigAssTank) te; + return tank.getComparatorPower(); + } + + return 0; + } + + @Override + public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { + FluidTank tank = new FluidTank(Fluids.NONE, 0); + tank.readFromNBT(persistentTag, "tank"); + list.add(EnumChatFormatting.YELLOW + "" + tank.getFill() + "/" + tank.getMaxFill() + "mB " + tank.getTankType().getLocalizedName()); + } +} diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index ff5777b85..a05408321 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -40,6 +40,7 @@ public class GeneralConfig { public static boolean enableMekanismChanges = true; public static boolean enableServerRecipeSync = false; public static boolean enableLoadScreenReplacement = true; + public static boolean enableMachineGravity = false; public static int normalSoundChannels = 200; public static boolean enableExpensiveMode = false; @@ -128,6 +129,7 @@ public class GeneralConfig { preferredOutputMod = CommonConfig.createConfigStringList(config,CATEGORY_GENERAL,"1.42_preferredOutputMod", "The mod which is preferred as output when certain machines autogenerate recipes. Currently used for the shredder", new String[] {RefStrings.MODID}); enableLoadScreenReplacement = config.get(CATEGORY_GENERAL, "1.43_enableLoadScreenReplacement", true, "Tries to replace the vanilla load screen with the 'tip of the day' one, may clash with other mods trying to do the same.").getBoolean(true); + enableMachineGravity = config.get(CATEGORY_GENERAL, "1.44_enableMachineGravity", true, "Requires some large machines to have a proper foundation, or else they tilt and break.").getBoolean(false); enableExpensiveMode = config.get(CATEGORY_GENERAL, "1.99_enableExpensiveMode", false, "It does what the name implies.").getBoolean(false); final String CATEGORY_528 = CommonConfig.CATEGORY_528; @@ -178,7 +180,6 @@ public class GeneralConfig { enable528NetherBurn = false; enable528PressurizedRecipes = false; enable528ExplosiveEnergistics = false; - enable528MachineGravity = false; } } } diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 2d0e8977a..730c9c5b1 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -621,10 +621,6 @@ public class Fluids { .addStep(238, 1, SUPERHOTSTEAM, 1) .addStep(2500, 10, ULTRAHOTSTEAM, 1)); - STEAM.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, eff_steam_boil).setEff(HeatingType.HEATEXCHANGER, eff_steam_heatex).addStep(2, 10, HOTSTEAM, 1)); - HOTSTEAM.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, eff_steam_boil).setEff(HeatingType.HEATEXCHANGER, eff_steam_heatex).addStep(18, 10, SUPERHOTSTEAM, 1)); - SUPERHOTSTEAM.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, eff_steam_boil).setEff(HeatingType.HEATEXCHANGER, eff_steam_heatex).addStep(120, 10, ULTRAHOTSTEAM, 1)); - double eff_steam_turbine = 1.0D; double eff_steam_cool = 0.5D; STEAM.addTraits(new FT_Coolable(SPENTSTEAM, 100, 1, 200).setEff(CoolingType.TURBINE, eff_steam_turbine).setEff(CoolingType.HEATEXCHANGER, eff_steam_cool)); diff --git a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java index dbf42353e..1fae66604 100644 --- a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java @@ -95,7 +95,7 @@ public class MixerRecipes extends SerializableRecipe { register(Fluids.PHEROMONE_M, new MixerRecipe(2000, 10).setStack1(new FluidStack(Fluids.PHEROMONE, 1500)).setStack2(new FluidStack(Fluids.BLOOD, 500)).setSolid(new ComparableStack(ModItems.pill_herbal))); register(Fluids.BAUXITE_SOLUTION, new MixerRecipe(300, 80).setStack1(new FluidStack(Fluids.LYE, 50)).setSolid(new ComparableStack(ModBlocks.stone_resource, 1, BlockEnums.EnumStoneType.BAUXITE.ordinal()))); - register(Fluids.LYE, new MixerRecipe(50, 100).setStack1(new FluidStack(Fluids.WATER, 500)).setSolid(new ComparableStack(ModItems.powder_ash, 2, EnumAshType.WOOD))); + register(Fluids.LYE, new MixerRecipe(100, 100).setStack1(new FluidStack(Fluids.WATER, 100)).setSolid(new ComparableStack(ModItems.powder_ash, 1, EnumAshType.WOOD))); register(Fluids.ALUMINA, new MixerRecipe(200, 40).setStack1(new FluidStack(Fluids.SODIUM_ALUMINATE, 150)).setSolid(new OreDictStack(F.dust(), 3)), new MixerRecipe(300, 40).setStack1(new FluidStack(Fluids.SODIUM_ALUMINATE, 150)).setSolid(new ComparableStack(DictFrame.fromOne(ModItems.chunk_ore, ItemEnums.EnumChunkType.CRYOLITE)))); diff --git a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java index cae9f0173..d0bd959e9 100644 --- a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java @@ -62,8 +62,8 @@ public class PrecAssRecipes extends GenericRecipes { new OreDictStack(ANY_HARDPLASTIC.ingot(), 8), new ComparableStack(ModItems.pellet_charged, 4), new OreDictStack(GOLD.wireFine(), 8)) - .inputFluids(new FluidStack(Fluids.HELIUM4, 4_000)).setPools(POOL_PREFIX_528 + "chip_quantum"), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM), 75, GeneralConfig.enableExpensiveMode ? 50 : 50); + .inputFluids(new FluidStack(Fluids.HELIUM4, 1_000)).setPools(POOL_PREFIX_528 + "chip_quantum"), + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM), 90, GeneralConfig.enableExpensiveMode ? 50 : 50); registerPair(new GenericRecipe("precass.atomic_clock").setup(200, 2_000L) .inputItems(new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CHIP), @@ -80,7 +80,7 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.upgrade_speed_1), new OreDictStack(PB.wireFine(), 16)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 1_000)), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER), 50, GeneralConfig.enableExpensiveMode ? 50 : 90); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER), 75, GeneralConfig.enableExpensiveMode ? 50 : 90); registerPair(new GenericRecipe("precass.controller_advanced").setup(600, 25_000) .inputItems(new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP_BISMOID), @@ -90,7 +90,7 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.upgrade_speed_3), new OreDictStack(PB.wireFine(), 24)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 4_000)), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_ADVANCED), 35, GeneralConfig.enableExpensiveMode ? 50 : 75); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_ADVANCED), 50, GeneralConfig.enableExpensiveMode ? 50 : 75); registerPair(new GenericRecipe("precass.controller_quantum").setup(600, 250_000) .inputItems(new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP_QUANTUM), @@ -100,7 +100,7 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.upgrade_overdrive_1), new OreDictStack(PB.wireFine(), 32)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 6_000)), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_QUANTUM), 25, GeneralConfig.enableExpensiveMode ? 50 : 75); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_QUANTUM), 75, GeneralConfig.enableExpensiveMode ? 50 : 75); addFirstUpgrade(ModItems.upgrade_speed_1, ModItems.upgrade_speed_2, "precass.upgrade_speed_ii"); addSecondUpgrade(ModItems.upgrade_speed_2, ModItems.upgrade_speed_3, "precass.upgrade_speed_iii"); diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingCyanideRecipe.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingCyanideRecipe.java index 5b1db63d5..b3fb74690 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingCyanideRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingCyanideRecipe.java @@ -22,7 +22,7 @@ public class AnvilSmithingCyanideRecipe extends AnvilSmithingRecipe { @Override public boolean matches(ItemStack left, ItemStack right) { - return doesStackMatch(right, this.right) && left.getItem() instanceof ItemFood; + return (doesStackMatch(right, this.right) || right.getItem() == ModItems.pill_red) && left.getItem() instanceof ItemFood; } @Override @@ -38,7 +38,7 @@ public class AnvilSmithingCyanideRecipe extends AnvilSmithingRecipe { if(!out.hasTagCompound()) out.stackTagCompound = new NBTTagCompound(); - out.stackTagCompound.setBoolean("ntmCyanide", true); + out.stackTagCompound.setBoolean(right.getItem() == ModItems.pill_red ? "ntmRedPill" : "ntmCyanide", true); return out; } diff --git a/src/main/java/com/hbm/items/tool/ItemRTTYPager.java b/src/main/java/com/hbm/items/tool/ItemRTTYPager.java index 9372389db..ac3d2b018 100644 --- a/src/main/java/com/hbm/items/tool/ItemRTTYPager.java +++ b/src/main/java/com/hbm/items/tool/ItemRTTYPager.java @@ -2,6 +2,10 @@ package com.hbm.items.tool; import java.util.List; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; +import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.inventory.gui.GUIScreenPager; import com.hbm.items.IItemControlReceiver; import com.hbm.main.MainRegistry; @@ -37,6 +41,17 @@ public class ItemRTTYPager extends Item implements IItemControlReceiver, IGUIPro if(chan != null && chan.timeStamp >= world.getTotalWorldTime() - 1) { int alive = entity.ticksExisted % 1000; String message = EnumChatFormatting.GOLD + "[ " + channelFreq + " (" + alive + ") ] " + EnumChatFormatting.YELLOW + chan.signal; + + if("selfdestruct".equals(chan.signal + "")) { + ExplosionVNT vnt = new ExplosionVNT(world, entity.posX, entity.posY + entity.height / 2, entity.posZ, 5, null); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, 50).setupPiercing(5F, 0.5F)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); + vnt.explode(); + stack.stackSize--; + return; + } + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(message, ServerProxy.ID_PAGER_DYN + slot, 5_000), (EntityPlayerMP) entity); } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 94e2016a1..c1dd359d7 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -276,6 +276,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePUREX.class, new RenderPUREX()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFluidTank.class, new RenderFluidTank()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineBAT9000.class, new RenderBAT9000()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineBigAssTank.class, new RenderBigAssTank()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineOrbus.class, new RenderOrbus()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRefinery.class, new RenderRefinery()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFractionTower.class, new RenderFractionTower()); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 2284c4c70..db5012e03 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -1309,10 +1309,13 @@ public class ModEventHandler { if(stack != null && stack.getItem() instanceof ItemFood) { - if(stack.hasTagCompound() && stack.getTagCompound().getBoolean("ntmCyanide")) { - for(int i = 0; i < 10; i++) { + if(stack.hasTagCompound()) { + if(stack.getTagCompound().getBoolean("ntmCyanide")) for(int i = 0; i < 10; i++) { event.entityPlayer.attackEntityFrom(rand.nextBoolean() ? ModDamageSource.euthanizedSelf : ModDamageSource.euthanizedSelf2, 1000); } + if(stack.getTagCompound().getBoolean("ntmRedPill")) for(int i = 0; i < 10; i++) { + event.entityPlayer.addPotionEffect(new PotionEffect(HbmPotion.death.id, 60 * 60 * 20, 0)); + } } } } diff --git a/src/main/java/com/hbm/main/NTMSounds.java b/src/main/java/com/hbm/main/NTMSounds.java index 79a6a1768..be822953d 100644 --- a/src/main/java/com/hbm/main/NTMSounds.java +++ b/src/main/java/com/hbm/main/NTMSounds.java @@ -146,6 +146,7 @@ public class NTMSounds { public static final String BANG = "hbm:weapon.bang"; // frying pan public static final String SLICE = "hbm:weapon.slice"; public static final String KAPENG = "hbm:weapon.kapeng"; // third degree + public static final String METAL_IMPACT = "hbm:block.metalImpact"; // ow /// VANILLA CRAP I CANNOT BE ASSED TO REMEMBER /// public static final String VANILLA_ORB = "random.orb"; // xp orb ping @@ -158,4 +159,6 @@ public class NTMSounds { public static final String VANILLA_GIB = "mob.zombie.woodbreak"; // zombie breaks door down public static final String VANILLA_TELEPORT = "mob.endermen.portal"; // enderman teleports public static final String VANILLA_ANVIL = "random.anvil_land"; // falling anvil lands + public static final String VANILLA_PISTON_OUT = "tile.piston.out"; // falling anvil lands + public static final String VANILLA_PISTON_IN = "tile.piston.in"; // falling anvil lands } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 90e495965..2d6ea8be8 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -93,6 +93,7 @@ public class ResourceManager { public static final IModelCustom fluidtank = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fluidtank.obj")).asVBO(); public static final IModelCustom fluidtank_exploded = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/fluidtank_exploded.obj")).asVBO(); public static final IModelCustom bat9000 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/bat9000.obj")).asVBO(); + public static final IModelCustom bigasstank = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/bigasstank.obj")).asVBO(); public static final IModelCustom orbus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/orbus.obj")).asVBO(); //Turbofan @@ -522,6 +523,7 @@ public class ResourceManager { public static final ResourceLocation tank_inner_tex = new ResourceLocation(RefStrings.MODID, "textures/models/tank/tank_inner.png"); public static final ResourceLocation tank_label_tex = new ResourceLocation(RefStrings.MODID, "textures/models/tank/tank_NONE.png"); public static final ResourceLocation bat9000_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/bat9000.png"); + public static final ResourceLocation bigasstank_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/bigasstank.png"); public static final ResourceLocation orbus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/orbus.png"); //Turbofan diff --git a/src/main/java/com/hbm/render/tileentity/RenderBigAssTank.java b/src/main/java/com/hbm/render/tileentity/RenderBigAssTank.java new file mode 100644 index 000000000..158f46011 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderBigAssTank.java @@ -0,0 +1,137 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.render.util.DiamondPronter; +import com.hbm.render.util.EnumSymbol; +import com.hbm.tileentity.machine.storage.TileEntityMachineBigAssTank; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderBigAssTank extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + + TileEntityMachineBigAssTank bat = (TileEntityMachineBigAssTank) te; + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + if(bat.tilted) { + GL11.glTranslated(0, -1, 0); + GL11.glRotated(10, 0, 0, 1); + GL11.glRotated(5, 0, 1, 0); + } + + switch(te.getBlockMetadata() - 10) { + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; + } + + bindTexture(ResourceManager.bigasstank_tex); + + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.bigasstank.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glDisable(GL11.GL_LIGHTING); + + FluidType type = bat.tank.getTankType(); + + if(type != null && type != Fluids.NONE) { + + GL11.glPushMatrix(); + int poison = type.poison; + int flammability = type.flammability; + int reactivity = type.reactivity; + EnumSymbol symbol = type.symbol; + + GL11.glRotatef(22.5F, 0, 1, 0); + + for(int j = 0; j < 2; j++) { + + GL11.glPushMatrix(); + GL11.glTranslated(5.5, 2, 0); + DiamondPronter.pront(poison, flammability, reactivity, symbol); + GL11.glPopMatrix(); + GL11.glRotatef(180, 0, 1, 0); + } + GL11.glPopMatrix(); + } + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor3f(1F, 1F, 1F); + + bindTexture(bat.tank.getTankType().getTexture()); + + Tessellator tess = Tessellator.instance; + + double height = bat.tank.getFill() * 1.5D / bat.tank.getMaxFill(); + double off = 5.9375; + double speed = 250D; + + double minU = -((te.getWorldObj().getTotalWorldTime() % speed + interp) / speed) % 1D; + double maxU = minU + 1; + + tess.startDrawingQuads(); + + tess.addVertexWithUV(-off, 1.75, -0.25, minU, 0); + tess.addVertexWithUV(-off, 1.75 + height, -0.25, minU, -height * 2); + tess.addVertexWithUV(-off, 1.75 + height, 0.25, maxU, -height * 2); + tess.addVertexWithUV(-off, 1.75, 0.25, maxU, 0); + + tess.addVertexWithUV(off, 1.75, -0.25, maxU, 0); + tess.addVertexWithUV(off, 1.75 + height, -0.25, maxU, -height * 2); + tess.addVertexWithUV(off, 1.75 + height, 0.25, minU, -height * 2); + tess.addVertexWithUV(off, 1.75, 0.25, minU, 0); + + tess.draw(); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_bigasstank); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.bigasstank_tex); + ResourceManager.bigasstank.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java b/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java index bd234d71d..9a5efec8f 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java @@ -1,7 +1,9 @@ package com.hbm.tileentity; +import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.handler.threading.PacketThreading; +import com.hbm.main.NTMSounds; import com.hbm.packet.toclient.BufPacket; import com.hbm.sound.AudioWrapper; import com.hbm.util.fauxpointtwelve.BlockPos; @@ -103,8 +105,18 @@ public class TileEntityLoadedBase extends TileEntity implements ILoadedTile, IBu PacketThreading.createAllAroundThreadedPacket(packet, new NetworkRegistry.TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); } - public void checkTilt(boolean extraHeavy) { - if(!GeneralConfig.enable528MachineGravity) { this.tilted = false; return; } + public static enum TiltType { + UNAVOIDABLE, CONFIG_NORMAL, CONFIG_528 + } + + public void checkTilt(TiltType cfg, boolean extraHeavy) { + boolean doesTilt = false; + if(cfg == TiltType.UNAVOIDABLE) doesTilt = true; + if(cfg == TiltType.CONFIG_NORMAL && GeneralConfig.enableMachineGravity) doesTilt = true; + if(cfg == TiltType.CONFIG_NORMAL && GeneralConfig.enable528MachineGravity) doesTilt = true; + if(cfg == TiltType.CONFIG_528 && GeneralConfig.enable528MachineGravity) doesTilt = true; + + if(!doesTilt) { this.tilted = false; return; } if(this.getFloorCount() <= 0) { this.tilted = false; return; } if(this.worldObj.getTotalWorldTime() % 20 != 0) return; @@ -113,7 +125,7 @@ public class TileEntityLoadedBase extends TileEntity implements ILoadedTile, IBu if(this.tiltBlocksValid >= this.tiltBlocksChecked * 0.95) { this.tilted = false; } else { - // if(!this.tiled) play sound + if(!this.tilted) worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, NTMSounds.METAL_IMPACT, 3F, 1F); this.tilted = true; } @@ -145,6 +157,7 @@ public class TileEntityLoadedBase extends TileEntity implements ILoadedTile, IBu } else { if(!ground.isSideSolid(worldObj, pos.getX(), pos.getY(), pos.getZ(), ForgeDirection.UP)) return; if(ground.getMaterial() == Material.sand) return; + if(ground == ModBlocks.dirt_dead || ground == ModBlocks.dirt_oily || ground == ModBlocks.stone_cracked) return; this.tiltBlocksValid++; } } @@ -153,9 +166,12 @@ public class TileEntityLoadedBase extends TileEntity implements ILoadedTile, IBu public BlockPos getFloorPosFromIndex(int index) { return null; } public BlockPos standardFloor3x3(int index) { - return new BlockPos(xCoord - 1 + (index / 2) * 2, yCoord - 1, zCoord - 2 + (index % 2) * 2); + return new BlockPos(xCoord - 1 + (index / 2) * 2, yCoord - 1, zCoord - 1 + (index % 2) * 2); } public BlockPos standardFloor5x5(int index) { return new BlockPos(xCoord - 2 + (index / 3) * 2, yCoord - 1, zCoord - 2 + (index % 3) * 2); } + public BlockPos standardFloor7x7(int index) { + return new BlockPos(xCoord - 3 + (index / 4) * 2, yCoord - 1, zCoord - 3 + (index % 4) * 2); + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index bfedd2533..d668a3d64 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -207,6 +207,7 @@ public class TileMappings { put(TileEntityLanternBehemoth.class, "tileentity_lantern_behemoth"); put(TileEntityStorageDrum.class, "tileentity_waste_storage_drum"); put(TileEntityMachineBAT9000.class, "tileentity_bat9000"); + put(TileEntityMachineBigAssTank.class, "tileentity_bigasstank"); put(TileEntityMachineOrbus.class, "tileentity_orbus"); put(TileEntityGlpyhidSpawner.class, "tileentity_glyphid_spawner"); put(TileEntityCustomMachine.class, "tileentity_custom_machine"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java index 2441c6279..f8fcdd43a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java @@ -6,6 +6,8 @@ import java.util.Random; import api.hbm.energymk2.IBatteryItem; import api.hbm.energymk2.IEnergyReceiverMK2; + +import com.hbm.main.NTMSounds; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import io.netty.buffer.ByteBuf; @@ -58,7 +60,7 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyRe lastOp--; if(worldObj.getTotalWorldTime() % 20 == 0) - worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "random.fizz", 0.2F, 0.5F); + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, NTMSounds.VANILLA_HISS, 0.2F, 0.5F); } networkPackNT(50); @@ -69,12 +71,12 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyRe if((charge > 0 || particles) && usingTicks < delay) { usingTicks++; if(usingTicks == 2) - worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "tile.piston.out", 0.5F, 0.5F); + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, NTMSounds.VANILLA_PISTON_OUT, 0.5F, 0.5F); } if((charge <= 0 && !particles) && usingTicks > 0) { usingTicks--; if(usingTicks == 4) - worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "tile.piston.in", 0.5F, 0.5F); + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, NTMSounds.VANILLA_PISTON_IN, 0.5F, 0.5F); } if(particles) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java index 11b6a930e..4e52eea94 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java @@ -188,7 +188,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC public void updateEntity() { if(!worldObj.isRemote) { - this.checkTilt(true); + this.checkTilt(TiltType.CONFIG_NORMAL, true); if (redstonePowered) { isOn = true; diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java index 7a9b9b7dc..8acf1b033 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java @@ -98,7 +98,7 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP public void updateEntity() { if(!worldObj.isRemote) { - this.checkTilt(true); + this.checkTilt(TiltType.CONFIG_NORMAL, true); for(int i = 0; i < 4; i++) { if(klystronNodes[i] == null || klystronNodes[i].expired) klystronNodes[i] = createNode(KlystronNetworkProvider.THE_PROVIDER, ForgeDirection.getOrientation(i + 2)); diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index 243fc61d1..06547e4ab 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -105,7 +105,7 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements public void updateEntity() { if(!worldObj.isRemote) { - this.checkTilt(false); + this.checkTilt(TiltType.CONFIG_528, false); this.fluidUsed = 0; this.output = 0; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index fb786e974..960cd6873 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -133,7 +133,7 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements public void updateEntity() { if(!worldObj.isRemote) { - this.checkTilt(false); + this.checkTilt(TiltType.CONFIG_528, false); this.isOn = false; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index 67f638ebd..3cbcbb5c4 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -81,6 +81,7 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom @Override public long getDemand(FluidType type, int pressure) { + if(this.tilted) return 0; if(this.mode == 2 || this.mode == 3) return 0; if(tank.getPressure() != pressure) return 0; return type == tank.getTankType() ? tank.getMaxFill() - tank.getFill() : 0; @@ -126,7 +127,7 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom this.node = null; } - for(DirPos pos : getConPos()) { + if(!this.tilted) for(DirPos pos : getConPos()) { FluidNode dirNode = (FluidNode) UniNodespace.getNode(worldObj, pos.getX(), pos.getY(), pos.getZ(), tank.getTankType().getNetworkProvider()); if(mode == 2) { diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBigAssTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBigAssTank.java new file mode 100644 index 000000000..e77870a1c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBigAssTank.java @@ -0,0 +1,82 @@ +package com.hbm.tileentity.machine.storage; + +import com.hbm.inventory.fluid.FluidType; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityMachineBigAssTank extends TileEntityBarrel { + + public TileEntityMachineBigAssTank() { + super(16_000_000); + } + + @Override + public String getName() { + return "container.bigAssTank"; + } + + @Override public long getReceiverSpeed(FluidType type, int pressure) { return Math.max(50_000, (tank.getMaxFill() - tank.getFill()) / 100); } + @Override public long getProviderSpeed(FluidType type, int pressure) { return Math.max(50_000, tank.getFill() / 100); } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + this.checkTilt(TiltType.UNAVOIDABLE, true); + } + + super.updateEntity(); + } + + @Override public int getFloorCount() { return 4 * 4; } + @Override public BlockPos getFloorPosFromIndex(int index) { return this.standardFloor7x7(index); } + + @Override + public void checkFluidInteraction() { + + if(tank.getTankType().isAntimatter()) { + worldObj.func_147480_a(xCoord, yCoord, zCoord, false); + worldObj.newExplosion(null, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 10, true, true); + } + } + + @Override + protected DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + + return new DirPos[] { + new DirPos(xCoord + dir.offsetX * 7, yCoord, zCoord + dir.offsetZ * 7, dir), + new DirPos(xCoord - dir.offsetX * 7, yCoord, zCoord - dir.offsetZ * 7, dir.getOpposite()) + }; + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 6, + yCoord, + zCoord - 6, + xCoord + 7, + yCoord + 5, + zCoord + 7 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index e4c7be1ea..4fec1623f 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -73,9 +73,12 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements public TileEntityMachineFluidTank() { super(6); - tank = new FluidTank(Fluids.NONE, 256000); + tank = new FluidTank(Fluids.NONE, 256_000); } + @Override public long getReceiverSpeed(FluidType type, int pressure) { return Math.max(500, (tank.getMaxFill() - tank.getFill()) / 100); } + @Override public long getProviderSpeed(FluidType type, int pressure) { return Math.max(500, tank.getFill() / 100); } + @Override public String getName() { return "container.fluidtank"; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java index 3835238c7..2368ef2ef 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine.storage; import com.hbm.blocks.BlockDummyable; +import com.hbm.inventory.fluid.FluidType; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; @@ -18,6 +19,9 @@ public class TileEntityMachineOrbus extends TileEntityBarrel { public String getName() { return "container.orbus"; } + + @Override public long getReceiverSpeed(FluidType type, int pressure) { return Math.max(1_000, (tank.getMaxFill() - tank.getFill()) / 100); } + @Override public long getProviderSpeed(FluidType type, int pressure) { return Math.max(1_000, tank.getFill() / 100); } @Override public void checkFluidInteraction() { } //NO! diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReceiver.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReceiver.java index 1d2dd4d34..798b1a1a8 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReceiver.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReceiver.java @@ -1,5 +1,9 @@ package com.hbm.tileentity.network; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; +import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.tileentity.network.RTTYSystem.RTTYChannel; import net.minecraft.util.MathHelper; @@ -20,6 +24,16 @@ public class TileEntityRadioTorchReceiver extends TileEntityRadioTorchBase { this.lastUpdate = worldObj.getTotalWorldTime(); int nextState = 0; //if no remap apply, default to 0 + if("selfdestruct".equals(msg)) { + worldObj.func_147480_a(xCoord, yCoord, zCoord, false); + ExplosionVNT vnt = new ExplosionVNT(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 5, null); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, 50).setupPiercing(5F, 0.5F)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); + vnt.explode(); + return; + } + if(this.customMap) { for(int i = 15; i >= 0; i--) { // highest to lowest, if duplicates exist for some reason if(msg.equals(this.mapping[i])) { diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 05cc4631d..d5dd6e297 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -76,7 +76,8 @@ "block.assemblerCut": {"category": "block", "sounds": [{"name": "block/assemblerCut", "stream": false}]}, "block.leverStart": {"category": "block", "sounds": [{"name": "block/leverStart", "stream": false}]}, "block.leverStop": {"category": "block", "sounds": [{"name": "block/leverStop", "stream": false}]}, - "block.spark": {"category": "block", "sounds": ["block/spark1", "block/spark2", "block/spark3", "block/spark4", "block/spark5", "block/spar6"]}, + "block.spark": {"category": "block", "sounds": ["block/spark1", "block/spark2", "block/spark3", "block/spark4", "block/spark5", "block/spark6"]}, + "block.metalImpact": {"category": "block", "sounds": ["block/metalImpact1", "block/metalImpact2"]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/metalImpact1.ogg b/src/main/resources/assets/hbm/sounds/block/metalImpact1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fac2458410e7171f6b929c724bc8179240c958b8 GIT binary patch literal 30769 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 ItPTo>0JC^R2mk;8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/sounds/block/metalImpact2.ogg b/src/main/resources/assets/hbm/sounds/block/metalImpact2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a031f86fff0dae74a9cfa4dea1260055cbe59eac GIT binary patch literal 9793 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 CWI03t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/bigasstank.png b/src/main/resources/assets/hbm/textures/models/machines/bigasstank.png index bed773d7950f811ab2ab38ca24145396aa30cb07..8e4e4f7e84c7da8be49412d207be674cb2f141c8 100644 GIT binary patch literal 3306 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