diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index aae7ab573..92202f903 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -253,6 +253,9 @@ public class ModBlocks { public static Block block_graphite_plutonium; public static Block block_graphite_rod; public static Block block_graphite_source; + public static Block block_graphite_lithium; + public static Block block_graphite_tritium; + public static Block block_graphite_detector; public static Block block_boron; public static Block block_lanthanium; public static Block block_ra226; @@ -1485,6 +1488,9 @@ public class ModBlocks { block_graphite_plutonium = new BlockGraphiteSource().setBlockName("block_graphite_plutonium"); block_graphite_rod = new BlockGraphiteRod().setBlockName("block_graphite_rod").setBlockTextureName(RefStrings.MODID + ":block_graphite_rod_in"); block_graphite_source = new BlockGraphiteSource().setBlockName("block_graphite_source"); + block_graphite_lithium = new BlockGraphiteBreedingFuel().setBlockName("block_graphite_lithium"); + block_graphite_tritium = new BlockGraphiteBreedingProduct().setBlockName("block_graphite_tritium"); + block_graphite_detector = new BlockGraphiteNeutronDetector().setBlockName("block_graphite_detector"); block_boron = new BlockBeaconable(Material.iron).setBlockName("block_boron").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_boron"); block_lanthanium = new BlockBeaconable(Material.iron).setBlockName("block_lanthanium").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_lanthanium"); block_ra226 = new BlockHazard().makeBeaconable().setBlockName("block_ra226").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_ra226"); @@ -2509,6 +2515,9 @@ public class ModBlocks { GameRegistry.registerBlock(block_graphite_rod, block_graphite_rod.getUnlocalizedName()); GameRegistry.registerBlock(block_graphite_plutonium, block_graphite_plutonium.getUnlocalizedName()); GameRegistry.registerBlock(block_graphite_source, block_graphite_source.getUnlocalizedName()); + GameRegistry.registerBlock(block_graphite_lithium, block_graphite_lithium.getUnlocalizedName()); + GameRegistry.registerBlock(block_graphite_tritium, block_graphite_tritium.getUnlocalizedName()); + GameRegistry.registerBlock(block_graphite_detector, block_graphite_detector.getUnlocalizedName()); GameRegistry.registerBlock(block_boron, block_boron.getUnlocalizedName()); GameRegistry.registerBlock(block_insulator, block_insulator.getUnlocalizedName()); GameRegistry.registerBlock(block_fiberglass, block_fiberglass.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingFuel.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingFuel.java new file mode 100644 index 000000000..e2def83dc --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingFuel.java @@ -0,0 +1,71 @@ +package com.hbm.blocks.machine.pile; + +import java.util.ArrayList; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.pile.TileEntityPileBreedingFuel; +import com.hbm.tileentity.machine.pile.TileEntityPileFuel; + +import api.hbm.block.IToolable; +import api.hbm.block.IToolable.ToolType; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockGraphiteBreedingFuel extends BlockGraphiteDrilledTE implements IToolable { + + @Override + public TileEntity createNewTileEntity(World world, int mets) { + return new TileEntityPileBreedingFuel(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_lithium_aluminum"); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(!world.isRemote) { + + if(tool == ToolType.SCREWDRIVER) { + + int meta = world.getBlockMetadata(x, y, z); + int cfg = meta & 3; + + if(side == cfg * 2 || side == cfg * 2 + 1) { + world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta, 3); + this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.pile_rod_lithium)); + } + } + + if(tool == ToolType.HAND_DRILL) { + TileEntityPileBreedingFuel pile = (TileEntityPileBreedingFuel) world.getTileEntity(x, y, z); + player.addChatComponentMessage(new ChatComponentText("CP1 FUEL ASSEMBLY " + x + " " + y + " " + z).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD))); + player.addChatComponentMessage(new ChatComponentText("DEPLETION: " + pile.progress + "/" + pile.maxProgress).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + player.addChatComponentMessage(new ChatComponentText("FLUX: " + pile.lastNeutrons).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + } + } + + return true; + } + + @Override + protected Item getInsertedItem() { + return ModItems.pile_rod_lithium; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingProduct.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingProduct.java new file mode 100644 index 000000000..4dc994367 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingProduct.java @@ -0,0 +1,31 @@ +package com.hbm.blocks.machine.pile; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; + +import api.hbm.block.IToolable; +import api.hbm.block.IToolable.ToolType; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockGraphiteBreedingProduct extends BlockGraphiteDrilledBase implements IToolable { + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_tritium_aluminum"); + } + + @Override + protected Item getInsertedItem() { + return ModItems.cell_tritium; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java index a0c6ce4a0..4571eda33 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java @@ -3,12 +3,16 @@ package com.hbm.blocks.machine.pile; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; +import api.hbm.block.IToolable; +import api.hbm.block.IToolable.ToolType; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; -public class BlockGraphiteDrilled extends BlockGraphiteDrilledBase { +public class BlockGraphiteDrilled extends BlockGraphiteDrilledBase implements IToolable { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { @@ -16,13 +20,20 @@ public class BlockGraphiteDrilled extends BlockGraphiteDrilledBase { if(player.getHeldItem() != null) { int meta = world.getBlockMetadata(x, y, z); - - if(side == meta * 2 || side == meta * 2 + 1) { + int cfg = meta & 3; + + if(side == cfg * 2 || side == cfg * 2 + 1) { if(checkInteraction(world, x, y, z, meta, player, ModItems.pile_rod_uranium, ModBlocks.block_graphite_fuel)) return true; if(checkInteraction(world, x, y, z, meta, player, ModItems.pile_rod_plutonium, ModBlocks.block_graphite_plutonium)) return true; if(checkInteraction(world, x, y, z, meta, player, ModItems.pile_rod_source, ModBlocks.block_graphite_source)) return true; if(checkInteraction(world, x, y, z, meta, player, ModItems.pile_rod_boron, ModBlocks.block_graphite_rod)) return true; - if(checkInteraction(world, x, y, z, 0, player, ModItems.ingot_graphite, ModBlocks.block_graphite)) return true; + if(checkInteraction(world, x, y, z, meta, player, ModItems.pile_rod_lithium, ModBlocks.block_graphite_lithium)) return true; + if(checkInteraction(world, x, y, z, meta, player, ModItems.cell_tritium, ModBlocks.block_graphite_tritium)) return true; //if you want to i guess? + if(checkInteraction(world, x, y, z, meta, player, ModItems.pile_rod_detector, ModBlocks.block_graphite_detector)) return true; + if(meta >> 2 != 1) { + if(checkInteraction(world, x, y, z, meta | 4, player, ModItems.hull_small_aluminium, ModBlocks.block_graphite_drilled)) return true; + if(checkInteraction(world, x, y, z, 0, player, ModItems.ingot_graphite, ModBlocks.block_graphite)) return true; + } } } @@ -42,4 +53,23 @@ public class BlockGraphiteDrilled extends BlockGraphiteDrilledBase { return false; } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + int meta = world.getBlockMetadata(x, y, z); + int cfg = meta & 3; + + if(tool != ToolType.SCREWDRIVER) + return false; + + if(!world.isRemote && (side == cfg * 2 || side == cfg * 2 + 1) && meta >> 2 == 1) { + world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, cfg, 3); + world.playSoundEffect(x + 0.5, y + 1.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 0.85F); + + BlockGraphiteRod.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.hull_small_aluminium)); + } + + return true; + } } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java index 213df7cfd..984eed4c1 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java @@ -8,21 +8,26 @@ import com.hbm.blocks.generic.BlockFlammable; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; +import api.hbm.block.IToolable; +import api.hbm.block.IToolable.ToolType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public abstract class BlockGraphiteDrilledBase extends BlockFlammable { +public abstract class BlockGraphiteDrilledBase extends BlockFlammable implements IToolable { @SideOnly(Side.CLIENT) protected IIcon sideIcon; + @SideOnly(Side.CLIENT) + protected IIcon blockIconAluminum; //shrouded in aluminum public BlockGraphiteDrilledBase() { super(ModBlocks.block_graphite.getMaterial(), ((BlockFlammable) ModBlocks.block_graphite).encouragement, ((BlockFlammable) ModBlocks.block_graphite).flammability); @@ -38,6 +43,7 @@ public abstract class BlockGraphiteDrilledBase extends BlockFlammable { public void registerBlockIcons(IIconRegister iconRegister) { super.registerBlockIcons(iconRegister); this.sideIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite"); + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_drilled_aluminum"); } @Override @@ -45,9 +51,14 @@ public abstract class BlockGraphiteDrilledBase extends BlockFlammable { public IIcon getIcon(int side, int metadata) { int cfg = metadata & 3; + int meta = metadata >> 2; - if(side == cfg * 2 || side == cfg * 2 + 1) + if(side == cfg * 2 || side == cfg * 2 + 1) { + if(meta == 1) + return this.blockIconAluminum; + return this.blockIcon; + } return this.sideIcon; } @@ -66,10 +77,38 @@ public abstract class BlockGraphiteDrilledBase extends BlockFlammable { return null; } + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) + return false; + + if(!world.isRemote) { + + int meta = world.getBlockMetadata(x, y, z); + int cfg = meta & 3; + + if(side == cfg * 2 || side == cfg * 2 + 1) { + world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta & 7, 3); + this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(getInsertedItem())); + } + } + + return true; + } + + protected Item getInsertedItem() { + return null; + } + @Override public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { ArrayList drops = new ArrayList(); drops.add(new ItemStack(ModItems.ingot_graphite, 8)); + if((meta & 4) == 4) + drops.add(new ItemStack(ModItems.hull_small_aluminium, 1)); + if(getInsertedItem() != null) + drops.add(new ItemStack(getInsertedItem(), 1)); return drops; } } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java index ad5f41247..9bfe9c094 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java @@ -4,10 +4,15 @@ import java.util.ArrayList; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.pile.TileEntityPileFuel; import api.hbm.block.IToolable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; @@ -24,12 +29,12 @@ public class BlockGraphiteFuel extends BlockGraphiteDrilledTE implements IToolab } @Override - public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { - ArrayList drops = super.getDrops(world, x, y, z, metadata, fortune); - drops.add(new ItemStack(ModItems.pile_rod_uranium)); - return drops; + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_fuel_aluminum"); } - + @Override public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { @@ -37,9 +42,10 @@ public class BlockGraphiteFuel extends BlockGraphiteDrilledTE implements IToolab if(tool == ToolType.SCREWDRIVER) { - int meta = world.getBlockMetadata(x, y, z) & 3; + int meta = world.getBlockMetadata(x, y, z); + int cfg = meta & 3; - if(side == meta * 2 || side == meta * 2 + 1) { + if(side == cfg * 2 || side == cfg * 2 + 1) { world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta, 3); this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.pile_rod_uranium)); } @@ -56,4 +62,9 @@ public class BlockGraphiteFuel extends BlockGraphiteDrilledTE implements IToolab return true; } + + @Override + protected Item getInsertedItem() { + return ModItems.pile_rod_uranium; + } } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteNeutronDetector.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteNeutronDetector.java new file mode 100644 index 000000000..6340817b8 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteNeutronDetector.java @@ -0,0 +1,135 @@ +package com.hbm.blocks.machine.pile; + +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.pile.TileEntityPileFuel; +import com.hbm.tileentity.machine.pile.TileEntityPileNeutronDetector; + +import api.hbm.block.IToolable.ToolType; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockGraphiteNeutronDetector extends BlockGraphiteDrilledTE { + + @Override + public TileEntity createNewTileEntity(World world, int p_149915_2_) { + return new TileEntityPileNeutronDetector(); + } + + @SideOnly(Side.CLIENT) + protected IIcon outIcon; + @SideOnly(Side.CLIENT) + protected IIcon outIconAluminum; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_detector_aluminum"); + this.outIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_detector_out_aluminum"); + this.outIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_detector_out"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + + int cfg = metadata & 3; + + if(side == cfg * 2 || side == cfg * 2 + 1) { + if((metadata & 4) == 4) + return ((metadata & 8) > 0) ? this.outIconAluminum : this.blockIconAluminum; + return ((metadata & 8) > 0) ? this.outIcon : this.blockIcon; + } + + return this.sideIcon; + } + + public void triggerRods(World world, int x, int y, int z) { + int oldMeta = world.getBlockMetadata(x, y, z); + int newMeta = oldMeta ^ 8; //toggle bit #4 + int pureMeta = oldMeta & 3; + + world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); + + world.playSoundEffect(x + 0.5D, y + 0.5D, z + 0.5D, "hbm:item.techBleep", 0.02F, 1.0F); + + ForgeDirection dir = ForgeDirection.getOrientation(pureMeta * 2); + + if(dir == ForgeDirection.UNKNOWN) + return; + + for(int i = -1; i <= 1; i += 1) { + + int ix = x + dir.offsetX * i; + int iy = y + dir.offsetY * i; + int iz = z + dir.offsetZ * i; + + while(world.getBlock(ix, iy, iz) == ModBlocks.block_graphite_rod && world.getBlockMetadata(ix, iy, iz) == oldMeta) { + + world.setBlockMetadataWithNotify(ix, iy, iz, newMeta, 3); + + ix += dir.offsetX * i; + iy += dir.offsetY * i; + iz += dir.offsetZ * i; + } + } + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(!world.isRemote) { + + if(tool == ToolType.SCREWDRIVER) { + + int meta = world.getBlockMetadata(x, y, z); + int cfg = meta & 3; + + if(!player.isSneaking()) { + if(side == cfg * 2 || side == cfg * 2 + 1) { + world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta & 7, 3); + this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(getInsertedItem())); + } + } else { + TileEntityPileNeutronDetector pile = (TileEntityPileNeutronDetector) world.getTileEntity(x, y, z); + + player.addChatComponentMessage(new ChatComponentText("CP1 FUEL ASSEMBLY " + x + " " + y + " " + z).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD))); + player.addChatComponentMessage(new ChatComponentText("FLUX: " + pile.lastNeutrons + "/" + pile.maxNeutrons).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + } + } + + if(tool == ToolType.DEFUSER) { + TileEntityPileNeutronDetector pile = (TileEntityPileNeutronDetector) world.getTileEntity(x, y, z); + + if(player.isSneaking()) { + if(pile.maxNeutrons > 1) + pile.maxNeutrons--; + } else { + pile.maxNeutrons++; + } + } + } + + return true; + } + + @Override + protected Item getInsertedItem() { + return ModItems.pile_rod_detector; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java index 1111b45c2..900ea3d89 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java @@ -9,8 +9,10 @@ import com.hbm.lib.RefStrings; import api.hbm.block.IToolable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; @@ -20,12 +22,15 @@ public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToola @SideOnly(Side.CLIENT) protected IIcon outIcon; + @SideOnly(Side.CLIENT) + protected IIcon outIconAluminum; @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { super.registerBlockIcons(iconRegister); - this.sideIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite"); + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_rod_in_aluminum"); + this.outIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_rod_out_aluminum"); this.outIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_rod_out"); } @@ -35,8 +40,11 @@ public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToola int cfg = metadata & 3; - if(side == cfg * 2 || side == cfg * 2 + 1) - return ((metadata & 4) > 0) ? this.outIcon : this.blockIcon; + if(side == cfg * 2 || side == cfg * 2 + 1) { + if((metadata & 4) == 4) + return ((metadata & 8) > 0) ? this.outIconAluminum : this.blockIconAluminum; + return ((metadata & 8) > 0) ? this.outIcon : this.blockIcon; + } return this.sideIcon; } @@ -48,7 +56,7 @@ public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToola return false; int oldMeta = world.getBlockMetadata(x, y, z); - int newMeta = oldMeta ^ 4; //toggle bit #3 + int newMeta = oldMeta ^ 8; //toggle bit #4 int pureMeta = oldMeta & 3; //in case the bit was set if(side == pureMeta * 2 || side == pureMeta * 2 + 1) { @@ -58,9 +66,9 @@ public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToola world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); - world.playSoundEffect(x + 0.5D, y + 0.5D, z + 0.5D, "random.click", 0.3F, pureMeta == oldMeta ? 0.75F : 0.65F); + world.playSoundEffect(x + 0.5D, y + 0.5D, z + 0.5D, "random.click", 0.3F, pureMeta == (oldMeta & 11) ? 0.75F : 0.65F); - ForgeDirection dir = ForgeDirection.getOrientation(pureMeta); + ForgeDirection dir = ForgeDirection.getOrientation(side); if(dir == ForgeDirection.UNKNOWN) return true; @@ -68,17 +76,19 @@ public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToola for(int i = -1; i <= 1; i += 1) { //why is XZ switched? i don't know, man - int ix = x + dir.offsetZ * i; + /* ForgeDirection's getOrientation method operates on actual sides, not n/s or w/e, so you had to switch x & z for w/e to work since it was actually returning north. also meant that + n/s hasn't been working this entire time */ + int ix = x + dir.offsetX * i; int iy = y + dir.offsetY * i; - int iz = z + dir.offsetX * i; + int iz = z + dir.offsetZ * i; while(world.getBlock(ix, iy, iz) == this && world.getBlockMetadata(ix, iy, iz) == oldMeta) { world.setBlockMetadataWithNotify(ix, iy, iz, newMeta, 3); - ix += dir.offsetZ * i; + ix += dir.offsetX * i; iy += dir.offsetY * i; - iz += dir.offsetX * i; + iz += dir.offsetZ * i; } } @@ -87,30 +97,9 @@ public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToola return false; } - - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - - if(tool != ToolType.SCREWDRIVER) - return false; - - if(!world.isRemote) { - - int meta = world.getBlockMetadata(x, y, z) & 3; - - if(side == meta * 2 || side == meta * 2 + 1) { - world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta, 3); - this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.pile_rod_boron)); - } - } - - return true; - } @Override - public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { - ArrayList drops = super.getDrops(world, x, y, z, meta, fortune); - drops.add(new ItemStack(ModItems.pile_rod_boron)); - return drops; + protected Item getInsertedItem() { + return ModItems.pile_rod_boron; } } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java index 97120c264..b88d13f7f 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java @@ -4,9 +4,13 @@ import java.util.ArrayList; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.pile.TileEntityPileSource; import api.hbm.block.IToolable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -22,32 +26,17 @@ public class BlockGraphiteSource extends BlockGraphiteDrilledTE implements ITool } @Override - public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { - ArrayList drops = super.getDrops(world, x, y, z, metadata, fortune); - drops.add(new ItemStack(whoAmIAgain())); - return drops; - } - - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - - if(tool != ToolType.SCREWDRIVER) - return false; - - if(!world.isRemote) { - - int meta = world.getBlockMetadata(x, y, z) & 3; - - if(side == meta * 2 || side == meta * 2 + 1) { - world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta, 3); - this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(whoAmIAgain())); - } - } - - return true; + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + if(this == ModBlocks.block_graphite_plutonium) + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_plutonium_aluminum"); + else if(this == ModBlocks.block_graphite_source) + this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_source_aluminum"); } - private Item whoAmIAgain() { + @Override + protected Item getInsertedItem() { return this == ModBlocks.block_graphite_plutonium ? ModItems.pile_rod_plutonium : ModItems.pile_rod_source; } } diff --git a/src/main/java/com/hbm/crafting/RodRecipes.java b/src/main/java/com/hbm/crafting/RodRecipes.java index e98baed08..834b6849c 100644 --- a/src/main/java/com/hbm/crafting/RodRecipes.java +++ b/src/main/java/com/hbm/crafting/RodRecipes.java @@ -85,7 +85,9 @@ public class RodRecipes { //Pile fuel CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_uranium, 1), new Object[] { " U ", "PUP", " U ", 'P', IRON.plate(), 'U', U.billet() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_source, 1), new Object[] { " U ", "PUP", " U ", 'P', IRON.plate(), 'U', ModItems.billet_ra226be }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_boron, 1), new Object[] { "B", "W", "B", 'B', B.ingot(), 'W', KEY_PLANKS }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_boron, 1), new Object[] { " B ", " W ", " B ", 'B', B.ingot(), 'W', KEY_PLANKS }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.pile_rod_lithium, 1), new Object[] { ModItems.cell_empty, LI.ingot() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_detector, 1), new Object[] { " B ", "CM ", " B ", 'B', B.ingot(), 'C', ModItems.circuit_aluminium, 'M', ModItems.motor }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.rbmk_fuel_empty, 1), new Object[] { "ZRZ", "Z Z", "ZRZ", 'Z', ZR.ingot(), 'R', ModItems.rod_quad_empty }); addRBMKRod(U, ModItems.rbmk_fuel_ueu); diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index fa1f6ad7a..339d19b29 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -131,6 +131,9 @@ public class AnvilRecipes { constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModItems.plate_steel, 2), new AnvilOutput(new ItemStack(ModItems.hull_small_steel))).setTier(1)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModItems.plate_aluminium, 2), + new AnvilOutput(new ItemStack(ModItems.hull_small_aluminium))).setTier(1)); constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModItems.coil_copper, 2), new AnvilOutput(new ItemStack(ModItems.coil_copper_torus))).setTier(1).setOverlay(OverlayType.CONSTRUCTION)); @@ -551,6 +554,17 @@ public class AnvilRecipes { new AnvilOutput(new ItemStack(ModItems.ingot_boron, 2)), new AnvilOutput(new ItemStack(Items.stick, 2)) }).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModItems.pile_rod_detector), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.ingot_boron, 2)), + new AnvilOutput(new ItemStack(ModItems.motor, 1)), + new AnvilOutput(new ItemStack(ModItems.circuit_aluminium, 1)) + }).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModItems.pile_rod_lithium), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.lithium, 1)), + new AnvilOutput(new ItemStack(ModItems.cell_empty, 1)) + }).setTier(2)); //RBMK constructionRecipes.add(new AnvilConstructionRecipe( diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 8de41adb6..24a05f230 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1057,6 +1057,8 @@ public class ModItems { public static Item pile_rod_plutonium; public static Item pile_rod_source; public static Item pile_rod_boron; + public static Item pile_rod_lithium; + public static Item pile_rod_detector; public static Item plate_fuel_u233; public static Item plate_fuel_u235; @@ -3027,7 +3029,7 @@ public class ModItems { cap_aluminium = new Item().setUnlocalizedName("cap_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cap_aluminium"); hull_small_steel = new Item().setUnlocalizedName("hull_small_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hull_small_steel"); - hull_small_aluminium = new Item().setUnlocalizedName("hull_small_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hull_small_aluminium"); + hull_small_aluminium = new ItemCustomLore().setUnlocalizedName("hull_small_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hull_small_aluminium"); hull_big_steel = new Item().setUnlocalizedName("hull_big_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hull_big_steel"); hull_big_aluminium = new Item().setUnlocalizedName("hull_big_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hull_big_aluminium"); hull_big_titanium = new Item().setUnlocalizedName("hull_big_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hull_big_titanium"); @@ -3601,6 +3603,8 @@ public class ModItems { pile_rod_plutonium = new ItemPileRod().setUnlocalizedName("pile_rod_plutonium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_plutonium"); pile_rod_source = new ItemPileRod().setUnlocalizedName("pile_rod_source").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_source"); pile_rod_boron = new ItemPileRod().setUnlocalizedName("pile_rod_boron").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_boron"); + pile_rod_lithium = new ItemPileRod().setUnlocalizedName("pile_rod_lithium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_lithium"); + pile_rod_detector = new ItemPileRod().setUnlocalizedName("pile_rod_detector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_detector"); plate_fuel_u233 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 50).setUnlocalizedName("plate_fuel_u233").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u233"); plate_fuel_u235 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 40).setUnlocalizedName("plate_fuel_u235").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u235"); @@ -6749,6 +6753,8 @@ public class ModItems { GameRegistry.registerItem(pile_rod_plutonium, pile_rod_plutonium.getUnlocalizedName()); GameRegistry.registerItem(pile_rod_source, pile_rod_source.getUnlocalizedName()); GameRegistry.registerItem(pile_rod_boron, pile_rod_boron.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_lithium, pile_rod_lithium.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_detector, pile_rod_detector.getUnlocalizedName()); //Plate Fuels GameRegistry.registerItem(plate_fuel_u233, plate_fuel_u233.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemPileRod.java b/src/main/java/com/hbm/items/machine/ItemPileRod.java index 6930840ff..68debdd78 100644 --- a/src/main/java/com/hbm/items/machine/ItemPileRod.java +++ b/src/main/java/com/hbm/items/machine/ItemPileRod.java @@ -3,6 +3,7 @@ package com.hbm.items.machine; import java.util.List; import com.hbm.items.ModItems; +import com.hbm.util.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -13,23 +14,17 @@ public class ItemPileRod extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - - list.add(EnumChatFormatting.YELLOW + "Use on drilled graphite to insert"); - list.add(EnumChatFormatting.YELLOW + "Use screwdriver to extract"); - list.add(""); - if(this == ModItems.pile_rod_uranium) { - list.add(EnumChatFormatting.GREEN + "[Reactive Fuel]"); - list.add(EnumChatFormatting.YELLOW + "Use hand drill to take core sample"); + String[] defaultLocs = I18nUtil.resolveKey("desc.item.pileRod").split("\\$"); + + for(String loc : defaultLocs) { + list.add(loc); } - if(this == ModItems.pile_rod_boron) { - list.add(EnumChatFormatting.BLUE + "[Neutron Absorber]"); - list.add(EnumChatFormatting.YELLOW + "Click to toggle"); - } + String[] descLocs = I18nUtil.resolveKey(this.getUnlocalizedName() + ".desc").split("\\$"); - if(this == ModItems.pile_rod_source || this == ModItems.pile_rod_plutonium) { - list.add(EnumChatFormatting.LIGHT_PURPLE + "[Neutron Source]"); + for(String loc : descLocs) { + list.add(loc); } } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index b71596055..a1409c64d 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -273,6 +273,8 @@ public class TileMappings { private static void putPile() { put(TileEntityPileFuel.class, "tileentity_pile_fuel"); put(TileEntityPileSource.class, "tileentity_pile_source"); + put(TileEntityPileBreedingFuel.class, "tileentity_pile_breedingfuel"); + put(TileEntityPileNeutronDetector.class, "tileentity_pile_neutrondetector"); } private static void putRBMK() { diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java index d19ae6d75..90d3cd483 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java @@ -23,9 +23,12 @@ public abstract class TileEntityPileBase extends TileEntity { protected void castRay(int flux, int range) { Random rand = worldObj.rand; - Vec3 vec = Vec3.createVectorHelper(1, 0, 0); + int[] vecVals = { 0, 0, 0,}; + vecVals[rand.nextInt(3)] = 1; + Vec3 vec = Vec3.createVectorHelper(vecVals[0], vecVals[1], vecVals[2]); vec.rotateAroundZ((float)(rand.nextDouble() * Math.PI * 2D)); vec.rotateAroundY((float)(rand.nextDouble() * Math.PI * 2D)); + vec.rotateAroundX((float)(rand.nextDouble() * Math.PI * 2D)); int prevX = xCoord; int prevY = yCoord; @@ -44,6 +47,16 @@ public abstract class TileEntityPileBase extends TileEntity { prevY = y; prevZ = z; + /*if(i == range) { + NBTTagCompound data2 = new NBTTagCompound(); + data2.setString("type", "vanillaExt"); + data2.setString("mode", "greendust"); + data2.setDouble("posX", xCoord + 0.5 + vec.xCoord * range); + data2.setDouble("posY", yCoord + 0.5 + vec.yCoord * range); + data2.setDouble("posZ", zCoord + 0.5 + vec.zCoord * range); + MainRegistry.proxy.effectNT(data2); + }*/ + Block b = worldObj.getBlock(x, y, z); if(b == ModBlocks.concrete || b == ModBlocks.concrete_smooth || b == ModBlocks.concrete_asbestos || b == ModBlocks.concrete_colored || b == ModBlocks.brick_concrete) @@ -54,20 +67,23 @@ public abstract class TileEntityPileBase extends TileEntity { int meta = worldObj.getBlockMetadata(x, y, z); - if(b == ModBlocks.block_graphite_rod && (meta & 4) == 0) + if(b == ModBlocks.block_graphite_rod && (meta & 8) == 0) return; TileEntity te = worldObj.getTileEntity(x, y, z); if(te instanceof IPileNeutronReceiver) { - //this part throttles neutron efficiency for reactions that are way too close, efficiency reaches 100% after 2.5 meters - float mult = Math.min((float)range / 1.5F, 1F); - int n = (int)(flux * mult); + //this part throttles neutron efficiency for reactions that are way too close, efficiency reaches 100% after 1.5 meters + //This entire time, this multiplier has been using the max distance, not the actual one, meaning efficency has always been 100% + //float mult = Math.min((float)i / 1.5F, 1F); + //int n = (int)(flux * mult); IPileNeutronReceiver rec = (IPileNeutronReceiver) te; - rec.receiveNeutrons(n); - return; + rec.receiveNeutrons(flux); + + if(b != ModBlocks.block_graphite_detector || (meta & 8) == 0) + return; } List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x + 0.5, y + 0.5, z + 0.5, x + 0.5, y + 0.5, z + 0.5)); diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java new file mode 100644 index 000000000..117ecf27e --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java @@ -0,0 +1,59 @@ +package com.hbm.tileentity.machine.pile; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.GeneralConfig; + +import api.hbm.block.IPileNeutronReceiver; +import net.minecraft.nbt.NBTTagCompound; + +public class TileEntityPileBreedingFuel extends TileEntityPileBase implements IPileNeutronReceiver { + + public int neutrons; + public int lastNeutrons; + public int progress; + public static final int maxProgress = GeneralConfig.enable528 ? 37500 : 25000; + + @Override + public void updateEntity() { + if(!worldObj.isRemote) { + react(); + + if(this.progress >= this.maxProgress) { + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.block_graphite_tritium, this.getBlockMetadata(), 3); + } + } + } + + private void react() { + + this.lastNeutrons = this.neutrons; + this.progress += this.neutrons; + + this.neutrons = 0; + + if(lastNeutrons <= 0) + return; + + for(int i = 0; i < 2; i++) + this.castRay(1, 5); + } + + @Override + public void receiveNeutrons(int n) { + this.neutrons += n; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.progress = nbt.getInteger("progress"); + this.neutrons = nbt.getInteger("neutrons"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("progress", this.progress); + nbt.setInteger("neutrons", this.neutrons); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java index 4549d5d23..6f3401be0 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java @@ -34,7 +34,7 @@ public class TileEntityPileFuel extends TileEntityPileBase implements IPileNeutr } private void dissipateHeat() { - this.heat -= heat * 0.05; //remove 5% of the stored heat per tick + this.heat -= (this.getBlockMetadata() & 4) == 4 ? heat * 0.065 : heat * 0.05; //remove 5% of the stored heat per tick; 6.5% for windscale } private void react() { @@ -42,7 +42,7 @@ public class TileEntityPileFuel extends TileEntityPileBase implements IPileNeutr int reaction = (int) (this.neutrons * (1D - ((double)this.heat / (double)this.maxHeat) * 0.5D)); //max heat reduces reaction by 50% due to thermal expansion this.lastNeutrons = this.neutrons; - this.neutrons = 0;; + this.neutrons = 0; this.progress += reaction; @@ -51,7 +51,7 @@ public class TileEntityPileFuel extends TileEntityPileBase implements IPileNeutr this.heat += reaction; - for(int i = 0; i < 16; i++) + for(int i = 0; i < 12; i++) this.castRay((int) Math.max(reaction * 0.25, 1), 5); } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileNeutronDetector.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileNeutronDetector.java new file mode 100644 index 000000000..421f14eb2 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileNeutronDetector.java @@ -0,0 +1,50 @@ +package com.hbm.tileentity.machine.pile; + +import api.hbm.block.IPileNeutronReceiver; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.pile.BlockGraphiteNeutronDetector; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityPileNeutronDetector extends TileEntity implements IPileNeutronReceiver { + + public int lastNeutrons; + public int neutrons; + public int maxNeutrons = 10; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + //lastNeutrons is used to reduce the responsiveness of control rods; should cut down on sound/updates whilst keeping them still useful for automatic control. + //Even with it, the auto rods are *very* subject to triggering on and off rapidly - this is necessary, as rays in smaller piles aren't guarenteed to consistently flood all surrounding areas + if(this.neutrons >= this.maxNeutrons && (this.getBlockMetadata() & 8) > 0) + ((BlockGraphiteNeutronDetector)worldObj.getBlock(xCoord, yCoord, zCoord)).triggerRods(worldObj, xCoord, yCoord, zCoord); + if(this.neutrons < this.maxNeutrons && this.lastNeutrons < this.maxNeutrons && (this.getBlockMetadata() & 8) == 0) + ((BlockGraphiteNeutronDetector)worldObj.getBlock(xCoord, yCoord, zCoord)).triggerRods(worldObj, xCoord, yCoord, zCoord); + + this.lastNeutrons = this.neutrons; + this.neutrons = 0; + } + } + + @Override + public void receiveNeutrons(int n) { + this.neutrons += n; + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("maxNeutrons", this.maxNeutrons); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.maxNeutrons = nbt.getInteger("maxNeutrons"); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java index dc01a2ba2..ad1cc976f 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java @@ -11,7 +11,7 @@ public class TileEntityPileSource extends TileEntityPileBase { int n = this.getBlockType() == ModBlocks.block_graphite_source ? 1 : 3; - for(int i = 0; i < 16; i++) { + for(int i = 0; i < 12; i++) { this.castRay(n, 5); } } diff --git a/src/main/java/com/hbm/world/worldgen/ComponentNTMFeatures.java b/src/main/java/com/hbm/world/worldgen/ComponentNTMFeatures.java index ed4f6703c..7c6e83576 100644 --- a/src/main/java/com/hbm/world/worldgen/ComponentNTMFeatures.java +++ b/src/main/java/com/hbm/world/worldgen/ComponentNTMFeatures.java @@ -988,7 +988,7 @@ public class ComponentNTMFeatures { this.fillWithBlocks(world, box, featureSizeX, 0, 5, featureSizeX, 1, 5, ModBlocks.concrete_pillar, Blocks.air, false); //Back Wall Pt. 2 this.fillWithRandomizedBlocks(world, box, 6, 0, 5, featureSizeX - 1, 0, 5, false, rand, RandomConcreteBricks); this.fillWithRandomizedBlocks(world, box, 6, 1, 5, 6, 1, 5, false, rand, RandomConcreteBricks); - this.fillWithRandomizedBlocks(world, box, featureSizeX + 1, 1, 5, featureSizeX + 1, 1, 5, false, rand, RandomConcreteBricks); + this.fillWithRandomizedBlocks(world, box, featureSizeX - 1, 1, 5, featureSizeX + 1, 1, 5, false, rand, RandomConcreteBricks); this.fillWithBlocks(world, box, featureSizeX, 0, featureSizeZ, featureSizeX, 1, featureSizeZ, ModBlocks.concrete_pillar, Blocks.air, false); //Right Wall Pt. 2 this.fillWithRandomizedBlocks(world, box, featureSizeX, 0, 6, featureSizeX, 0, featureSizeZ - 1, false, rand, RandomConcreteBricks); this.fillWithRandomizedBlocks(world, box, featureSizeX, 1, 6, featureSizeX, 1, featureSizeZ - 3, false, rand, RandomConcreteBricks); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 20bd0abb3..86050b7c4 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -557,6 +557,7 @@ death.attack.tau=%1$s was riddeled by %2$s using negatively charged tauons. death.attack.tauBlast=%1$s charged the XVL1456 for too long and was blown into pieces. death.attack.teleporter=%1$s was teleported into nothingness. +desc.item.pileRod=§eUse on drilled graphite to insert$§eUse screwdriver to extract$ desc.item.rtgDecay=Decays to: %s desc.item.rtgHeat=Power Level: %s desc.item.wasteCooling=Cool in a Spent Fuel Pool Drum @@ -1842,6 +1843,7 @@ item.hull_big_aluminium.name=Big Aluminium Shell item.hull_big_steel.name=Big Steel Shell item.hull_big_titanium.name=Big Titanium Shell item.hull_small_aluminium.name=Small Aluminium Shell +item.hull_small_aluminium.desc=Can be inserted into drilled graphite item.hull_small_steel.name=Small Steel Shell item.igniter.name=Igniter item.igniter.desc=(Used by right-clicking the Prototype)$It's a green metal handle with a$bright red button and a small lid.$At the bottom, the initials N.E. are$engraved. Whoever N.E. was, he had$a great taste in shades of green. @@ -2441,9 +2443,17 @@ item.pellet_rtg_weak.desc=Cheaper and weaker pellet, now with more U238! item.pellet_schrabidium.name=Pure Schrabidium Watz Pellet item.photo_panel.name=Photovoltaic Panel item.pile_rod_boron.name=Chicago Pile Control Rod +item.pile_rod_boron.desc=§9[Neutron Absorber]$§eClick to toggle +item.pile_rod_detector.name=Chicago Pile Control & Detector Rod +item.pile_rod_detector.desc=§9[Neutron Detector/Absorber]$§eUse defuser to increase/decrease neutron limit$§eUse screwdriver w/o sneaking to inspect flux +item.pile_rod_lithium.name=Chicago Pile Lithium Cell +item.pile_rod_lithium.desc=§a[Breedable Fuel]$§eUse hand drill to inspect core item.pile_rod_plutonium.name=Chicago Pile Plutonium Rod +item.pile_rod_plutonium.desc=§d[Neutron Source] item.pile_rod_source.name=Chicago Pile Ra226Be Neutron Source +item.pile_rod_source.desc=§d[Neutron Source] item.pile_rod_uranium.name=Chicago Pile Uranium Rod +item.pile_rod_uranium.desc=§a[Reactive Fuel]$§eUse hand drill to take core sample item.pill_iodine.name=Iodine Pill item.pin.name=Bobby Pin item.pin.desc="*Unmodified* success rate of picking a standard lock is ~10%. @@ -3332,11 +3342,14 @@ tile.block_fluorite.name=Block of Fluorite tile.block_foam.name=Foam tile.block_insulator.name=Roll of Insulation tile.block_graphite.name=Block of Graphite +tile.block_graphite_detector.name=Pile Neutron Detector tile.block_graphite_drilled.name=Drilled Graphite tile.block_graphite_fuel.name=Pile Fuel +tile.block_graphite_lithium.name=Pile Lithium Fuel tile.block_graphite_plutonium.name=Pile Fuel (Bred) tile.block_graphite_rod.name=Pile Control Rod tile.block_graphite_source.name=Pile Neutron Source +tile.block_graphite_tritium.name=Pile Lithium Fuel (Bred) tile.block_lead.name=Block of Lead tile.block_lanthanium.name=Block of Lanthanium tile.block_lithium.name=Block of Lithium diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector.png new file mode 100644 index 000000000..51907956d Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_aluminum.png new file mode 100644 index 000000000..72bcf90d9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_out.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_out.png new file mode 100644 index 000000000..fb0b77eba Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_out.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_out_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_out_aluminum.png new file mode 100644 index 000000000..7b365c131 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_detector_out_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_drilled_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_drilled_aluminum.png new file mode 100644 index 000000000..fb546e6e4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_drilled_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_fuel_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_fuel_aluminum.png new file mode 100644 index 000000000..ee21bacff Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_fuel_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_lithium.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_lithium.png new file mode 100644 index 000000000..f4cad3ff1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_lithium.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_lithium_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_lithium_aluminum.png new file mode 100644 index 000000000..f0e839212 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_lithium_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_plutonium_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_plutonium_aluminum.png new file mode 100644 index 000000000..23ef0dbe3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_plutonium_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_rod_in_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_rod_in_aluminum.png new file mode 100644 index 000000000..0a2615717 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_rod_in_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_rod_out_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_rod_out_aluminum.png new file mode 100644 index 000000000..861350094 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_rod_out_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_source_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_source_aluminum.png new file mode 100644 index 000000000..55a52c575 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_source_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_tritium.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_tritium.png new file mode 100644 index 000000000..5e99673ce Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_tritium.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/block_graphite_tritium_aluminum.png b/src/main/resources/assets/hbm/textures/blocks/block_graphite_tritium_aluminum.png new file mode 100644 index 000000000..8611290f1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/block_graphite_tritium_aluminum.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod_detector.png b/src/main/resources/assets/hbm/textures/items/pile_rod_detector.png new file mode 100644 index 000000000..b821e4361 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod_detector.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod_lithium.png b/src/main/resources/assets/hbm/textures/items/pile_rod_lithium.png new file mode 100644 index 000000000..fd1bfd832 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod_lithium.png differ