From 84d5dcb3a674a3695030b88578692061d9ba39f1 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 12 Feb 2023 20:42:33 +0100 Subject: [PATCH] fissures --- src/main/java/com/hbm/blocks/ModBlocks.java | 6 + .../com/hbm/blocks/bomb/BlockFissureBomb.java | 38 ++++ .../com/hbm/blocks/bomb/BlockTNTBase.java | 6 +- .../hbm/blocks/generic/BlockBedrockOreTE.java | 1 + .../com/hbm/blocks/generic/BlockFissure.java | 53 ++++++ .../hbm/blocks/machine/MachineHephaestus.java | 6 +- .../java/com/hbm/crafting/WeaponRecipes.java | 1 + .../com/hbm/explosion/ExplosionSolinium.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../render/tileentity/RenderHephaestus.java | 71 ++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityMachineHephaestus.java | 169 +++++++++++++++++- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../textures/blocks/fissure_bomb_bottom.png | Bin 0 -> 158 bytes .../hbm/textures/blocks/fissure_bomb_side.png | Bin 0 -> 362 bytes .../hbm/textures/blocks/fissure_bomb_top.png | Bin 0 -> 458 bytes .../hbm/textures/blocks/molten_overlay.png | Bin 0 -> 834 bytes .../textures/blocks/molten_overlay.png.mcmeta | 5 + .../textures/models/machines/hephaestus.png | Bin 3069 -> 5497 bytes 21 files changed, 357 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/bomb/BlockFissureBomb.java create mode 100644 src/main/java/com/hbm/blocks/generic/BlockFissure.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderHephaestus.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/fissure_bomb_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/fissure_bomb_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/fissure_bomb_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/molten_overlay.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/molten_overlay.png.mcmeta diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index b963b741c..7037fb6cf 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -80,6 +80,7 @@ public class ModBlocks { public static Block ore_random; public static Block ore_bedrock; + public static Block ore_volcano; public static Block ore_bedrock_coltan; @@ -552,6 +553,7 @@ public class ModBlocks { public static Block tnt; public static Block semtex; public static Block c4; + public static Block fissure_bomb; public static Block charge_dynamite; public static Block charge_miner; @@ -1401,6 +1403,7 @@ public class ModBlocks { ore_random = new BlockMotherOfAllOres().setBlockName("ore_random").setCreativeTab(MainRegistry.blockTab); ore_bedrock = new BlockBedrockOreTE().setBlockName("ore_bedrock").setCreativeTab(null); + ore_volcano = new BlockFissure().setBlockName("ore_volcano").setLightLevel(1F).setCreativeTab(MainRegistry.blockTab); depth_brick = new BlockDepth().setBlockName("depth_brick").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":depth_brick"); depth_tiles = new BlockDepth().setBlockName("depth_tiles").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":depth_tiles"); @@ -1849,6 +1852,7 @@ public class ModBlocks { tnt = new BlockTNT().setBlockName("tnt_ntm").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":tnt"); semtex = new BlockSemtex().setBlockName("semtex").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":semtex"); c4 = new BlockC4().setBlockName("c4").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":c4"); + fissure_bomb = new BlockFissureBomb().setBlockName("fissure_bomb").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":fissure_bomb"); heater_firebox = new HeaterFirebox().setBlockName("heater_firebox").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); heater_oven = new HeaterOven().setBlockName("heater_oven").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); @@ -2539,6 +2543,7 @@ public class ModBlocks { //Bedrock ore register(ore_bedrock); + register(ore_volcano); //Crystals GameRegistry.registerBlock(crystal_power, crystal_power.getUnlocalizedName()); @@ -2928,6 +2933,7 @@ public class ModBlocks { GameRegistry.registerBlock(tnt, tnt.getUnlocalizedName()); GameRegistry.registerBlock(semtex, semtex.getUnlocalizedName()); GameRegistry.registerBlock(c4, c4.getUnlocalizedName()); + register(fissure_bomb); //Turrets GameRegistry.registerBlock(turret_chekhov, turret_chekhov.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/bomb/BlockFissureBomb.java b/src/main/java/com/hbm/blocks/bomb/BlockFissureBomb.java new file mode 100644 index 000000000..1aa4e19ed --- /dev/null +++ b/src/main/java/com/hbm/blocks/bomb/BlockFissureBomb.java @@ -0,0 +1,38 @@ +package com.hbm.blocks.bomb; + +import com.hbm.blocks.ModBlocks; +import com.hbm.entity.item.EntityTNTPrimedBase; +import com.hbm.explosion.ExplosionNukeSmall; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; + +public class BlockFissureBomb extends BlockTNTBase { + + @Override + public void explodeEntity(World world, double x, double y, double z, EntityTNTPrimedBase entity) { + ExplosionNukeSmall.explode(world, x, y, z, ExplosionNukeSmall.medium); + + int range = 5; + + for(int i = -range; i <= range; i++) { + for(int j = -range; j <= range; j++) { + for(int k = -range; k <= range; k++) { + + int a = (int) Math.floor(x + i); + int b = (int) Math.floor(y + j); + int c = (int) Math.floor(z + k); + + Block block = world.getBlock(a, b, c); + + if(block == ModBlocks.ore_bedrock) { + world.setBlock(a, b, c, ModBlocks.ore_volcano); + } else if(block == ModBlocks.ore_bedrock_oil) { + world.setBlock(a, b, c, Blocks.bedrock); + } + } + } + } + } +} diff --git a/src/main/java/com/hbm/blocks/bomb/BlockTNTBase.java b/src/main/java/com/hbm/blocks/bomb/BlockTNTBase.java index c90df63ce..cf29f747c 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockTNTBase.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockTNTBase.java @@ -24,10 +24,8 @@ import net.minecraft.world.World; public abstract class BlockTNTBase extends BlockFlammable implements IToolable { - @SideOnly(Side.CLIENT) - private IIcon topIcon; - @SideOnly(Side.CLIENT) - private IIcon bottomIcon; + @SideOnly(Side.CLIENT) private IIcon topIcon; + @SideOnly(Side.CLIENT) private IIcon bottomIcon; public BlockTNTBase() { super(Material.tnt, 15, 100); diff --git a/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java b/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java index 25e430822..6d5b525cc 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java @@ -98,6 +98,7 @@ public class BlockBedrockOreTE extends BlockContainer implements ILookOverlay, I return Blocks.bedrock.getIcon(0, 0); } + @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockFissure.java b/src/main/java/com/hbm/blocks/generic/BlockFissure.java new file mode 100644 index 000000000..003bd8e23 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockFissure.java @@ -0,0 +1,53 @@ +package com.hbm.blocks.generic; + +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.RenderBlockMultipass; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.util.IIcon; + +public class BlockFissure extends Block implements IBlockMultiPass { + + private IIcon overlay; + + public BlockFissure() { + super(Material.rock); + this.setBlockTextureName("bedrock"); + this.setBlockUnbreakable(); + this.setResistance(1_000_000); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + + this.blockIcon = reg.registerIcon("bedrock"); + this.overlay = reg.registerIcon(RefStrings.MODID + ":molten_overlay"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + + if(RenderBlockMultipass.currentPass == 0) + return Blocks.bedrock.getIcon(0, 0); + + return this.overlay; + } + + @Override + public int getPasses() { + return 2; + } + + @Override + public int getRenderType(){ + return IBlockMultiPass.getRenderType(); + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java b/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java index 951b076b3..e9726ccb9 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java @@ -1,6 +1,7 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineHephaestus; import net.minecraft.block.material.Material; @@ -16,7 +17,10 @@ public class MachineHephaestus extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { - return new TileEntityMachineHephaestus(); + + if(meta >= 12) return new TileEntityMachineHephaestus(); + if(meta >= 6) return new TileEntityProxyCombo().fluid(); + return null; } @Override diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index a34154d95..9f7d88441 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -358,6 +358,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.tnt, 1), new Object[] { "DDD", "DSD", "DDD", 'D', ModItems.stick_tnt, 'S', ModItems.safety_fuse }); CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.semtex, 1), new Object[] { "DDD", "DSD", "DDD", 'D', ModItems.stick_semtex, 'S', ModItems.safety_fuse }); CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.c4, 1), new Object[] { "DDD", "DSD", "DDD", 'D', ModItems.stick_c4, 'S', ModItems.safety_fuse }); + CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.fissure_bomb, 1), new Object[] { "SUS", "RPR", "SUS", 'S', ModBlocks.semtex, 'U', U238.block(), 'R', OreDictManager.getReflector(), 'P', PU239.billet() }); //IF Grenades diff --git a/src/main/java/com/hbm/explosion/ExplosionSolinium.java b/src/main/java/com/hbm/explosion/ExplosionSolinium.java index 46c19e327..6e2e72b08 100644 --- a/src/main/java/com/hbm/explosion/ExplosionSolinium.java +++ b/src/main/java/com/hbm/explosion/ExplosionSolinium.java @@ -76,7 +76,7 @@ public class ExplosionSolinium { breakColumn(this.lastposX, this.lastposZ); this.shell = (int) Math.floor((Math.sqrt(n) + 1) / 2); - int shell2 = this.shell * 2; + int shell2 = Math.max(this.shell * 2,1); this.leg = (int) Math.floor((this.n - (shell2 - 1) * (shell2 - 1)) / shell2); this.element = (this.n - (shell2 - 1) * (shell2 - 1)) - shell2 * this.leg - this.shell + 1; this.lastposX = this.leg == 0 ? this.shell : this.leg == 1 ? -this.element : this.leg == 2 ? -this.shell : this.element; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 9bfd5e61a..143192ee1 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -267,6 +267,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineCombustionEngine.class, new RenderCombustionEngine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineExcavator.class, new RenderExcavator()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMixer.class, new RenderMixer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineHephaestus.class, new RenderHephaestus()); //Foundry ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index cd4004e31..bab993057 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -48,6 +48,7 @@ public class ResourceManager { public static final IModelCustom crucible_heat = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/crucible.obj")); public static final IModelCustom boiler = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/boiler.obj")); public static final IModelCustom boiler_burst = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/boiler_burst.obj")); + public static final IModelCustom hephaestus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/hephaestus.obj")); //Furnaces public static final IModelCustom furnace_iron = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_iron.obj")); @@ -367,6 +368,7 @@ public class ResourceManager { public static final ResourceLocation sawmill_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/sawmill.png"); public static final ResourceLocation crucible_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/crucible_heat.png"); public static final ResourceLocation boiler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/boiler.png"); + public static final ResourceLocation hephaestus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/hephaestus.png"); //Furnaces public static final ResourceLocation furnace_iron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_iron.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderHephaestus.java b/src/main/java/com/hbm/render/tileentity/RenderHephaestus.java new file mode 100644 index 000000000..be5fc36e3 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderHephaestus.java @@ -0,0 +1,71 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.TileEntityMachineHephaestus; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderHephaestus extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.hephaestus_tex); + ResourceManager.hephaestus.renderPart("Main"); + + TileEntityMachineHephaestus geo = (TileEntityMachineHephaestus) tile; + float movement = geo.prevRot + (geo.rot - geo.prevRot) * interp; + boolean isOn = geo.bufferedHeat > 0; + GL11.glPushMatrix(); + GL11.glRotatef(movement, 0, 1, 0); + + for(int i = 0; i < 3; i++) { + ResourceManager.hephaestus.renderPart("Rotor"); + GL11.glRotated(120, 0, 1, 0); + } + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + + + GL11.glPushMatrix(); + + if(isOn) { + bindTexture(RenderCrucible.lava); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_LIGHTING); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + } else { + bindTexture(RenderExcavator.cobble); + GL11.glColor3f(0.5F, 0.5F, 0.5F); + } + + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glScalef(0.5F, 0.5F, 0.5F); + GL11.glTranslatef(0, movement / 10F, 0); + ResourceManager.hephaestus.renderPart("Core"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + + if(isOn) { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopAttrib(); + } else { + GL11.glColor3f(1F, 1F, 1F); + } + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 2d5f8fffa..ac8bb7b5b 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -140,6 +140,7 @@ public class TileMappings { put(TileEntityCore.class, "tileentity_v0"); put(TileEntityMachineArcFurnace.class, "tileentity_arc_furnace"); put(TileEntityMachineAmgen.class, "tileentity_amgen"); + put(TileEntityMachineHephaestus.class, "tileentity_hephaestus"); put(TileEntityGeysir.class, "tileentity_geysir"); put(TileEntityMachineMissileAssembly.class, "tileentity_missile_assembly"); put(TileEntityLaunchTable.class, "tileentity_large_launch_table"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java index fe4f0e7d2..ad8a880fd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java @@ -1,42 +1,184 @@ package com.hbm.tileentity.machine; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.fluid.trait.FT_Heatable; +import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingStep; +import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; import com.hbm.lib.Library; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { public FluidTank input; public FluidTank output; + public int bufferedHeat; + + public float rot; + public float prevRot; public TileEntityMachineHephaestus() { this.input = new FluidTank(Fluids.OIL, 24_000); this.output = new FluidTank(Fluids.HOTOIL, 24_000); } + private int[] heat = new int[10]; + private long fissureScanTime; + @Override public void updateEntity() { if(!worldObj.isRemote) { - this.updateConnections(); + + setupTanks(); + + if(worldObj.getTotalWorldTime() % 20 == 0) { + this.updateConnections(); + } + + int height = (int) (worldObj.getTotalWorldTime() % 10); + int range = 7; + int y = yCoord - 1 - height; + + heat[height] = 0; + + if(y >= 0) { + for(int x = -range; x <= range; x++) { + for(int z = -range; z <= range; z++) { + heat[height] += heatFromBlock(xCoord + x, y, zCoord + z); + } + } + } + + NBTTagCompound data = new NBTTagCompound(); + input.writeToNBT(data, "i"); + + heatFluid(); + + output.writeToNBT(data, "o"); + + if(output.getFill() > 0) { + for(DirPos pos : getConPos()) { + this.sendFluid(output.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + data.setInteger("heat", this.getTotalHeat()); + INBTPacketReceiver.networkPack(this, data, 150); + + } else { + + this.prevRot = this.rot; + + if(this.bufferedHeat > 0) { + this.rot += 0.5F; + + if(worldObj.rand.nextInt(7) == 0) { + double x = worldObj.rand.nextGaussian() * 2; + double y = worldObj.rand.nextGaussian() * 3; + double z = worldObj.rand.nextGaussian() * 2; + worldObj.spawnParticle("cloud", xCoord + 0.5 + x, yCoord + 6 + y, zCoord + 0.5 + z, 0, 0, 0); + } + } + + if(this.rot >= 360F) { + this.prevRot -= 360F; + this.rot -= 360F; + } } } + + protected void heatFluid() { + + FluidType type = input.getTankType(); + + if(type.hasTrait(FT_Heatable.class)) { + FT_Heatable trait = type.getTrait(FT_Heatable.class); + int heat = this.getTotalHeat(); + HeatingStep step = trait.getFirstStep(); + + int inputOps = input.getFill() / step.amountReq; + int outputOps = (output.getMaxFill() - output.getFill()) / step.amountProduced; + int heatOps = heat / step.heatReq; + int ops = Math.min(Math.min(inputOps, outputOps), heatOps); + + input.setFill(input.getFill() - step.amountReq * ops); + output.setFill(output.getFill() + step.amountProduced * ops); + worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this); + } + } + + protected void setupTanks() { + + FluidType type = input.getTankType(); + + if(type.hasTrait(FT_Heatable.class)) { + FT_Heatable trait = type.getTrait(FT_Heatable.class); + + if(trait.getEfficiency(HeatingType.HEATEXCHANGER) > 0) { + FluidType outType = trait.getFirstStep().typeProduced; + output.setTankType(outType); + return; + } + } + + input.setTankType(Fluids.NONE); + output.setTankType(Fluids.NONE); + } + + protected int heatFromBlock(int x, int y, int z) { + Block b = worldObj.getBlock(x, y, z); + + if(b == Blocks.lava || b == Blocks.flowing_lava) return 200; + if(b == ModBlocks.volcanic_lava_block) return 800; + + if(b == ModBlocks.ore_volcano) { + this.fissureScanTime = worldObj.getTotalWorldTime(); + return 2_000; + } + + return 0; + } + + public int getTotalHeat() { + boolean fissure = worldObj.getTotalWorldTime() - this.fissureScanTime < 20; + int heat = 0; + + for(int h : this.heat) { + heat += h; + } + + if(fissure) { + heat *= 5; + } + + return heat; + } @Override public void networkUnpack(NBTTagCompound nbt) { + input.readFromNBT(nbt, "i"); + output.readFromNBT(nbt, "o"); + this.bufferedHeat = nbt.getInteger("heat"); } private void updateConnections() { + if(input.getTankType() == Fluids.NONE) return; + for(DirPos pos : getConPos()) { this.trySubscribe(input.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } @@ -75,4 +217,29 @@ public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements public boolean canConnect(FluidType type, ForgeDirection dir) { return dir != ForgeDirection.UNKNOWN && dir != ForgeDirection.UP && dir != ForgeDirection.DOWN; } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 3, + yCoord, + zCoord - 3, + xCoord + 4, + yCoord + 12, + zCoord + 4 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 4a4f2921c..0d2e9b96d 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3579,6 +3579,7 @@ tile.fireworks.name=Feuerwerksbatterie tile.fireworks.charges=Ladungen: %s tile.fireworks.message=Nachricht: %s tile.fireworks.color=Farbe: %s +tile.fissure_bomb.name=Geofissur-Bombe tile.flame_war.name=Flamewar aus der Box tile.float_bomb.name=Schwebebombe tile.fluid_duct.name=Universelles Flüssigkeitsrohr (Veraltet) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 805cdee2b..79d25b8ef 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4391,6 +4391,7 @@ tile.fireworks.name=Firework Battery tile.fireworks.charges=Charges Loaded: %s tile.fireworks.message=Message: %s tile.fireworks.color=Color: %s +tile.fissure_bomb.name=Fissure Bomb tile.flame_war.name=Flame War in a Box tile.float_bomb.name=Levitation Bomb tile.fluid_duct.name=Universal Fluid Duct (Deprecated) diff --git a/src/main/resources/assets/hbm/textures/blocks/fissure_bomb_bottom.png b/src/main/resources/assets/hbm/textures/blocks/fissure_bomb_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..b18a9e21994e50bad5c9fa3f10afd1af9a088f9b GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfMF9n6s6xop6|aJhVX-P&gk*MSx=c)I$ztaD0e0sw0T BGx-1j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/fissure_bomb_side.png b/src/main/resources/assets/hbm/textures/blocks/fissure_bomb_side.png new file mode 100644 index 0000000000000000000000000000000000000000..80acedf9cb8a5129de5af79b3e6d77f2e9adcf6e GIT binary patch literal 362 zcmV-w0hRuVP)vlpi(4 zuBI;!II*Jjdfj+XRnjy)Fob8S3UI*28@%XOU!m3&8m;axn&PeERcp4pn#C+(di(S* zEKO4$?&d6J388;5$zpCY!}Vy$kJI=r>)BQB_2QJkJ3Tk)usK zc?w4ZthI;;B7(IR=UjI{v8gC`4g2rkX%?Fb_x9N`mmW~G3RFy$xB6SBKoo^HWj5FHn9)?0Id2TTO{1DfB*mh07*qo IM6N<$f+?AwLjV8( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/fissure_bomb_top.png b/src/main/resources/assets/hbm/textures/blocks/fissure_bomb_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b98ff5cd2054e6787d1c913021f37662752f94 GIT binary patch literal 458 zcmV;*0X6=KP)k zG5iGJ{`C@oZez}|+$l~ILSRD(!Q=3YdT&{}SD^CtbiP}yw*aJh#O=kH)p|>sM+9y{ znnx(5czHN8HG!L$15RvB-eS!A#|?wdlyn4M&4C=U*r(oG0w5){n^ogMC5!!?t*PCt zn&Ov-GtxXlYi-6>N)d)(xd&+;0hoefd?5r%sr>|!$z)RQf!*{IQc40h!K*pkJ%1Wc zDu3mmkWn-bI#c?imXVRg{-Fo9#xjIqNVhTParlLl60P;22U=?aHzAAt(q{YZwbtg_ znJqSS8*`JgdT(j;6{`?}z)j5UcKtyP`lA+EJT+!|wJ}mklv1d@7jT#Z^Dh*)Ky}Yy zwcax5OaW;mwwqP@qgJ^GHf;Xi-me^ZHHTyPH}{|4=o6Wsb^rhX07*qoM6N<$f{(t; A=Kufz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/molten_overlay.png b/src/main/resources/assets/hbm/textures/blocks/molten_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..7156ca4969cfa6d3eef0f0421103004df0063125 GIT binary patch literal 834 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 O0ex*_ty)dH*#85v4ZQ>a literal 3069 zcmb7`c|6qH8^^z6CWg|`m8>BN5xKHojV()-Y?16)lCiYOI*TGgAiGo?cQ$p_xjy`e&0XN_bktO&Nia0D!QK zwS_YPfJ}JxJ}5u0{4lUN&ig?wnc28Pd0zrFFcko{<83TVU1JJq6nNz8LCL3|QWAYJ zK38Fm#m-oWV--TU8!V~6r=rkr!Ej`h05;WcJ+824`9-S%b_p=WsO>z=2XXYD^D28G z4UOqfBY9{H$=)8z(oP`A_2|nR@5sb&!+X$10h{#A!q9XytA)Ws4_486qk%z`oq4uMxq$65< z5I^znw$-3BZU~P&2e;xoSm`#^<6oT(+XU6*eTU5)wr^;M!HbOscPp9z!J?SK9I`?^*X?Fg23Rs-?dMm3g*@|H?%LpZ3m#dtJ-;r?AAVdjqntaDb<`=(#c@f=_y>EIhPhNDSWytjSAla_n*uj7cwB z(k_)?^$4xrvQ7lkaR)`JL<4J~CO!3pvM!m<(FEbtYw|c^a%u;8D?2YWho&+>35VyT z)8ZTAWGEIhD30au8j5k2qt92h<-@6%dUz&Mj!dykQz&iSlPqS7TgJKdx9xdwZ7W?fr;l7x`*gEShe5ojXn1NVR$&ahS=y=oT>~>~}QO z#cw40UhrnqUCHjRK@3LoO0r(}>M)Z`j~#M_q(0C`yzibdz4u4A&+IH-=7_U5cmn#k z!V zIlO(8`KF>JI<#5@Q?^hgl0CrP#%E%YZHaj@yhAnGZt%3PZ#?1}DGwa8t6_?Wh2PGo z=hv@Y#jV|pvP6~OI(d=*eCv?ak=jR2J~au$_z&z~hGdKHI?GC}yRu7LPM1FJ(lK$k z1}gcKITL!5pQB^agh;&Wc5FBbWFnm>dhccV{bC1N94GruM{0c41)!aseaCZswfoU1 z_;P?6t|H=oY52{`)8u8t%$sWq!!5?N8dOowt+J;BRmrT=KK@`8ab$)Y-3HWj%)YyJt@Dp>mllqKW^obkK$>iVO-BoMl))n*-zJI8r6RDN*z>F zzPS|Y)82`EB9-nO*v9LStZ zq6L)CF#k2WRA8>qlviI+@8Vht_lWVSBEgnNT^w`mJE5pw>Zs6~1xg;7Pv=E;zt&lOS##T3gX;5p9& zb;8Y0$Y5P?q`4B}=iuw3^i&tDMV;P*C;egwTw<>sG-#0>&$=Wx9%6JN8T=z5gz{SV zA`ew{8SOXnh>D<7A8xeAvlwf2iHAJ-EiwNs>3^q@f7N_MVq(%{-C~XJiqRETB$e?* zs#ydgpH)xL)0+#1at?3f|F&%P?=EvID=T3|YUhzibtvVT!i zYq1%mYTcIE7vh;)%Da>ss?CDdPH9Lbw>u?w`Ey=ian7C?nfnuG&onD7$6{0yZm8lx zgHA$76x`DOj-G&jw^|KXm7K3+XLltv5mK`6RS*mv~H? zT*gQ6n^R}FciF*EEwo85EERE%6P@4jxNp-`5bh^syWBlSO=-yO7V9u_U_0jDRSG5l z#$MT(b>s2VbX-jE0Zg6v0P5AVah~Gtn7>^(~9W*rayZu z(Jpsikb+O^qz`cxE?(}v{xyiaaqaylSAF$akEOD8N3{nAg;&Vy)pebbVYXz{VFf;s z10l-xAxQgqtK|pRfW9>fd}j-ZICH%g5ltk@qNsj+G3p1NtE33r73$SAhREmB?UoUd zFKI0e(!#q?f(n4YnZoD&C+3sqX5!>;_ejaBzaQ;kmCgGzR2~I&H0un!35yo8kJVIK z0zF)K^>|VaS-VYKw5^lc7ZNxED+ixVB-=2)BI6YXV=+U1kktNzqxYf4AAfHO7j31K zHiX|Hu?hun0G~+uhW-no?T$(d`Df2(Z@-hkz=;X<2_n$jx%j#X6KDxvFFS-&3 zm4^%-si=CMRpH<+Ns9IwrJ19@Z*w;mi(SMC?cKW{y*9ElQ%yLvsBPfe^ru{$(JJ8wB|ac7J&M dKcs0zFRetk_&WB$1s=}>Hpd(+YR&wv{s%U*t8@SW