diff --git a/gradle.properties b/gradle.properties index cf2273c3a..9383abbe4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4562 +mod_build_number=4578 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models, porting),\ diff --git a/src/main/java/api/hbm/block/IToolable.java b/src/main/java/api/hbm/block/IToolable.java index 429a14d59..64c57adb7 100644 --- a/src/main/java/api/hbm/block/IToolable.java +++ b/src/main/java/api/hbm/block/IToolable.java @@ -1,6 +1,13 @@ package api.hbm.block; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import com.hbm.inventory.RecipesCommon.ComparableStack; + import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; public interface IToolable { @@ -13,6 +20,28 @@ public interface IToolable { DEFUSER, WRENCH, TORCH, - BOLT + BOLT; + + public List stacksForDisplay = new ArrayList(); + private static HashMap map = new HashMap(); + + public void register(ItemStack stack) { + stacksForDisplay.add(stack); + } + + public static ToolType getType(ItemStack stack) { + + if(!map.isEmpty()) { + return map.get(new ComparableStack(stack)); + } + + for(ToolType type : ToolType.values()) { + for(ItemStack tool : type.stacksForDisplay) { + map.put(new ComparableStack(tool), type); + } + } + + return map.get(new ComparableStack(stack)); + } } } diff --git a/src/main/java/com/hbm/blocks/BlockEnumMulti.java b/src/main/java/com/hbm/blocks/BlockEnumMulti.java index bca10f87e..5ee6e4660 100644 --- a/src/main/java/com/hbm/blocks/BlockEnumMulti.java +++ b/src/main/java/com/hbm/blocks/BlockEnumMulti.java @@ -1,9 +1,12 @@ package com.hbm.blocks; +import com.hbm.util.EnumUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; public class BlockEnumMulti extends BlockMulti { @@ -38,6 +41,16 @@ public class BlockEnumMulti extends BlockMulti { } } + public String getUnlocalizedName(ItemStack stack) { + + if(this.multiName) { + Enum num = EnumUtil.grabEnumSafely(this.theEnum, stack.getItemDamage()); + return super.getUnlocalizedName() + "." + num.name().toLowerCase(); + } + + return this.getUnlocalizedName(); + } + @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { diff --git a/src/main/java/com/hbm/blocks/BlockMulti.java b/src/main/java/com/hbm/blocks/BlockMulti.java index 21930f6ff..1741d9316 100644 --- a/src/main/java/com/hbm/blocks/BlockMulti.java +++ b/src/main/java/com/hbm/blocks/BlockMulti.java @@ -31,4 +31,8 @@ public abstract class BlockMulti extends BlockBase implements IBlockMulti { list.add(new ItemStack(item, 1, i)); } } + + public String getUnlocalizedName(ItemStack stack) { + return this.getUnlocalizedName(); + } } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index b3b3d3e51..3b4ee27cf 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -928,6 +928,7 @@ public class ModBlocks { public static Block fraction_spacer; public static Block machine_catalytic_cracker; public static Block machine_catalytic_reformer; + public static Block machine_coker; public static Block machine_boiler_off; public static Block machine_boiler_on; @@ -1980,8 +1981,8 @@ public class ModBlocks { watz_element = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_element_top").setBlockName("watz_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_element_side"); watz_control = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_control_top").setBlockName("watz_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_control_side"); - watz_cooler = new BlockGeneric(Material.iron).setBlockName("watz_cooler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_cooler"); - watz_end = new BlockBoltable(Material.iron).setBlockName("watz_end").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_casing"); + watz_cooler = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_cooler_top").setBlockName("watz_cooler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_cooler_side"); + watz_end = new BlockToolConversion(Material.iron).addVariant("_bolted").setBlockName("watz_end").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_casing"); watz_hatch = new WatzHatch(Material.iron).setBlockName("watz_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_hatch"); watz_conductor = new BlockCableConnect(Material.iron).setBlockName("watz_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_conductor_top"); watz_core = new WatzCore(Material.iron).setBlockName("watz_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_computer"); @@ -2139,6 +2140,7 @@ public class ModBlocks { fraction_spacer = new FractionSpacer(Material.iron).setBlockName("fraction_spacer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_catalytic_cracker = new MachineCatalyticCracker(Material.iron).setBlockName("machine_catalytic_cracker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_catalytic_reformer = new MachineCatalyticReformer(Material.iron).setBlockName("machine_catalytic_reformer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_coker = new MachineCoker(Material.iron).setBlockName("machine_coker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_autosaw = new MachineAutosaw().setBlockName("machine_autosaw").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_drill = new MachineMiningDrill(Material.iron).setBlockName("machine_drill").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_drill"); machine_excavator = new MachineExcavator().setBlockName("machine_excavator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3186,12 +3188,13 @@ public class ModBlocks { register(machine_flare); register(machine_refinery); register(machine_vacuum_distill); - GameRegistry.registerBlock(machine_fraction_tower, machine_fraction_tower.getUnlocalizedName()); - GameRegistry.registerBlock(fraction_spacer, fraction_spacer.getUnlocalizedName()); - GameRegistry.registerBlock(machine_catalytic_cracker, machine_catalytic_cracker.getUnlocalizedName()); + register(machine_fraction_tower); + register(fraction_spacer); + register(machine_catalytic_cracker); register(machine_catalytic_reformer); - GameRegistry.registerBlock(machine_drill, machine_drill.getUnlocalizedName()); - GameRegistry.registerBlock(machine_autosaw, machine_autosaw.getUnlocalizedName()); + register(machine_coker); + register(machine_drill); + register(machine_autosaw); register(machine_excavator); register(machine_mining_laser); register(barricade); diff --git a/src/main/java/com/hbm/blocks/generic/BlockBoltable.java b/src/main/java/com/hbm/blocks/generic/BlockBoltable.java deleted file mode 100644 index 87ff806ed..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockBoltable.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.hbm.blocks.generic; - -import java.util.ArrayList; -import java.util.List; - -import com.hbm.blocks.BlockBase; -import com.hbm.blocks.IBlockMulti; -import com.hbm.blocks.ILookOverlay; -import com.hbm.inventory.RecipesCommon.AStack; -import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; - -import api.hbm.block.IToolable; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.material.Material; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; - -public class BlockBoltable extends BlockBase implements IToolable, ILookOverlay, IBlockMulti { - - public BlockBoltable(Material mat) { - super(mat); - } - - @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.BOLT) return false; - - return true; - } - - public List getMaterials(int meta) { - List list = new ArrayList(); - - return list; - } - - @Override - @SideOnly(Side.CLIENT) - public void printHook(Pre event, World world, int x, int y, int z) { - - ItemStack held = Minecraft.getMinecraft().thePlayer.getHeldItem(); - if(held == null || held.getItem() != ModItems.boltgun) return; - - List text = new ArrayList(); - text.add(EnumChatFormatting.GOLD + "Requires:"); - List materials = getMaterials(world.getBlockMetadata(x, y, z)); - - for(AStack stack : materials) { - try { - ItemStack display = stack.extractForCyclingDisplay(20); - text.add("- " + display.getDisplayName() + " x" + display.stackSize); - } catch(Exception ex) { - text.add(EnumChatFormatting.RED + "- ERROR"); - } - } - - if(!materials.isEmpty()) { - ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); - } - } - - @Override - public int getSubCount() { - return 1; - } -} diff --git a/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java b/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java index f9ff43fb0..60ef35c47 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java +++ b/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java @@ -177,12 +177,7 @@ public class BlockTallPlant extends BlockEnumMulti implements IPlantable, IGrowa public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) { if(meta > 7) { - - if(world.getBlock(x, y - 1, z) == this) { - if(!player.capabilities.isCreativeMode) { - this.dropBlockAsItem(world, x, y - 1, z, world.getBlockMetadata(x, y - 1, z), 0); - } - } + // dead } else if(world.getBlock(x, y + 1, z) == this) { if(player.capabilities.isCreativeMode) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java new file mode 100644 index 000000000..582db2d18 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java @@ -0,0 +1,178 @@ +package com.hbm.blocks.generic; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import com.hbm.blocks.BlockMulti; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.MetaBlock; +import com.hbm.items.ModItems; +import com.hbm.util.I18nUtil; +import com.hbm.util.InventoryUtil; +import com.hbm.util.Tuple.Pair; + +import api.hbm.block.IToolable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; + +public class BlockToolConversion extends BlockMulti implements IToolable, ILookOverlay { + + public IIcon[] icons; + public String[] names; + + public BlockToolConversion(Material mat) { + super(mat); + } + + public BlockToolConversion addVariant(String... name) { + this.names = name; + return this; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + + if(names != null) { + icons = new IIcon[names.length]; + for(int i = 0; i < names.length; i++) { + icons[i] = iconRegister.registerIcon(getTextureName() + names[i]); + } + } + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + + int meta = stack.getItemDamage() - 1; + + if(meta == -1 || names == null || meta >= names.length) { + return this.getUnlocalizedName(); + } + + return this.getUnlocalizedName() + names[meta]; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + + metadata -= 1; + + if(metadata == -1 || icons == null || metadata >= icons.length) { + return super.getIcon(side, metadata); + } + + return icons[metadata]; + } + + @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) return false; + + Pair result = conversions.get(new Pair(tool, new MetaBlock(this, world.getBlockMetadata(x, y, z)))); + + if(result == null) return false; + + List list = new ArrayList(); + for(AStack stack : result.key) list.add(stack); + + if(list == null || list.isEmpty() || InventoryUtil.doesPlayerHaveAStacks(player, list, true)) { + world.setBlock(x, y, z, result.value.block, result.value.meta, 3); + return true; + } + + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void printHook(Pre event, World world, int x, int y, int z) { + + ItemStack held = Minecraft.getMinecraft().thePlayer.getHeldItem(); + if(held == null) return; + ToolType tool = this.quickLookup(held); + if(tool == null) return; + + Pair result = conversions.get(new Pair(tool, new MetaBlock(this, world.getBlockMetadata(x, y, z)))); + + if(result == null) return; + + List text = new ArrayList(); + text.add(EnumChatFormatting.GOLD + "Requires:"); + List materials = new ArrayList(); + for(AStack stack : result.key) materials.add(stack); + + List tools = tool.stacksForDisplay; + ItemStack displayTool = tools.get((int) (Math.abs(System.currentTimeMillis() / 1000) % tools.size())); + text.add(EnumChatFormatting.BLUE + "- " + displayTool.getDisplayName()); + + for(AStack stack : materials) { + try { + ItemStack display = stack.extractForCyclingDisplay(20); + text.add("- " + display.getDisplayName() + " x" + display.stackSize); + } catch(Exception ex) { + text.add(EnumChatFormatting.RED + "- ERROR"); + } + } + + if(!materials.isEmpty()) { + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + } + + @Override + public int getSubCount() { + return names != null ? names.length + 1 : 1; + } + + public static ToolType quickLookup(ItemStack stack) { + return ToolType.getType(stack); + } + + public static HashMap, Pair> conversions = new HashMap(); + + public static void registerRecipes() { + conversions.put(new Pair(ToolType.BOLT, new MetaBlock(ModBlocks.watz_end, 0)), new Pair(new AStack[] {new ComparableStack(ModItems.bolt_dura_steel, 4)}, new MetaBlock(ModBlocks.watz_end, 1))); + } + + public static HashMap bufferedRecipes = new HashMap(); + public static HashMap bufferedTools = new HashMap(); + + public static HashMap getRecipes(boolean recipes) { + + if(!bufferedRecipes.isEmpty()) return recipes ? bufferedRecipes : bufferedTools; + + for(Entry, Pair> entry : conversions.entrySet()) { + + List list = new ArrayList(); + + for(AStack stack : entry.getValue().getKey()) { + list.add(stack); + } + list.add(new ComparableStack(entry.getKey().getValue().block, 1, entry.getKey().getValue().meta)); + + Object[] inputInstance = list.toArray(new AStack[0]); // the instance has to match for the machine lookup to succeed + bufferedRecipes.put(inputInstance, new ItemStack(entry.getValue().getValue().block, 1, entry.getValue().getValue().meta)); + bufferedTools.put(inputInstance, entry.getKey().getKey().stacksForDisplay.toArray(new ItemStack[0])); + } + + return recipes ? bufferedRecipes : bufferedTools; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineCoker.java b/src/main/java/com/hbm/blocks/machine/MachineCoker.java new file mode 100644 index 000000000..b944783ba --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineCoker.java @@ -0,0 +1,39 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.machine.oil.TileEntityMachineCoker; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class MachineCoker extends BlockDummyable { + + public MachineCoker(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + + if(meta >= 12) return new TileEntityMachineCoker(); + + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return standardOpenBehavior(world, x, y, z, player, side); + } + + @Override + public int[] getDimensions() { + return new int[] {4, 0, 2, 2, 2, 2}; + } + + @Override + public int getOffset() { + return 2; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java index cde554cd5..b2ccf824c 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java @@ -11,6 +11,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityCrucible; +import api.hbm.block.ICrucibleAcceptor; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -24,8 +25,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; +import net.minecraftforge.common.util.ForgeDirection; -public class MachineCrucible extends BlockDummyable { +public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor { public MachineCrucible() { super(Material.rock); @@ -151,4 +153,31 @@ public class MachineCrucible extends BlockDummyable { for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(aabb.expand(exp, exp, exp).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); ICustomBlockHighlight.cleanup(); } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return false; + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(tile instanceof TileEntityCrucible)) return false; + TileEntityCrucible crucible = (TileEntityCrucible) tile; + + return crucible.canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return stack; + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(tile instanceof TileEntityCrucible)) return stack; + TileEntityCrucible crucible = (TileEntityCrucible) tile; + + return crucible.pour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } + @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } } diff --git a/src/main/java/com/hbm/blocks/machine/Watz.java b/src/main/java/com/hbm/blocks/machine/Watz.java index 46de57e92..8a975bbc2 100644 --- a/src/main/java/com/hbm/blocks/machine/Watz.java +++ b/src/main/java/com/hbm/blocks/machine/Watz.java @@ -1,12 +1,17 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.items.ModItems; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityWatz; +import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -71,4 +76,21 @@ public class Watz extends BlockDummyable { this.makeExtra(world, x, y + 2, z - 2); this.makeExtra(world, x, y + 2, z); } + + public static boolean drop = true; + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int i) { + + if(i >= 12 && drop) { + + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.watz_end, 48))); + for(int j = 0; j < 3; j++) world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.bolt_dura_steel, 64))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.watz_element, 36))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.watz_cooler, 26))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_watz_core, 1))); + } + + super.breakBlock(world, x, y, z, block, i); + } } diff --git a/src/main/java/com/hbm/crafting/RodRecipes.java b/src/main/java/com/hbm/crafting/RodRecipes.java index 1928d5b38..06f29fb44 100644 --- a/src/main/java/com/hbm/crafting/RodRecipes.java +++ b/src/main/java/com/hbm/crafting/RodRecipes.java @@ -3,12 +3,14 @@ package com.hbm.crafting; import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBreedingRod.*; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; import com.hbm.main.CraftingManager; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapedOreRecipe; /** @@ -123,6 +125,23 @@ public class RodRecipes { addRBMKRod(ModItems.billet_zfb_pu241, ModItems.rbmk_fuel_zfb_pu241); addRBMKRod(ModItems.billet_zfb_am_mix, ModItems.rbmk_fuel_zfb_am_mix); CraftingManager.addShapelessAuto(new ItemStack(ModItems.rbmk_fuel_drx, 1), new Object[] { ModItems.rbmk_fuel_balefire, ModItems.particle_digamma }); + + addPellet(SA326, EnumWatzType.SCHRABIDIUM); + addPellet(ModItems.ingot_hes, EnumWatzType.HES); + addPellet(ModItems.ingot_schrabidium_fuel, EnumWatzType.MES); + addPellet(ModItems.ingot_les, EnumWatzType.LES); + addPellet(NP237, EnumWatzType.HEN); + addPellet(ModItems.ingot_uranium_fuel, EnumWatzType.MEU); + addPellet(ModItems.ingot_pu_mix, EnumWatzType.MEP); + addPellet(PB, EnumWatzType.LEAD); + addPellet(B, EnumWatzType.BORON); + addPellet(U238, EnumWatzType.DU); + } + + public static void registerInit() { + /* GT6 */ + if(OreDictionary.doesOreNameExist("ingotNaquadah-Enriched")) addPellet(new DictFrame("Naquadah-Enriched"), EnumWatzType.NQD); + if(OreDictionary.doesOreNameExist("ingotNaquadria")) addPellet(new DictFrame("Naquadria"), EnumWatzType.NQR); } //Fill rods with one billet. For fuels only, therefore no unloading or ore dict @@ -223,4 +242,12 @@ public class RodRecipes { public static void addZIRNOXRod(DictFrame mat, EnumZirnoxType num) { CraftingManager.addShapelessAuto(new ItemStack(ModItems.rod_zirnox, 1, num.ordinal()), new Object[] { ModItems.rod_zirnox_empty, mat.billet(), mat.billet() }); } + + /** Watz pellet crafting **/ + public static void addPellet(DictFrame mat, EnumWatzType num) { + CraftingManager.addRecipeAuto(new ItemStack(ModItems.watz_pellet, 1, num.ordinal()), new Object[] { " I ", "IGI", " I ", 'I', mat.ingot(), 'G', GRAPHITE.ingot() }); + } + public static void addPellet(Item item, EnumWatzType num) { + CraftingManager.addRecipeAuto(new ItemStack(ModItems.watz_pellet, 1, num.ordinal()), new Object[] { " I ", "IGI", " I ", 'I', item, 'G', GRAPHITE.ingot() }); + } } diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 2d6d82b78..91ddd5338 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -5,6 +5,8 @@ import com.hbm.config.GeneralConfig; import com.hbm.inventory.fluid.Fluids; import static com.hbm.inventory.OreDictManager.*; + +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; import com.hbm.items.tool.ItemBlowtorch; @@ -137,6 +139,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.chemistry_set_boron), new Object[] { "GIG", "GCG", 'G', ModBlocks.glass_boron, 'I', STEEL.ingot(), 'C', CO.ingot() }); CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.blowtorch), new Object[] { "CC ", " I ", "CCC", 'C', CU.plate528(), 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.acetylene_torch), new Object[] { "SS ", " PS", " T ", 'S', STEEL.plate528(), 'P', ANY_PLASTIC.ingot(), 'T', ModItems.tank_steel }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.boltgun), new Object[] { "DPS", " RD", " D ", 'D', DURA.ingot(), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'R', RUBBER.ingot(), 'S', ModItems.hull_small_steel }); //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon_materials), new Object[] { Items.book, Items.gold_nugget, Items.string }); diff --git a/src/main/java/com/hbm/entity/effect/EntityMist.java b/src/main/java/com/hbm/entity/effect/EntityMist.java index 06de19176..4150a436b 100644 --- a/src/main/java/com/hbm/entity/effect/EntityMist.java +++ b/src/main/java/com/hbm/entity/effect/EntityMist.java @@ -29,6 +29,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -66,8 +67,9 @@ public class EntityMist extends Entity { public void onEntityUpdate() { float height = this.dataWatcher.getWatchableObjectFloat(12); - this.yOffset = -height / 2F; + this.yOffset = 0; this.setSize(this.dataWatcher.getWatchableObjectFloat(11), height); + this.setPosition(this.posX, this.posY, this.posZ); if(!worldObj.isRemote) { @@ -90,11 +92,20 @@ public class EntityMist extends Entity { return; } - List affected = worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox); + AxisAlignedBB aabb = this.boundingBox.copy(); + List affected = worldObj.getEntitiesWithinAABBExcludingEntity(this, aabb.offset(-this.width / 2, 0, -this.width / 2)); for(Entity e : affected) { this.affect(e, intensity); } + } else { + + for(int i = 0; i < 2; i++) { + double x = this.boundingBox.minX + rand.nextDouble() * (this.boundingBox.maxX - this.boundingBox.minX); + double y = this.boundingBox.minY + rand.nextDouble() * (this.boundingBox.maxY - this.boundingBox.minY); + double z = this.boundingBox.minZ + rand.nextDouble() * (this.boundingBox.maxZ - this.boundingBox.minZ); + worldObj.spawnParticle("cloud", x, y, z, 0, 0, 0); + } } } diff --git a/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java b/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java index 53cfbe7f7..dc6015870 100644 --- a/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java +++ b/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java @@ -32,6 +32,7 @@ public class EntityCreeperPhosgene extends EntityCreeper { if(!this.worldObj.isRemote) { this.setDead(); + worldObj.createExplosion(this, posX, posY + this.height / 2, posZ, 2F, false); EntityMist mist = new EntityMist(worldObj); mist.setType(Fluids.PHOSGENE); mist.setPosition(posX, posY, posZ); diff --git a/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java b/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java index 0d07ee058..3b1c7dea5 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java +++ b/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java @@ -80,10 +80,15 @@ public class EntityShrapnel extends EntityThrowable { } } + } else if(this.dataWatcher.getWatchableObjectByte(16) == 3) { + + if(worldObj.getBlock(mop.blockX, mop.blockY + 1, mop.blockZ).isReplaceable(worldObj, mop.blockX, mop.blockY + 1, mop.blockZ)) { + worldObj.setBlock(mop.blockX, mop.blockY + 1, mop.blockZ, ModBlocks.mud_block); + } + } else { - for(int i = 0; i < 5; i++) - worldObj.spawnParticle("lava", posX, posY, posZ, 0.0, 0.0, 0.0); + for(int i = 0; i < 5; i++) worldObj.spawnParticle("lava", posX, posY, posZ, 0.0, 0.0, 0.0); } worldObj.playSoundEffect(posX, posY, posZ, "random.fizz", 1.0F, 1.0F); @@ -97,4 +102,8 @@ public class EntityShrapnel extends EntityThrowable { public void setVolcano(boolean b) { this.dataWatcher.updateObject(16, (byte) (b ? 2 : 0)); } + + public void setWatz(boolean b) { + this.dataWatcher.updateObject(16, (byte) (b ? 3 : 0)); + } } diff --git a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java index 744314be0..d5da7444f 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java @@ -162,8 +162,8 @@ public class Gun762mmFactory { final BulletConfiguration bullet = Gun556mmFactory.get556Config().clone(); bullet.ammo = new ComparableStack(ModItems.ammo_762.stackFromEnum(Ammo762NATO.STOCK)); - bullet.dmgMax *= 2; - bullet.dmgMin *= 2; + bullet.dmgMax = 20; + bullet.dmgMin = 24; bullet.velocity *= 2.5; bullet.maxAge *= 2; bullet.spread /= 2; @@ -177,8 +177,8 @@ public class Gun762mmFactory { final BulletConfiguration bullet = get762NATOConfig(); bullet.ammo = new ComparableStack(ModItems.ammo_762.stackFromEnum(Ammo762NATO.AP)); - bullet.dmgMax *= 1.5; - bullet.dmgMin *= 1.5; + bullet.dmgMax = 24; + bullet.dmgMin = 28; bullet.spentCasing = CASING762NATO.clone().register("762NATOAP"); @@ -189,8 +189,8 @@ public class Gun762mmFactory { final BulletConfiguration bullet = get762NATOConfig(); bullet.ammo = new ComparableStack(ModItems.ammo_762.stackFromEnum(Ammo762NATO.DU)); - bullet.dmgMax *= 2; - bullet.dmgMin *= 2; + bullet.dmgMax = 36; + bullet.dmgMin = 40; bullet.spentCasing = CASING762NATO.clone().register("762NATODU"); diff --git a/src/main/java/com/hbm/handler/nei/ConstructionHandler.java b/src/main/java/com/hbm/handler/nei/ConstructionHandler.java new file mode 100644 index 000000000..240ad58af --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/ConstructionHandler.java @@ -0,0 +1,97 @@ +package com.hbm.handler.nei; + +import java.util.HashMap; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.util.ItemStackUtil; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ConstructionHandler extends NEIUniversalHandler { + + public ConstructionHandler() { + super("Construction", getRecipes(true), getRecipes(false)); + } + + @Override + public String getKey() { + return "ntmConstruction"; + } + + public static HashMap bufferedRecipes = new HashMap(); + public static HashMap bufferedTools = new HashMap(); + + public static HashMap getRecipes(boolean recipes) { + + if(!bufferedRecipes.isEmpty()) { + return recipes ? bufferedRecipes : bufferedTools; + } + + /* WATZ */ + ItemStack[] watz = new ItemStack[] { + new ItemStack(ModBlocks.watz_end, 48), + new ItemStack(ModItems.bolt_dura_steel, 64), + new ItemStack(ModItems.bolt_dura_steel, 64), + new ItemStack(ModItems.bolt_dura_steel, 64), + new ItemStack(ModBlocks.watz_element, 36), + new ItemStack(ModBlocks.watz_cooler, 26), + new ItemStack(ModItems.boltgun)}; + + bufferedRecipes.put(watz, new ItemStack(ModBlocks.watz)); + bufferedTools.put(watz, new ItemStack(ModBlocks.struct_watz_core)); + + /* ITER */ + ItemStack[] iter = new ItemStack[] { + new ItemStack(ModBlocks.fusion_conductor, 36), + new ItemStack(ModBlocks.fusion_conductor, 64), + new ItemStack(ModBlocks.fusion_conductor, 64), + new ItemStack(ModBlocks.fusion_conductor, 64), + new ItemStack(ModBlocks.fusion_conductor, 64), + new ItemStack(ModBlocks.fusion_center, 64), + new ItemStack(ModBlocks.fusion_motor, 4), + new ItemStack(ModBlocks.reinforced_glass, 8)}; + + bufferedRecipes.put(iter, new ItemStack(ModBlocks.iter)); + bufferedTools.put(iter, new ItemStack(ModBlocks.struct_iter_core)); + + /* PLASMA HEATER */ + ItemStack[] heater = new ItemStack[] { + new ItemStack(ModBlocks.fusion_heater, 7), + new ItemStack(ModBlocks.fusion_heater, 64), + new ItemStack(ModBlocks.fusion_heater, 64) }; + + bufferedRecipes.put(heater, new ItemStack(ModBlocks.plasma_heater)); + bufferedTools.put(heater, new ItemStack(ModBlocks.struct_plasma_core)); + + /* COMPACT LAUNCHER */ + ItemStack[] launcher = new ItemStack[] { new ItemStack(ModBlocks.struct_launcher, 8) }; + + bufferedRecipes.put(launcher, new ItemStack(ModBlocks.compact_launcher)); + bufferedTools.put(launcher, new ItemStack(ModBlocks.struct_launcher_core)); + + /* LAUNCH TABLE */ + ItemStack[] table = new ItemStack[] { + new ItemStack(ModBlocks.struct_launcher, 16), + new ItemStack(ModBlocks.struct_launcher, 64), + new ItemStack(ModBlocks.struct_scaffold, 11)}; + + bufferedRecipes.put(table, new ItemStack(ModBlocks.launch_table)); + bufferedTools.put(table, new ItemStack(ModBlocks.struct_launcher_core_large)); + + /* SOYUZ LAUNCHER */ + ItemStack[] soysauce = new ItemStack[] { + new ItemStack(ModBlocks.struct_launcher, 60), + ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.struct_launcher, 320), EnumChatFormatting.RED + "5x64"), + new ItemStack(ModBlocks.struct_scaffold, 53), + ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.struct_scaffold, 384), EnumChatFormatting.RED + "6x64"), + new ItemStack(ModBlocks.concrete_smooth, 8), + ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.concrete_smooth, 320), EnumChatFormatting.RED + "5x64"),}; + + bufferedRecipes.put(soysauce, new ItemStack(ModBlocks.soyuz_launcher)); + bufferedTools.put(soysauce, new ItemStack(ModBlocks.struct_soyuz_core)); + + return recipes ? bufferedRecipes : bufferedTools; + } +} diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index b7424e12e..3f4fcbe67 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -32,12 +32,19 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { public final String display; public final ItemStack[] machine; public final HashMap recipes; + public HashMap machineOverrides; /// SETUP /// - + public NEIUniversalHandler(String display, ItemStack machine[], HashMap recipes) { this.display = display; this.machine = machine; this.recipes = recipes; + this.machineOverrides = null; + } + + public NEIUniversalHandler(String display, HashMap recipes, HashMap machines) { + this(display, (ItemStack[]) null, recipes); + this.machineOverrides = machines; } public NEIUniversalHandler(String display, ItemStack machine, HashMap recipes) { this(display, new ItemStack[]{machine}, recipes); } @@ -50,22 +57,32 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { PositionedStack[] output; PositionedStack machinePositioned; - public RecipeSet(ItemStack[][] in, ItemStack[][] out) { + public RecipeSet(ItemStack[][] in, ItemStack[][] out, Object originalInputInstance /* for custom machine lookup */) { input = new PositionedStack[in.length]; + int[][] inPos = NEIUniversalHandler.getInputCoords(in.length); for(int i = 0; i < in.length; i++) { ItemStack[] sub = in[i]; - this.input[i] = new PositionedStack(sub, 48 + i * -18, 24); + this.input[i] = new PositionedStack(sub, inPos[i][0], inPos[i][1]); } output = new PositionedStack[out.length]; + int[][] outPos = NEIUniversalHandler.getOutputCoords(out.length); for(int i = 0; i < out.length; i++) { ItemStack[] sub = out[i]; - - boolean twos = out.length > 3; - this.output[i] = new PositionedStack(sub, 102 + i * 18 - ((twos && i > 1) ? 36 : 0), 24 + (twos ? (i < 2 ? -9 : 9) : 0)); + this.output[i] = new PositionedStack(sub, outPos[i][0], outPos[i][1]); } - this.machinePositioned = new PositionedStack(machine, 75, 31); + ItemStack[] m = machine; + + if(NEIUniversalHandler.this.machineOverrides != null) { + Object key = NEIUniversalHandler.this.machineOverrides.get(originalInputInstance); + + if(key != null) { + this.machinePositioned = new PositionedStack(key, 75, 31); + } + } + + if(machinePositioned == null) this.machinePositioned = new PositionedStack(m, 75, 31); } @Override @@ -104,16 +121,115 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { super.drawBackground(recipe); RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); - - for(int i = 0; i < rec.input.length; i++) - drawTexturedModalRect(47 + i * -18, 23, 5, 87, 18, 18); - for(int i = 0; i < rec.output.length; i++) { - boolean twos = rec.output.length > 3; - drawTexturedModalRect(101 + i * 18 - ((twos && i > 1) ? 36 : 0), 23 + (twos ? (i < 2 ? -9 : 9) : 0), 5, 87, 18, 18); + + int[][] inPos = NEIUniversalHandler.getInputCoords(rec.input.length); + for(int[] pos : inPos) { + drawTexturedModalRect(pos[0] - 1, pos[1] - 1, 5, 87, 18, 18); + } + int[][] outPos = NEIUniversalHandler.getOutputCoords(rec.output.length); + for(int[] pos : outPos) { + drawTexturedModalRect(pos[0] - 1, pos[1] - 1, 5, 87, 18, 18); } drawTexturedModalRect(74, 14, 59, 87, 18, 38); } + + public static int[][] getInputCoords(int count) { + + switch(count) { + case 1: return new int[][] { + {48, 24} + }; + case 2: return new int[][] { + {48, 24}, + {30, 24} + }; + case 3: return new int[][] { + {48, 24}, + {30, 24}, + {12, 24} + }; + case 4: return new int[][] { + {48, 24 - 9}, + {30, 24 - 9}, + {48, 24 + 9}, + {30, 24 + 9} + }; + case 5: return new int[][] { + {48, 24 - 9}, + {30, 24 - 9}, + {12, 24}, + {48, 24 + 9}, + {30, 24 + 9}, + }; + case 6: return new int[][] { + {48, 24 - 9}, + {30, 24 - 9}, + {12, 24 - 9}, + {48, 24 + 9}, + {30, 24 + 9}, + {12, 24 + 9} + }; + case 7: return new int[][] { + {48, 24 - 18}, + {30, 24 - 9}, + {12, 24 - 9}, + {48, 24}, + {30, 24 + 9}, + {12, 24 + 9}, + {48, 24 + 18} + }; + case 8: return new int[][] { + {48, 24 - 18}, + {30, 24 - 18}, + {12, 24 - 9}, + {48, 24}, + {30, 24}, + {12, 24 + 9}, + {48, 24 + 18}, + {30, 24 + 18} + }; + case 9: return new int[][] { + {48, 24 - 18}, + {30, 24 - 18}, + {12, 24 - 18}, + {48, 24}, + {30, 24}, + {12, 24}, + {48, 24 + 18}, + {30, 24 + 18}, + {12, 24 + 18} + }; + } + + return new int[count][2]; + } + + public static int[][] getOutputCoords(int count) { + + switch(count) { + case 1: return new int[][] { + {102, 24} + }; + case 2: return new int[][] { + {102, 24}, + {120, 24} + }; + case 3: return new int[][] { + {102, 24}, + {120, 24}, + {138, 24} + }; + case 4: return new int[][] { + {102, 24 - 9}, + {120, 24 - 9}, + {102, 24 + 9}, + {120, 24 + 9} + }; + } + + return new int[count][2]; + } @Override public void loadCraftingRecipes(String outputId, Object... results) { @@ -123,7 +239,7 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { for(Entry recipe : recipes.entrySet()) { ItemStack[][] ins = InventoryUtil.extractObject(recipe.getKey()); ItemStack[][] outs = InventoryUtil.extractObject(recipe.getValue()); - this.arecipes.add(new RecipeSet(ins, outs)); + this.arecipes.add(new RecipeSet(ins, outs, recipe.getKey())); } } else { @@ -142,7 +258,7 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { for(ItemStack[] array : outs) { for(ItemStack stack : array) { if(NEIServerUtils.areStacksSameTypeCrafting(stack, result)) { - this.arecipes.add(new RecipeSet(ins, outs)); + this.arecipes.add(new RecipeSet(ins, outs, recipe.getKey())); break match; } } @@ -170,7 +286,7 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { for(ItemStack[] array : ins) { for(ItemStack stack : array) { if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) { - this.arecipes.add(new RecipeSet(ins, outs)); + this.arecipes.add(new RecipeSet(ins, outs, recipe.getKey())); break match; } } diff --git a/src/main/java/com/hbm/handler/nei/ToolingHandler.java b/src/main/java/com/hbm/handler/nei/ToolingHandler.java new file mode 100644 index 000000000..c50074f1e --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/ToolingHandler.java @@ -0,0 +1,15 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.generic.BlockToolConversion; + +public class ToolingHandler extends NEIUniversalHandler { + + public ToolingHandler() { + super("Tooling", BlockToolConversion.getRecipes(true), BlockToolConversion.getRecipes(false)); + } + + @Override + public String getKey() { + return "ntmTooling"; + } +} diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index b404040a2..b670bfde7 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -9,10 +9,12 @@ import com.hbm.config.GeneralConfig; import com.hbm.hazard.modifier.*; import com.hbm.hazard.transformer.*; import com.hbm.hazard.type.*; +import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.material.MaterialShapes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.util.Compat; @@ -104,6 +106,7 @@ public class HazardRegistry { public static final float saf = 5.85F; public static final float sas3 = 5F; public static final float gh336 = 5.0F; + public static final float mud = 1.0F; public static final float radsource_mult = 3.0F; public static final float pobe = po210 * radsource_mult; public static final float rabe = ra226 * radsource_mult; @@ -429,6 +432,17 @@ public class HazardRegistry { registerRBMKPellet(rbmk_pellet_zfb_am_mix, pu241 * billet * 0.1F, wst * billet * 10F); registerRBMKPellet(rbmk_pellet_drx, bf * billet, bf * billet * 100F, true, 0F, 1F/24F); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.SCHRABIDIUM), makeData(RADIATION, sa326 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.HES), makeData(RADIATION, saf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.MES), makeData(RADIATION, saf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.LES), makeData(RADIATION, saf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.HEN), makeData(RADIATION, np237 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.MEU), makeData(RADIATION, uf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.MEP), makeData(RADIATION, purg * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.DU), makeData(RADIATION, u238 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.NQD), makeData(RADIATION, u235 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.NQR), makeData(RADIATION, pu239 * ingot * 4)); + HazardSystem.register(powder_yellowcake, makeData(RADIATION, yc * powder)); HazardSystem.register(block_yellowcake, makeData(RADIATION, yc * block * powder_mult)); HazardSystem.register(ModItems.fallout, makeData(RADIATION, fo * powder)); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index ca1ef53d8..8bd6b507a 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -32,6 +32,7 @@ import com.hbm.util.Compat; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -138,6 +139,7 @@ public class OreDictManager { public static final DictFrame SBD = new DictFrame("Schrabidate"); public static final DictFrame SRN = new DictFrame("Schraranium"); public static final DictFrame GH336 = new DictFrame("Ghiorsium336", "Gh336"); + public static final DictFrame MUD = new DictFrame("WatzMud"); /* * STABLE */ @@ -297,7 +299,7 @@ public class OreDictManager { IRON.plate(plate_iron).dust(powder_iron).ore(ore_gneiss_iron); GOLD.plate(plate_gold).dust(powder_gold).ore(ore_gneiss_gold); LAPIS.dust(powder_lapis); - NETHERQUARTZ.gem(Items.quartz).dust(powder_quartz); + NETHERQUARTZ.gem(Items.quartz).dust(powder_quartz).ore(Blocks.quartz_ore); DIAMOND.dust(powder_diamond).ore(gravel_diamond); EMERALD.dust(powder_emerald); @@ -331,6 +333,7 @@ public class OreDictManager { SBD .rad(HazardRegistry.sb) .blinding(50F) .ingot(ingot_schrabidate) .dust(powder_schrabidate) .block(block_schrabidate); SRN .rad(HazardRegistry.sr) .blinding(50F) .ingot(ingot_schraranium) .block(block_schraranium); GH336 .rad(HazardRegistry.gh336) .nugget(nugget_gh336) .billet(billet_gh336) .ingot(ingot_gh336); + MUD .rad(HazardRegistry.mud) .ingot(ingot_mud); /* * STABLE diff --git a/src/main/java/com/hbm/inventory/RecipesCommon.java b/src/main/java/com/hbm/inventory/RecipesCommon.java index f26af74e1..2b1191f55 100644 --- a/src/main/java/com/hbm/inventory/RecipesCommon.java +++ b/src/main/java/com/hbm/inventory/RecipesCommon.java @@ -455,17 +455,41 @@ public class RecipesCommon { this.block = block; this.meta = meta; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + Block.blockRegistry.getNameForObject(block).hashCode(); + result = prime * result + meta; + return result; + } + + @Override + public boolean equals(Object obj) { + if(this == obj) + return true; + if(obj == null) + return false; + if(getClass() != obj.getClass()) + return false; + MetaBlock other = (MetaBlock) obj; + if(block == null) { + if(other.block != null) + return false; + } else if(!block.equals(other.block)) + return false; + if(meta != other.meta) + return false; + return true; + } public MetaBlock(Block block) { this(block, 0); } - public int getID() { - final int prime = 31; - int result = 1; - result = prime * result + Block.getIdFromBlock(block); - result = prime * result + meta; - return result; + @Deprecated public int getID() { + return hashCode(); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java b/src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java index a746904c8..41b30d98e 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java @@ -9,7 +9,6 @@ import api.hbm.energy.IBatteryItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -55,11 +54,6 @@ public class ContainerMachineCatalyticReformer extends Container { } } - @Override - public void addCraftingToCrafters(ICrafting crafting) { - super.addCraftingToCrafters(crafting); - } - @Override public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { ItemStack var3 = null; diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineCoker.java b/src/main/java/com/hbm/inventory/container/ContainerMachineCoker.java new file mode 100644 index 000000000..61ea7768e --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineCoker.java @@ -0,0 +1,73 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.tileentity.machine.oil.TileEntityMachineCoker; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineCoker extends Container { + + private TileEntityMachineCoker coker; + + public ContainerMachineCoker(InventoryPlayer invPlayer, TileEntityMachineCoker tedf) { + + coker = tedf; + + this.addSlotToContainer(new Slot(tedf, 0, 35, 72)); + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 1, 97, 27)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 122 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 180)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(par2 <= 1) { + if(!this.mergeItemStack(var5, 2, this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(var3.getItem() instanceof IItemFluidIdentifier) { + if(!this.mergeItemStack(var5, 0, 1, false)) { + return null; + } + } else { + return null; + } + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return coker.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineCoker.java b/src/main/java/com/hbm/inventory/gui/GUIMachineCoker.java new file mode 100644 index 000000000..a05678ed7 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineCoker.java @@ -0,0 +1,52 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineCoker; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.oil.TileEntityMachineCoker; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineCoker extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_coker.png"); + private TileEntityMachineCoker refinery; + + public GUIMachineCoker(InventoryPlayer invPlayer, TileEntityMachineCoker tedf) { + super(new ContainerMachineCoker(invPlayer, tedf)); + refinery = tedf; + + this.xSize = 176; + this.ySize = 204; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + refinery.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 35, guiTop + 18, 16, 52); + refinery.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 125, guiTop + 18, 16, 52); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.refinery.hasCustomInventoryName() ? this.refinery.getInventoryName() : I18n.format(this.refinery.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xC7C1A3); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + refinery.tanks[0].renderTank(guiLeft + 35, guiTop + 70, this.zLevel, 16, 52); + refinery.tanks[1].renderTank(guiLeft + 125, guiTop + 70, this.zLevel, 16, 52); + } +} diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index f6b839d9e..ffb7d3516 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -123,6 +123,7 @@ public class Mats { public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 9, CMB, 0x6F6FB4, 0x000011, 0x6F6FB4).setShapes(INGOT, DUST, PLATE, CASTPLATE, BLOCK); public static final NTMMaterial MAT_FLUX = makeAdditive(_AS + 10, df("Flux"), 0xF1E0BB, 0x6F6256, 0xDECCAD).setShapes(DUST); public static final NTMMaterial MAT_SLAG = makeSmeltable(_AS + 11, SLAG, 0x554940, 0x34281F, 0x6C6562).setShapes(BLOCK); + public static final NTMMaterial MAT_MUD = makeSmeltable(_AS + 14, MUD, 0xBCB5A9, 0x481213, 0x96783B).setShapes(INGOT); @Deprecated public static NTMMaterial makeSmeltable(int id, DictFrame dict, int color) { return makeSmeltable(id, dict, color, color, color); } @Deprecated public static NTMMaterial makeAdditive(int id, DictFrame dict, int color) { return makeAdditive(id, dict, color, color, color); } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 42f7bbb80..4a1c35fb4 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -292,15 +292,13 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.machine_turbinegas, 1), new AStack[] {new ComparableStack(ModItems.hull_big_steel, 4), new ComparableStack(ModItems.hull_small_steel, 6), new ComparableStack(ModItems.generator_steel, 2), new ComparableStack(ModItems.bolt_compound, 4), new ComparableStack(ModBlocks.steel_scaffold, 8), new ComparableStack(ModBlocks.deco_pipe_quad, 4), new ComparableStack(ModItems.turbine_tungsten, 3), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.ingot_rubber, 4), new ComparableStack(ModItems.circuit_red_copper, 3)}, 600); makeRecipe(new ComparableStack(ModBlocks.machine_teleporter, 1), new AStack[] {new OreDictStack(TI.ingot(), 8), new OreDictStack(ALLOY.plate528(), 12), new ComparableStack(ModItems.wire_gold, 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1) },300); makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_transmutator, 1), new AStack[] {new OreDictStack(MAGTUNG.ingot(), 1), new OreDictStack(TI.ingot(), 24), new OreDictStack(ALLOY.plate(), 18), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_desh, 6), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModBlocks.machine_battery, 5), new ComparableStack(ModItems.circuit_gold, 5), },500); - makeRecipe(new ComparableStack(ModBlocks.machine_combine_factory, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_PLASTIC.ingot(), 6), new OreDictStack(TI.plate(), 4), new OreDictStack(CU.plate(), 6), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.coil_advanced_alloy, 8), new ComparableStack(ModItems.coil_tungsten, 4), new OreDictStack(MAGTUNG.ingot(), 12), },150); makeRecipe(new ComparableStack(ModBlocks.fusion_conductor, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.coil_advanced_alloy, 5), },150); makeRecipe(new ComparableStack(ModBlocks.fusion_center, 1), new AStack[] {new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 6), new ComparableStack(ModItems.wire_advanced_alloy, 24), },200); makeRecipe(new ComparableStack(ModBlocks.fusion_motor, 1), new AStack[] {new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4), },250); makeRecipe(new ComparableStack(ModBlocks.fusion_heater, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate528(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.magnetron, 1), new ComparableStack(ModItems.wire_advanced_alloy, 4), },150); - makeRecipe(new ComparableStack(ModBlocks.watz_element, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.rod_empty, 2), new ComparableStack(ModItems.wire_magnetized_tungsten, 2), new ComparableStack(ModItems.wire_advanced_alloy, 4), },200); - makeRecipe(new ComparableStack(ModBlocks.watz_cooler, 1), new AStack[] {new OreDictStack(W.ingot(), 2), new OreDictStack(STEEL.ingot(), 2), new OreDictStack(KNO.dust(), 4), },300); + makeRecipe(new ComparableStack(ModBlocks.watz_element, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)},200); + makeRecipe(new ComparableStack(ModBlocks.watz_cooler, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2), }, 200); makeRecipe(new ComparableStack(ModBlocks.watz_end, 3), new AStack[] {new OreDictStack(ANY_RESISTANTALLOY.plateTriple()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plate(), 9), }, 100); - makeRecipe(new ComparableStack(ModBlocks.watz_core, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.circuit_gold, 5), new ComparableStack(ModItems.circuit_schrabidium, 2), new ComparableStack(ModItems.wire_magnetized_tungsten, 12), },350); makeRecipe(new ComparableStack(ModBlocks.fwatz_hatch, 1), new AStack[] {new OreDictStack(W.ingot(), 6), new OreDictStack(CMB.plate(), 4), },250); makeRecipe(new ComparableStack(ModBlocks.fwatz_conductor, 1), new AStack[] {new OreDictStack(CMB.plate(), 2), new ComparableStack(ModItems.coil_magnetized_tungsten, 5), },250); makeRecipe(new ComparableStack(ModBlocks.fwatz_computer, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.wire_magnetized_tungsten, 16), new OreDictStack(DIAMOND.dust(), 6), new OreDictStack(MAGTUNG.dust(), 6), new OreDictStack(DESH.dust(), 4), },300); diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index 3569d3c52..992ed2e3e 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -20,6 +20,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.items.special.ItemByproduct.EnumByproduct; import com.hbm.main.MainRegistry; @@ -134,6 +135,73 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.nugget_pu238, 1), new ItemStack(ModItems.nugget_technetium, 1), new ItemStack(ModItems.nuclear_waste_tiny, 6) }); + + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.SCHRABIDIUM)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 15), + new ItemStack(ModItems.nugget_euphemium, 3), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HES)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 17), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MES)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 12), + new ItemStack(ModItems.nugget_tantalium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LES)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 9), + new ItemStack(ModItems.nugget_tantalium, 9), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HEN)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_technetium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEU)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEP)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_pu241, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LEAD)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_lead, 6), + new ItemStack(ModItems.nugget_bismuth, 12), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.BORON)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.powder_coal_tiny, 12), + new ItemStack(ModItems.nugget_co60, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.DU)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_polonium, 12), + new ItemStack(ModItems.nugget_pu238, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + + if(OreDictionary.doesOreNameExist("nuggetNaquadria")) { + ItemStack nuggetNQR = OreDictionary.getOres("nuggetNaquadria").get(0); + ItemStack copy = nuggetNQR.copy(); + copy.stackSize = 12; + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.NQD)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + copy, + new ItemStack(ModItems.nugget_euphemium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.NQR)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_co60, 12), + new ItemStack(ModItems.nugget_euphemium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + } recipes.put(new ComparableStack(ModItems.powder_cloud), new ItemStack[] { new ItemStack(ModItems.powder_copper, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java index 42f2dc872..9fa52a29e 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java @@ -96,6 +96,10 @@ public class CrucibleRecipes extends SerializableRecipe { .inputs(new MaterialStack(Mats.MAT_STEEL, n * 8), new MaterialStack(Mats.MAT_CADMIUM, n)) .outputs(new MaterialStack(Mats.MAT_CDALLOY, i))); + recipes.add(new CrucibleRecipe(13, "crucible.cmb", 3, new ItemStack(ModItems.ingot_combine_steel)) + .inputs(new MaterialStack(Mats.MAT_MAGTUNG, n * 6), new MaterialStack(Mats.MAT_MUD, n * 3)) + .outputs(new MaterialStack(Mats.MAT_CMB, i))); + registerMoldsForNEI(); } diff --git a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java index 05385ff54..91940bef6 100644 --- a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java @@ -66,6 +66,7 @@ public class SolidificationRecipes extends SerializableRecipe { registerRecipe(BIOGAS, 250, ModItems.biomass_compressed); registerRecipe(SALIENT, 1280, new ItemStack(ModItems.bio_wafer, 8)); //4 (food val) * 2 (sat mod) * 2 (constant) * 10 (quanta) * 8 (batch size) registerRecipe(ENDERJUICE, 100, Items.ender_pearl); + registerRecipe(WATZ, 1000, ModItems.ingot_mud); registerRecipe(OIL, SF_OIL, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRUDE)); registerRecipe(CRACKOIL, SF_CRACK, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRACK)); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 0e6b7eba3..5c61a95a9 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -359,6 +359,7 @@ public class ModItems { public static Item ingot_cadmium; public static Item powder_cadmium; public static Item powder_bismuth; + public static Item ingot_mud; public static Item ingot_lanthanium; public static Item ingot_actinium; @@ -2651,6 +2652,7 @@ public class ModItems { ingot_cadmium = new Item().setUnlocalizedName("ingot_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cadmium"); powder_cadmium = new Item().setUnlocalizedName("powder_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cadmium"); powder_bismuth = new Item().setUnlocalizedName("powder_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bismuth"); + ingot_mud = new Item().setUnlocalizedName("ingot_mud").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_mud"); ore_byproduct = new ItemByproduct().setUnlocalizedName("ore_byproduct").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":byproduct"); @@ -5541,6 +5543,7 @@ public class ModItems { //GameRegistry.registerItem(ingot_pet, ingot_pet.getUnlocalizedName()); GameRegistry.registerItem(ingot_pc, ingot_pc.getUnlocalizedName()); GameRegistry.registerItem(ingot_pvc, ingot_pvc.getUnlocalizedName()); + GameRegistry.registerItem(ingot_mud, ingot_mud.getUnlocalizedName()); GameRegistry.registerItem(ingot_schraranium, ingot_schraranium.getUnlocalizedName()); GameRegistry.registerItem(ingot_schrabidium, ingot_schrabidium.getUnlocalizedName()); GameRegistry.registerItem(ingot_schrabidate, ingot_schrabidate.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/block/ItemBlockBase.java b/src/main/java/com/hbm/items/block/ItemBlockBase.java index 04823443b..e04959cff 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockBase.java +++ b/src/main/java/com/hbm/items/block/ItemBlockBase.java @@ -2,12 +2,11 @@ package com.hbm.items.block; import java.util.List; -import com.hbm.blocks.BlockEnumMulti; +import com.hbm.blocks.BlockMulti; import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.IPersistentInfoProvider; import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.IPersistentNBT; -import com.hbm.util.EnumUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -41,10 +40,8 @@ public class ItemBlockBase extends ItemBlock { @Override public String getUnlocalizedName(ItemStack stack) { - if(field_150939_a instanceof BlockEnumMulti && ((BlockEnumMulti)field_150939_a).multiName) { - - Enum num = EnumUtil.grabEnumSafely(((BlockEnumMulti)field_150939_a).theEnum, stack.getItemDamage()); - return super.getUnlocalizedName() + "." + num.name().toLowerCase(); + if(field_150939_a instanceof BlockMulti) { + return ((BlockMulti)field_150939_a).getUnlocalizedName(stack); } else { return super.getUnlocalizedName(stack); } diff --git a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java index 0b782df9d..be5e0ad7f 100644 --- a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java @@ -36,18 +36,18 @@ public class ItemWatzPellet extends ItemEnumMulti { public static enum EnumWatzType { - SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 10D, new FunctionLogarithmic(10), null, null), - HES( 0x66DCD6, 0x023933, 1_500, 10D, null, null, null), - MES( 0xCBEADF, 0x28473C, 1_000, 10D, null, null, null), - LES( 0xABB4A8, 0x0C1105, 500, 10D, null, null, null), - HEN( 0xA6B2A6, 0x030F03, 0, 10D, null, null, null), - MEU( 0xC1C7BD, 0x2B3227, 0, 10D, null, null, null), - MEP( 0x9AA3A0, 0x111A17, 0, 10D, null, null, null), - LEAD( 0xA6A6B2, 0x03030F, 0, 0, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient - BORON( 0xBDC8D2, 0x29343E, 0, 0, null, null, new FunctionLinear(10)), //improved absorber, linear - DU( 0xC1C7BD, 0x2B3227, 0, 0, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient - NQD( 0x4B4B4B, 0x121212, 0, 0, null, null, null), - NQR( 0x2D2D2D, 0x0B0B0B, 0, 0, null, null, null); + SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 20D, 0.01D, new FunctionLinear(1.5D), new FunctionSqrtFalling(10D), null), + HES( 0x66DCD6, 0x023933, 1_750, 20D, 0.005D, new FunctionLinear(1.25D), new FunctionSqrtFalling(15D), null), + MES( 0xCBEADF, 0x28473C, 1_500, 15D, 0.0025D, new FunctionLinear(1.15D), new FunctionSqrtFalling(15D), null), + LES( 0xABB4A8, 0x0C1105, 1_250, 15D, 0.00125D, new FunctionLinear(1D), new FunctionSqrtFalling(20D), null), + HEN( 0xA6B2A6, 0x030F03, 0, 10D, 0.0005D, new FunctionSqrt(100), new FunctionSqrtFalling(10D), null), + MEU( 0xC1C7BD, 0x2B3227, 0, 10D, 0.0005D, new FunctionSqrt(75), new FunctionSqrtFalling(10D), null), + MEP( 0x9AA3A0, 0x111A17, 0, 15D, 0.0005D, new FunctionSqrt(150), new FunctionSqrtFalling(10D), null), + LEAD( 0xA6A6B2, 0x03030F, 0, 0, 0.0025D, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient + BORON( 0xBDC8D2, 0x29343E, 0, 0, 0.0025D, null, null, new FunctionLinear(10)), //improved absorber, linear + DU( 0xC1C7BD, 0x2B3227, 0, 0, 0.0025D, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient + NQD( 0x4B4B4B, 0x121212, 2_000, 20, 0.01D, new FunctionLinear(2D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null), + NQR( 0x2D2D2D, 0x0B0B0B, 2_500, 30, 0.01D, new FunctionLinear(1.5D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null); public double yield = 1_000_000_000; public int colorLight; @@ -56,16 +56,17 @@ public class ItemWatzPellet extends ItemEnumMulti { public double passive; //base flux emission public double heatEmission; //reactivity(1) to heat (heat per outgoing flux) public Function burnFunc; //flux to reactivity(0) (classic reactivity) - public Function heatMult; //reactivity(0) to reactivity(1) based on heat (temperature coefficient) + public Function heatDiv; //reactivity(0) to reactivity(1) based on heat (temperature coefficient) public Function absorbFunc; //flux to heat (flux absobtion for non-active component) - private EnumWatzType(int colorLight, int colorDark, double passive, double heatEmission, Function burnFunction, Function heatMultiplier, Function absorbFunction) { + private EnumWatzType(int colorLight, int colorDark, double passive, double heatEmission, double mudContent, Function burnFunction, Function heatDivisor, Function absorbFunction) { this.colorLight = colorLight; this.colorDark = colorDark; this.passive = passive; this.heatEmission = heatEmission; + this.mudContent = mudContent; this.burnFunc = burnFunction; - this.heatMult = heatMultiplier; + this.heatDiv = heatDivisor; this.absorbFunc = absorbFunction; } } @@ -122,6 +123,9 @@ public class ItemWatzPellet extends ItemEnumMulti { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + if(this != ModItems.watz_pellet) return; + EnumWatzType num = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); list.add(EnumChatFormatting.GREEN + "Depletion: " + String.format(Locale.US, "%.1f", getDurabilityForDisplay(stack) * 100D) + "%"); @@ -129,19 +133,22 @@ public class ItemWatzPellet extends ItemEnumMulti { String color = EnumChatFormatting.GOLD + ""; String reset = EnumChatFormatting.RESET + ""; - if(num.passive > 0) list.add(color + "Base fission rate: " + reset + num.passive); + if(num.passive > 0){ + list.add(color + "Base fission rate: " + reset + num.passive); + list.add(EnumChatFormatting.RED + "Self-igniting!"); + } if(num.heatEmission > 0) list.add(color + "Heat per flux: " + reset + num.heatEmission + " TU"); if(num.burnFunc != null) { list.add(color + "Reacton function: " + reset + num.burnFunc.getLabelForFuel()); list.add(color + "Fuel type: " + reset + num.burnFunc.getDangerFromFuel()); } - if(num.heatMult != null) list.add(color + "Thermal coefficient: " + reset + num.heatMult.getLabelForFuel()); + if(num.heatDiv != null) list.add(color + "Thermal multiplier: " + reset + num.heatDiv.getLabelForFuel() + " TU⁻¹"); if(num.absorbFunc != null) list.add(color + "Flux capture: " + reset + num.absorbFunc.getLabelForFuel()); } @Override public boolean showDurabilityBar(ItemStack stack) { - return getDurabilityForDisplay(stack) > 0D; + return this == ModItems.watz_pellet && getDurabilityForDisplay(stack) > 0D; } @Override @@ -180,6 +187,7 @@ public class ItemWatzPellet extends ItemEnumMulti { @Override public void onCreated(ItemStack stack, World world, EntityPlayer player) { + if(this != ModItems.watz_pellet) return; setNBTDefaults(stack); //minimize the window where NBT screwups can happen } } diff --git a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java index cb200d6ec..172e0fa4a 100644 --- a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java +++ b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java @@ -31,6 +31,8 @@ public class ItemBlowtorch extends Item implements IFillableItem { this.setMaxStackSize(1); this.setFull3D(); this.setCreativeTab(MainRegistry.controlTab); + + ToolType.TORCH.register(new ItemStack(this)); } @Override diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index e0c1e0999..a4ef287f3 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -1,12 +1,16 @@ package com.hbm.items.tool; +import com.hbm.blocks.ModBlocks; import com.hbm.items.IAnimatedItem; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.util.EntityDamageUtil; import api.hbm.block.IToolable; import api.hbm.block.IToolable.ToolType; @@ -14,11 +18,13 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -26,6 +32,9 @@ public class ItemBoltgun extends Item implements IAnimatedItem { public ItemBoltgun() { this.setMaxStackSize(1); + this.setCreativeTab(MainRegistry.controlTab); + + ToolType.BOLT.register(new ItemStack(this)); } @Override @@ -34,6 +43,48 @@ public class ItemBoltgun extends Item implements IAnimatedItem { this.setTextureName(RefStrings.MODID + ":"+ unlocalizedName); return this; } + + @Override + public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { + + World world = player.worldObj; + if(!entity.isEntityAlive()) return false; + + Item[] bolts = new Item[] { ModItems.bolt_dura_steel, ModItems.bolt_tungsten, Item.getItemFromBlock(ModBlocks.steel_beam) }; + + for(Item item : bolts) { + for(int i = 0; i < player.inventory.getSizeInventory(); i++) { + ItemStack slot = player.inventory.getStackInSlot(i); + + if(slot != null) { + if(slot.getItem() == item) { + if(!world.isRemote) { + world.playSoundAtEntity(entity, "hbm:item.boltgun", 1.0F, 1.0F); + player.inventory.decrStackSize(i, 1); + player.inventoryContainer.detectAndSendChanges(); + EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, DamageSource.causePlayerDamage(player).setDamageBypassesArmor(), 10F); + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaExt"); + data.setString("mode", "largeexplode"); + data.setFloat("size", 1F); + data.setByte("count", (byte)1); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, entity.posX, entity.posY + entity.height / 2 - entity.yOffset, entity.posZ), new TargetPoint(world.provider.dimensionId, entity.posX, entity.posY, entity.posZ, 50)); + } else { + // doing this on the client outright removes the packet delay and makes the animation silky-smooth + NBTTagCompound d0 = new NBTTagCompound(); + d0.setString("type", "anim"); + d0.setString("mode", "generic"); + MainRegistry.proxy.effectNT(d0); + } + return true; + } + } + } + } + + return false; + } @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { @@ -43,7 +94,8 @@ public class ItemBoltgun extends Item implements IAnimatedItem { if(b instanceof IToolable && ((IToolable)b).onScrew(world, player, x, y, z, side, fX, fY, fZ, ToolType.BOLT)) { if(!world.isRemote) { - + + world.playSoundAtEntity(player, "hbm:item.boltgun", 1.0F, 1.0F); player.inventoryContainer.detectAndSendChanges(); ForgeDirection dir = ForgeDirection.getOrientation(side); double off = 0.25; diff --git a/src/main/java/com/hbm/items/tool/ItemTooling.java b/src/main/java/com/hbm/items/tool/ItemTooling.java index f0c4119da..58bfd687a 100644 --- a/src/main/java/com/hbm/items/tool/ItemTooling.java +++ b/src/main/java/com/hbm/items/tool/ItemTooling.java @@ -18,6 +18,8 @@ public class ItemTooling extends ItemCraftingDegradation { this.type = type; this.setFull3D(); this.setCreativeTab(MainRegistry.controlTab); + + type.register(new ItemStack(this)); } @Override diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java index 507b1a603..347570496 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBase.java @@ -690,7 +690,9 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEqu GunConfiguration gcfg = gun.mainConfig; if(type == ElementType.HOTBAR) { - BulletConfiguration bcfg = BulletConfigSyncingUtil.pullConfig(gun.mainConfig.config.get(ItemGunBase.getMagType(stack))); + int mag = ItemGunBase.getMagType(stack); + if(gun.mainConfig.config.size() == 0) return; + BulletConfiguration bcfg = BulletConfigSyncingUtil.pullConfig(gun.mainConfig.config.get(mag < gun.mainConfig.config.size() ? mag : 0)); if(bcfg == null) { return; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 3eb20ac61..0a206e0f1 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4562)"; + public static final String VERSION = "1.0.27 BETA (4578)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index f0b062205..baadb5428 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -366,7 +366,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.mechanism_launcher_1, 1), new Object[] { "TTT", "SSS", "BBI", 'T', TI.plate(), 'S', STEEL.ingot(), 'B', ModItems.bolt_tungsten, 'I', MINGRADE.ingot() }); addRecipeAuto(new ItemStack(ModItems.mechanism_launcher_2, 1), new Object[] { "TTT", "SSS", "BBI", 'T', ALLOY.plate(), 'S', ANY_PLASTIC.ingot(), 'B', ModItems.bolt_dura_steel, 'I', DESH.ingot() }); addRecipeAuto(new ItemStack(ModItems.mechanism_special, 1), new Object[] { "PCI", "ISS", "PCI", 'P', ModItems.plate_desh, 'C', ModItems.coil_advanced_alloy, 'I', STAR.ingot(), 'S', ModItems.circuit_targeting_tier3 }); - + + addRecipeAuto(new ItemStack(ModBlocks.watz_pump, 1), new Object[] { "MPM", "PCP", "PSP", 'M', ModItems.motor_desh, 'P', ANY_RESISTANTALLOY.plateTriple(), 'C', KEY_CIRCUIT_BISMUTH, 'S', ModItems.pipes_steel }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.fwatz_cooler), 1), new Object[] { "IPI", "IPI", "IPI", 'I', TI.ingot(), 'P', TI.plate() }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.fwatz_tank), 1), new Object[] { "CGC", "GGG", "CGC", 'C', CMB.plate(), 'G', KEY_ANYPANE }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.fwatz_scaffold), 1), new Object[] { "IPI", "P P", "IPI", 'I', W.ingot(), 'P', getReflector() }); @@ -765,6 +766,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.barrel_antimatter, 1), new Object[] { "IPI", "IBI", "IPI", 'I', BIGMT.plate(), 'P', ModItems.coil_advanced_torus, 'B', ModItems.battery_sc_technetium }); addRecipeAuto(new ItemStack(ModBlocks.tesla, 1), new Object[] { "CCC", "PIP", "WTW", 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'P', ANY_PLASTIC.ingot(), 'T', ModBlocks.machine_transformer, 'W', KEY_PLANKS }); addRecipeAuto(new ItemStack(ModBlocks.struct_plasma_core, 1), new Object[] { "CBC", "BHB", "CBC", 'C', ModItems.circuit_gold, 'B', ModBlocks.machine_lithium_battery, 'H', ModBlocks.fusion_heater }); + addRecipeAuto(new ItemStack(ModBlocks.struct_watz_core, 1), new Object[] { "CBC", "BHB", "CBC", 'C', ModItems.circuit_schrabidium, 'B', ANY_RESISTANTALLOY.plateTriple(), 'H', ModBlocks.watz_cooler }); addShapelessAuto(new ItemStack(ModBlocks.fusion_heater), new Object[] { ModBlocks.fusion_hatch }); addShapelessAuto(new ItemStack(ModItems.energy_core), new Object[] { ModItems.fusion_core, ModItems.fuse }); addRecipeAuto(new ItemStack(ModItems.catalytic_converter, 1), new Object[] { "PCP", "PBP", "PCP", 'P', ANY_HARDPLASTIC.ingot(), 'C', CO.dust(), 'B', BI.ingot() }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 17d3dae1f..6e1e381e5 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -46,8 +46,10 @@ import com.google.common.collect.ImmutableList; import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockMotherOfAllOres; +import com.hbm.blocks.generic.BlockToolConversion; import com.hbm.commands.CommandReloadRecipes; import com.hbm.config.*; +import com.hbm.crafting.RodRecipes; import com.hbm.creativetabs.*; import com.hbm.entity.EntityMappings; import com.hbm.entity.grenade.*; @@ -636,6 +638,8 @@ public class MainRegistry { @EventHandler public static void load(FMLInitializationEvent event) { + + RodRecipes.registerInit(); achSacrifice = new Achievement("achievement.sacrifice", "sacrifice", -3, 1, ModItems.burnt_bark, null).initIndependentStat().setSpecial().registerStat(); achImpossible = new Achievement("achievement.impossible", "impossible", 18, 10, ModItems.nothing, null).initIndependentStat().setSpecial().registerStat(); @@ -829,6 +833,7 @@ public class MainRegistry { HazmatRegistry.registerHazmats(); FluidContainerRegistry.register(); TileEntityMachineReactorLarge.registerAll(); + BlockToolConversion.registerRecipes(); proxy.registerMissileItems(); diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 29e4cc9de..bbfea592a 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -53,6 +53,8 @@ public class NEIConfig implements IConfigureNEI { registerHandler(new CrucibleSmeltingHandler()); registerHandler(new CrucibleAlloyingHandler()); registerHandler(new CrucibleCastingHandler()); + registerHandler(new ToolingHandler()); + registerHandler(new ConstructionHandler()); //universal boyes registerHandler(new ZirnoxRecipeHandler()); diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java b/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java index 8bc74b359..69c387e22 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java @@ -29,7 +29,7 @@ public class RenderShrapnel extends Render { bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/entity/shrapnel.png")); if(rocket instanceof EntityShrapnel) { - if(rocket.getDataWatcher().getWatchableObjectByte(16) == 2) { //scale up lava blobs + if(rocket.getDataWatcher().getWatchableObjectByte(16) >= 2) { //scale up lava blobs GL11.glScaled(3, 3, 3); } } diff --git a/src/main/java/com/hbm/render/item/ItemRenderBoltgun.java b/src/main/java/com/hbm/render/item/ItemRenderBoltgun.java index 6ab331111..64d8831e1 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderBoltgun.java +++ b/src/main/java/com/hbm/render/item/ItemRenderBoltgun.java @@ -6,6 +6,7 @@ import com.hbm.main.ResourceManager; import com.hbm.render.anim.HbmAnimations; import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.client.IItemRenderer; @@ -33,6 +34,8 @@ public class ItemRenderBoltgun implements IItemRenderer { GL11.glPushMatrix(); + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + GL11.glEnable(GL11.GL_CULL_FACE); GL11.glShadeModel(GL11.GL_SMOOTH); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.boltgun_tex); @@ -50,6 +53,7 @@ public class ItemRenderBoltgun implements IItemRenderer { GL11.glPushMatrix(); double[] anim = HbmAnimations.getRelevantTransformation("RECOIL"); GL11.glTranslated(0, 0, -anim[0]); + if(anim[0] != 0) player.isSwingInProgress = false; ResourceManager.boltgun.renderPart("Barrel"); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderWatzMultiblock.java b/src/main/java/com/hbm/render/tileentity/RenderWatzMultiblock.java index 973029bf9..51159d7bc 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderWatzMultiblock.java +++ b/src/main/java/com/hbm/render/tileentity/RenderWatzMultiblock.java @@ -44,15 +44,15 @@ public class RenderWatzMultiblock extends TileEntitySpecialRenderer { SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, 1F, i, -2F); SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, -1F, i, -2F); for(int j = -1; j < 2; j++) { - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, 3F, i, j); - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, j, i, 3F); - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, -3F, i, j); - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, j, i, -3F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, 3F, i, j); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, j, i, 3F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, -3F, i, j); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, j, i, -3F); } - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, 2F, i, 2F); - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, 2F, i, -2F); - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, -2F, i, 2F); - SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, -2F, i, -2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, 2F, i, 2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, 2F, i, -2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, -2F, i, 2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 1, -2F, i, -2F); } SmallBlockPronter.draw(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 6ee9c5d3b..bc44e2653 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -23,6 +23,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CrucibleUtil; +import api.hbm.block.ICrucibleAcceptor; import api.hbm.tile.IHeatSource; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -41,7 +42,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, IConfigurableMachine { +public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine { public int heat; public int progress; @@ -529,4 +530,57 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + CrucibleRecipe recipe = getLoadedRecipe(); + + if(recipe == null) { + return getQuantaFromType(this.wasteStack, null) < this.wasteZCapacity; + } + + int recipeContent = recipe.getInputAmount(); + int recipeInputRequired = getQuantaFromType(recipe.input, stack.material); + int matMaximum = recipeInputRequired * this.recipeZCapacity / recipeContent; + int amountStored = getQuantaFromType(recipeStack, stack.material); + + return amountStored < matMaximum; + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + CrucibleRecipe recipe = getLoadedRecipe(); + + if(recipe == null) { + + int amount = getQuantaFromType(this.wasteStack, null); + + if(amount + stack.amount <= this.wasteZCapacity) { + this.addToStack(this.wasteStack, stack.copy()); + return null; + } else { + int toAdd = this.wasteZCapacity - amount; + this.addToStack(this.wasteStack, new MaterialStack(stack.material, toAdd)); + return new MaterialStack(stack.material, stack.amount - toAdd); + } + } + + int recipeContent = recipe.getInputAmount(); + int recipeInputRequired = getQuantaFromType(recipe.input, stack.material); + int matMaximum = recipeInputRequired * this.recipeZCapacity / recipeContent; + + if(recipeInputRequired + stack.amount <= matMaximum) { + this.addToStack(this.recipeStack, stack.copy()); + return null; + } + + int toAdd = matMaximum - stack.amount; + this.addToStack(this.recipeStack, new MaterialStack(stack.material, toAdd)); + return new MaterialStack(stack.material, stack.amount - toAdd); + } + + @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } + @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 4b8bc95e3..4f1124f8e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -2,8 +2,11 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; +import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.entity.projectile.EntityShrapnel; +import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerWatz; import com.hbm.inventory.fluid.Fluids; @@ -14,6 +17,9 @@ import com.hbm.inventory.gui.GUIWatz; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemWatzPellet; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; @@ -22,10 +28,13 @@ import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.function.Function; import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -126,6 +135,29 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } segments.get(segments.size() - 1).sendOutBottom(); + + /* explode on mud overflow */ + if(sharedTanks[2].getFill() > 0) { + for(int x = -3; x <= 3; x++) { + for(int y = 3; y < 6; y++) { + for(int z = -3; z <= 3; z++) { + worldObj.setBlock(xCoord + x, yCoord + y, zCoord + z, Blocks.air); + } + } + } + this.disassemble(); + + ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord + 1, zCoord, 1_000F); + + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 2, zCoord + 0.5, "hbm:block.rbmk_explosion", 50.0F, 1.0F); + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "rbmkmush"); + data.setFloat("scale", 5); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5, yCoord + 2, zCoord + 0.5), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 250)); + MainRegistry.proxy.effectNT(data); + + return; + } } } @@ -137,7 +169,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand public void updateCoolant(FluidTank[] tanks) { - double coolingFactor = 0.05D; //20% per tick, TEMP + double coolingFactor = 0.1D; //10% per tick, TEMP double heatToUse = this.heat * coolingFactor; FT_Heatable trait = tanks[0].getTankType().getTrait(FT_Heatable.class); @@ -181,11 +213,11 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand for(ItemStack stack : pellets) { EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); Function burnFunc = type.burnFunc; - Function heatMod = type.heatMult; + Function heatDiv = type.heatDiv; if(burnFunc != null) { - double mod = heatMod != null ? heatMod.effonix(heat) : 1D; - double burn = burnFunc.effonix(inputFlux) * mod; + double div = heatDiv != null ? heatDiv.effonix(heat) : 1D; + double burn = burnFunc.effonix(inputFlux) / div; ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - burn); addedFlux += burn; addedHeat += type.heatEmission * burn; @@ -198,7 +230,10 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand Function absorbFunc = type.absorbFunc; if(absorbFunc != null) { - addedHeat += absorbFunc.effonix(baseFlux + fluxLastReaction); + double absorb = absorbFunc.effonix(baseFlux + fluxLastReaction); + addedHeat += absorb; + ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - absorb); + tanks[2].setFill(tanks[2].getFill() + (int) Math.round(type.mudContent * absorb)); } } @@ -212,17 +247,21 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } + for(int i = 0; i < 24; i++) { + ItemStack stack = slots[i]; + + /* deplete */ + if(stack != null && stack.getItem() == ModItems.watz_pellet && ItemWatzPellet.getEnrichment(stack) <= 0) { + slots[i] = new ItemStack(ModItems.watz_pellet_depleted, 1, stack.getItemDamage()); + continue; // depleted pellets may persist for one tick + } + } + if(above != null) { for(int i = 0; i < 24; i++) { ItemStack stackBottom = slots[i]; ItemStack stackTop = above.slots[i]; - /* deplete */ - if(stackBottom != null && stackBottom.getItem() == ModItems.watz_pellet && ItemWatzPellet.getYield(stackBottom) <= 0) { - slots[i] = new ItemStack(ModItems.watz_pellet_depleted, 1, stackBottom.getItemDamage()); - continue; // depleted pellets may persist for one tick - } - /* items fall down if the bottom slot is empty */ if(stackBottom == null && stackTop != null) { slots[i] = stackTop.copy(); @@ -309,6 +348,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } for(int i = 0; i < tanks.length; i++) tanks[i].readFromNBT(nbt, "t" + i); + this.heat = nbt.getInteger("heat"); this.fluxLastBase = nbt.getDouble("lastFluxB"); this.fluxLastReaction = nbt.getDouble("lastFluxR"); @@ -332,6 +372,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand nbt.setTag("locks", list); for(int i = 0; i < tanks.length; i++) tanks[i].writeToNBT(nbt, "t" + i); + nbt.setInteger("heat", this.heat); nbt.setDouble("lastFluxB", fluxLastBase); nbt.setDouble("lastFluxR", fluxLastReaction); @@ -402,6 +443,73 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand return bb; } + private void disassemble() { + + int count = 20; + Random rand = worldObj.rand; + for(int i = 0; i < count * 5; i++) { + EntityShrapnel shrapnel = new EntityShrapnel(worldObj); + shrapnel.posX = xCoord + 0.5; + shrapnel.posY = yCoord + 3; + shrapnel.posZ = zCoord + 0.5; + shrapnel.motionY = ((rand.nextFloat() * 0.5) + 0.5) * (1 + (count / (15 + rand.nextInt(21)))) + (rand.nextFloat() / 50 * count); + shrapnel.motionX = rand.nextGaussian() * 1 * (1 + (count / 100)); + shrapnel.motionZ = rand.nextGaussian() * 1 * (1 + (count / 100)); + shrapnel.setWatz(true); + worldObj.spawnEntityInWorld(shrapnel); + } + + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.mud_block); + worldObj.setBlock(xCoord, yCoord + 1, zCoord, ModBlocks.mud_block); + worldObj.setBlock(xCoord, yCoord + 2, zCoord, ModBlocks.mud_block); + + setBrokenColumn(0, ModBlocks.watz_element, 0, 1, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, 2, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, 1); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, 2); + setBrokenColumn(0, ModBlocks.watz_element, 0, -1, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, -2, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, -1); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, -2); + setBrokenColumn(0, ModBlocks.watz_element, 0, 1, 1); + setBrokenColumn(0, ModBlocks.watz_element, 0, 1, -1); + setBrokenColumn(0, ModBlocks.watz_element, 0, -1, 1); + setBrokenColumn(0, ModBlocks.watz_element, 0, -1, -1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 2, 1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 2, -1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 1, 2); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -1, 2); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -2, 1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -2, -1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 1, -2); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -1, -2); + + for(int j = -1; j < 2; j++) { + setBrokenColumn(1, ModBlocks.watz_end, 1, 3, j); + setBrokenColumn(1, ModBlocks.watz_end, 1, j, 3); + setBrokenColumn(1, ModBlocks.watz_end, 1, -3, j); + setBrokenColumn(1, ModBlocks.watz_end, 1, j, -3); + } + setBrokenColumn(1, ModBlocks.watz_end, 1, 2, 2); + setBrokenColumn(1, ModBlocks.watz_end, 1, 2, -2); + setBrokenColumn(1, ModBlocks.watz_end, 1, -2, 2); + setBrokenColumn(1, ModBlocks.watz_end, 1, -2, -2); + } + + private void setBrokenColumn(int minHeight, Block b, int meta, int x, int z) { + + int height = minHeight + worldObj.rand.nextInt(3 - minHeight); + + for(int i = 0; i < 3; i++) { + + if(i <= height) { + worldObj.setBlock(xCoord + x, yCoord + i, zCoord + z, b, meta, 3); + } else { + worldObj.setBlock(xCoord + x, yCoord + i, zCoord + z, ModBlocks.mud_block); + } + } + } + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatzStruct.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatzStruct.java index f363b5945..e3bb5f800 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatzStruct.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatzStruct.java @@ -49,20 +49,20 @@ public class TileEntityWatzStruct extends TileEntity { if(!cbr(ModBlocks.watz_cooler, -1, i, -2)) return; for(int j = -1; j < 2; j++) { - if(!cbr(ModBlocks.watz_end, 3, i, j)) return; - if(!cbr(ModBlocks.watz_end, j, i, 3)) return; - if(!cbr(ModBlocks.watz_end, -3, i, j)) return; - if(!cbr(ModBlocks.watz_end, j, i, -3)) return; + if(!cbr(ModBlocks.watz_end, 1, 3, i, j)) return; + if(!cbr(ModBlocks.watz_end, 1, j, i, 3)) return; + if(!cbr(ModBlocks.watz_end, 1, -3, i, j)) return; + if(!cbr(ModBlocks.watz_end, 1, j, i, -3)) return; } - if(!cbr(ModBlocks.watz_end, 2, i, 2)) return; - if(!cbr(ModBlocks.watz_end, 2, i, -2)) return; - if(!cbr(ModBlocks.watz_end, -2, i, 2)) return; - if(!cbr(ModBlocks.watz_end, -2, i, -2)) return; + if(!cbr(ModBlocks.watz_end, 1, 2, i, 2)) return; + if(!cbr(ModBlocks.watz_end, 1, 2, i, -2)) return; + if(!cbr(ModBlocks.watz_end, 1, -2, i, 2)) return; + if(!cbr(ModBlocks.watz_end, 1, -2, i, -2)) return; } Watz watz = (Watz)ModBlocks.watz; BlockDummyable.safeRem = true; - worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.watz, this.getBlockMetadata() + BlockDummyable.offset, 3); + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.watz, 12, 3); watz.fillSpace(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, 0); BlockDummyable.safeRem = false; } @@ -72,10 +72,18 @@ public class TileEntityWatzStruct extends TileEntity { return worldObj.getBlock(xCoord + x, yCoord + y, zCoord + z); } + /** [G]et [M]eta at [R]elative position */ + private int gmr(int x, int y, int z) { + return worldObj.getBlockMetadata(xCoord + x, yCoord + y, zCoord + z); + } + /** [C]heck [B]lock at [R]elative position */ private boolean cbr(Block b, int x, int y, int z) { return b == gbr(x, y, z); } + private boolean cbr(Block b, int meta, int x, int y, int z) { + return b == gbr(x, y, z) && meta == gmr(x, y, z); + } AxisAlignedBB bb = null; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java new file mode 100644 index 000000000..00d05c2ff --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java @@ -0,0 +1,64 @@ +package com.hbm.tileentity.machine.oil; + +import com.hbm.inventory.container.ContainerMachineCoker; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineCoker; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; + +import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.world.World; + +public class TileEntityMachineCoker extends TileEntityMachineBase implements IFluidStandardTransceiver, IGUIProvider { + + public FluidTank[] tanks; + + public TileEntityMachineCoker() { + super(1); + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(Fluids.HEAVYOIL, 16_000); + tanks[1] = new FluidTank(Fluids.GAS, 8_000); + } + + @Override + public String getName() { + return "container.machineCoker"; + } + + @Override + public void updateEntity() { + + } + + @Override + public FluidTank[] getAllTanks() { + return tanks; + } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { tanks[1] }; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] { tanks[0] }; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerMachineCoker(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIMachineCoker(player.inventory, this); + } +} diff --git a/src/main/java/com/hbm/util/function/Function.java b/src/main/java/com/hbm/util/function/Function.java index c9825d3e4..544328e5c 100644 --- a/src/main/java/com/hbm/util/function/Function.java +++ b/src/main/java/com/hbm/util/function/Function.java @@ -27,8 +27,8 @@ public abstract class Function { public String getXName(boolean brackets) { String x = "x"; boolean mod = false; - if(div != 1D) x += " / " + div; - if(off != 0D) x += " + " + off; + if(div != 1D) x += " / " + String.format("%,.1f", div); + if(off != 0D) x += " + " + String.format("%,.1f", off); if(mod && brackets) x = "(" + x + ")"; return x; } @@ -46,28 +46,35 @@ public abstract class Function { public static class FunctionLogarithmic extends FunctionSingleArg { public FunctionLogarithmic(double level) { super(level); this.withOff(1D); } @Override public double effonix(double x) { return Math.log10(getX(x)) * level; } - @Override public String getLabelForFuel() { return "log10(" + getXName(false) + ") * " + level; } + @Override public String getLabelForFuel() { return "log10(" + getXName(false) + ") * " + String.format("%,.1f", this.level); } @Override public String getDangerFromFuel() { return EnumChatFormatting.YELLOW + "MEDIUM / LOGARITHMIC"; } } public static class FunctionPassive extends FunctionSingleArg { public FunctionPassive(double level) { super(level); } @Override public double effonix(double x) { return this.level; } - @Override public String getLabelForFuel() { return "" + level; } + @Override public String getLabelForFuel() { return "" + String.format("%,.1f", this.level); } @Override public String getDangerFromFuel() { return EnumChatFormatting.DARK_GREEN + "SAFE / PASSIVE"; } } public static class FunctionSqrt extends FunctionSingleArg { public FunctionSqrt(double level) { super(level); } @Override public double effonix(double x) { return BobMathUtil.squirt(getX(x)) * this.level; } - @Override public String getLabelForFuel() { return "sqrt(" + getXName(false) + ") * " + this.level; } //not entirely correct but good enough + @Override public String getLabelForFuel() { return "sqrt(" + getXName(false) + ") * " + String.format("%,.3f", this.level); } //not entirely correct but good enough @Override public String getDangerFromFuel() { return EnumChatFormatting.YELLOW + "MEDIUM / SQUARE ROOT"; } } + public static class FunctionSqrtFalling extends FunctionSqrt { + public FunctionSqrtFalling(double fallFactor) { + super(1D / fallFactor); + this.withOff(fallFactor * fallFactor); + } + } + public static class FunctionLinear extends FunctionSingleArg { public FunctionLinear(double level) { super(level); } @Override public double effonix(double x) { return getX(x) * this.level; } - @Override public String getLabelForFuel() { return getXName(true) + " * " + this.level; } + @Override public String getLabelForFuel() { return getXName(true) + " * " + String.format("%,.1f", this.level); } @Override public String getDangerFromFuel() { return EnumChatFormatting.RED + "DANGEROUS / LINEAR"; } } @@ -75,7 +82,7 @@ public abstract class Function { public FunctionQuadratic(double level) { super(level, 0D); } public FunctionQuadratic(double level, double vOff) { super(level, vOff); } @Override public double effonix(double x) { return getX(x) * getX(x) * this.level + this.vOff; } - @Override public String getLabelForFuel() { return getXName(true) + "² * " + this.level + (vOff != 0 ? (" + " + vOff) : ""); } + @Override public String getLabelForFuel() { return getXName(true) + "² * " + String.format("%,.1f", this.level) + (vOff != 0 ? (" + " + String.format("%,.1f", vOff)) : ""); } @Override public String getDangerFromFuel() { return EnumChatFormatting.RED + "DANGEROUS / QUADRATIC"; } } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index bc3b244fb..eb0dbc7e7 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -416,6 +416,7 @@ container.zirnox=ZIRNOX Atomreaktor crucible.aa=Herstellung - Fortgeschrittene Legierung crucible.cdalloy=Herstellung Cadmiumstahl +crucible.cmb=Herstellung CMB-Stahl crucible.ferro=Herstellung - Ferrouran crucible.hematite=Herstellung - Eisen aus Hämatit crucible.hss=Herstellung - Schnellarbeitsstahl @@ -781,6 +782,7 @@ hbmmat.uranium=Uran hbmmat.uranium233=Uran-233 hbmmat.uranium235=Uran-235 hbmmat.uranium238=Uran-238 +hbmmat.watzmud=Giftiger Schlamm hbmmat.whitephosphorus=Weißer Phosphor hbmmat.workersalloy=Desh hbmmat.wroughtiron=Schmiedeeisen @@ -1205,6 +1207,7 @@ item.bobmazon_weapons.name=Bobmazon: Waffen und Sprengstoffe item.bolt_compound.name=Verstärkte Turbinenwelle item.bolt_dura_steel.name=Schnellarbeitsstahlbolzen item.bolt_tungsten.name=Wolframbolzen +item.boltgun.name=Pneumatische Nietenpistole item.bomb_caller.name=Luftschlag Zielmarker item.bomb_waffle.name=Massenvernichtungswaffel item.guide_book.name=Handbuch @@ -2013,6 +2016,7 @@ item.ingot_magnetized_tungsten.name=Magnetisierter Wolframbarren item.ingot_meteorite.name=Meteoritenbarren item.ingot_meteorite_forged.name=Geschmiedeter Meteoritenbarren item.ingot_mox_fuel.name=MOX-Kernbrennstoffbarren +item.ingot_mud.name=Fester Schlammziegel item.ingot_neptunium.name=Neptuniumbarren item.ingot_neptunium_fuel.name=Neptuniumkernbrennstoffbarren item.ingot_niobium.name=Niobbarren @@ -4222,6 +4226,7 @@ tile.struct_launcher_core_large.name=Startrampe-Kernkomponente tile.struct_plasma_core.name=Plasmaerhitzer-Kernkomponente tile.struct_scaffold.name=Startrampe-Gerüstblock tile.struct_soyuz_core.name=Soyuz-Startrampe-Kernkomponente +tile.struct_watz_core.name=Watzkraftwerk-Kernkomponente tile.substation.name=Umspannwerk tile.sulfuric_acid_block.name=Schwefelsäure tile.taint.name=Korrupter Schmutz @@ -4275,13 +4280,16 @@ tile.waste_mycelium.name=Leuchtende Myzel tile.waste_planks.name=Verkohlte Holzbretter tile.waste_trinitite.name=Trinititerz tile.waste_trinitite_red.name=Rotes Trinititerz +tile.watz.name=Watzkraftwerk tile.watz_conductor.name=Watz-Stromanschluss tile.watz_control.name=Verstärkte Steuerstäbe tile.watz_cooler.name=Watz-Superkühler tile.watz_core.name=Watzreaktorkern tile.watz_element.name=Watzreaktionskammer tile.watz_end.name=Watz-Stabilitätselement +tile.watz_end_bolted.name=Watz-Stabilitätselement (Genietet) tile.watz_hatch.name=Watzreaktorzugriffsluke +tile.watz_pump.name=Watz-Druckpumpe tile.yellow_barrel.name=Radioaktives Fass tile.zirnox_destroyed.name=Zerstörter ZINOX diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e8656695b..97050a4fb 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -709,6 +709,7 @@ container.zirnox=ZIRNOX Nuclear Reactor crucible.aa=Advanced Alloy Production crucible.cdalloy=Cadmium Steel Production +crucible.cmb=CMB Steel Production crucible.ferro=Ferrouranium Production crucible.hematite=Iron Production from Hematite crucible.hss=High-Speed Steel Production @@ -1358,6 +1359,7 @@ hbmmat.uranium=Uranium hbmmat.uranium233=Uranium-233 hbmmat.uranium235=Uranium-235 hbmmat.uranium238=Uranium-238 +hbmmat.watzmud=Poisonous Mud hbmmat.whitephosphorus=White Phosphorus hbmmat.workersalloy=Desh hbmmat.wroughtiron=Wroght Iron @@ -1792,6 +1794,7 @@ item.bobmazon_weapons.name=Bobmazon: Weapons and Explosives item.bolt_compound.name=Reinforced Turbine Shaft item.bolt_dura_steel.name=High-Speed Steel Bolt item.bolt_tungsten.name=Tungsten Bolt +item.boltgun.name=Pneumatic Rivet Gun item.bomb_caller.name=Airstrike Designator item.bomb_waffle.name=Waffle of Mass Destruction item.book_guide.name=Guide Book @@ -2662,6 +2665,7 @@ item.ingot_magnetized_tungsten.name=Magnetized Tungsten Ingot item.ingot_meteorite.name=Meteorite Ingot item.ingot_meteorite_forged.name=Forged Meteorite Ingot item.ingot_mox_fuel.name=Ingot of MOX Fuel +item.ingot_mud.name=Solid Mud Brick item.ingot_neptunium.name=Neptunium Ingot item.ingot_neptunium.desc=That one's my favourite! item.ingot_neptunium.desc.P11=Woo, scary! @@ -5038,6 +5042,7 @@ tile.struct_launcher_core_large.name=Launch Table Core Component tile.struct_plasma_core.name=Plasma Heater Core Component tile.struct_scaffold.name=Launch Pad Scaffold Block tile.struct_soyuz_core.name=Soyuz Launcher Core Component +tile.struct_watz_core.name=Watz Powerplant Core Component tile.substation.name=Substation tile.sulfuric_acid_block.name=Sulfuric Acid tile.taint.name=Taint @@ -5093,13 +5098,16 @@ tile.waste_mycelium.name=Glowing Mycelium tile.waste_planks.name=Charred Wooden Planks tile.waste_trinitite.name=Trinitite Ore tile.waste_trinitite_red.name=Red Trinitite Ore +tile.watz.name=Watz Powerplant tile.watz_conductor.name=Watz Electricity Port tile.watz_control.name=Reinforced Control Rods tile.watz_cooler.name=Watz Reactor Supercooler tile.watz_core.name=Watz Reactor Control tile.watz_element.name=Watz Reaction Chamber tile.watz_end.name=Watz Reactor Stability Element +tile.watz_end_bolted.name=Watz Reactor Stability Element (Riveted) tile.watz_hatch.name=Watz Reactor Access Hatch +tile.watz_pump.name=Watz Pressure Pump tile.yellow_barrel.name=Radioactive Barrel tile.zirnox_destroyed.name=Destroyed ZINROX diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 46a1df9df..eace51f10 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1261,6 +1261,7 @@ hbmmat.wroughtiron=Кованое железо hbmmat.desh=Деш hbmmat.cdalloy=Кадмиевая сталь hbmmat.cadmium=Кадмий +hbmmat.watzmud=Токсичные отходы crucible.aa=Производство продвинутого сплава crucible.ferro=Производство ферроуранового сплава @@ -1274,6 +1275,7 @@ crucible.steelPig=Переплавка чугуна в сталь crucible.steelWrought=Переплавка кованого железа в сталь crucible.tcalloy=Производство технециевой стали crucible.cdalloy=Производство кадмиевой стали +crucible.cmb=Производство стали Альянса matshape.block=Блок %s matshape.blocks=Блоки %s @@ -1716,6 +1718,7 @@ tile.struct_launcher_core_large.name=Ядро большой пусковой п tile.struct_soyuz_core.name=Ядро стартовой площадки Союза tile.struct_plasma_core.name=Ядро нагревателя плазмы tile.struct_iter_core.name=Ядро термоядерного реактора +tile.struct_watz_core.name=Ядро Ватцз-реактора tile.machine_difurnace_off.name=Доменная печь tile.machine_difurnace_on.name=Доменная печь @@ -2094,6 +2097,8 @@ tile.machine_vacuum_distill.name=Вакуумный нефтеперерабат tile.machine_catalytic_reformer.name=Каталитический реформер container.catalyticReformer=Каталитический реформер tile.fan.name=Вентилятор +tile.watz.name=Реактор Ватцз +tile.watz_pump.name=Нагнетающая помпа Ватцза container.hadron=Ускоритель частиц tile.hadron_access.name=Терминал доступа ускорителя частиц @@ -2227,6 +2232,7 @@ tile.watz_element.name=Камера реакции Ватцза tile.watz_control.name=Упрочнённые регулирующие стержни tile.watz_cooler.name=Суперохладитель реактора Ватцза tile.watz_end.name=Стабилизатор реактора Ватцза +tile.watz_end_bolted.name=Стабилизатор реактора Ватцза (Заклепанный) tile.watz_hatch.name=Люк доступа к реактору Ватцза tile.watz_conductor.name=Порт электричества Ватцза tile.watz_core.name=Контроллер реактора Ватцза @@ -2384,6 +2390,7 @@ item.coil_gold_torus.name=Золотая кольцевая катушка item.lithium.name=Куб лития item.ingot_phosphorus.name=Брусок белого фосфора item.ingot_magnetized_tungsten.name=Намагниченный слиток вольфрама +item.ingot_mud.name=Кирпич из твёрдых отходов item.ingot_combine_steel.name=Слиток стали Альянса item.ingot_combine_steel.desc=*вставьте референс на Гражданскую Оборону* item.ingot_combine_steel.desc.11="Я имею в виду, это глагол для громкого крика.$Инопланетяне - это не глаголы. Это существительные!"$"На самом деле, я думаю, что это также название $какого-то сельскохозяйственного оборудования, такого как $молотилка за доллар или что-то в этом роде."$"Это еще хуже. Теперь у нас есть слово,$которое может означать "смешивать вещи вместе",$часть сельскохозяйственного оборудования, и давайте посмотрим...$а да, это также может означать "самая продвинутая $форма жизни в известной вселенной".."$"И?"$"'И?' Да ладно, чувак, они же ИНОПЛАНЕТЯНЕ!" @@ -4048,6 +4055,7 @@ item.gun_darter.name=Дротиковый пистолет item.gun_mymy.name=Ньетес item.gun_ar15.name="Джош" item.gun_glass_cannon.name=Стеклянная пушка +item.boltgun.name=Пневматический заклепочник item.gun_revolver_iron_ammo.name=Пуля item.gun_revolver_ammo.name=Свинцовая пуля @@ -4394,6 +4402,7 @@ entity.hbm.entity_schrabnel.name=Шрапнель entity.entity_fucc_a_ducc.name=Утка entity.entity_mob_nuclear_creeper.name=Ядерный крипер entity.entity_mob_tainted_creeper.name=Заражённый порчей крипер +entity.entity_mob_phosgene_creeper.name=Фосгеновый крипер entity.entity_mob_mask_man.name=Маскмен entity.entity_mob_hunter_chopper.name=Вертолёт-охотник entity.entity_cyber_crab.name=Киберкраб diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 6458aa7fc..ab2066140 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -78,6 +78,7 @@ "item.vice": {"category": "player", "sounds": [{"name": "tool/vice", "stream": false}]}, "item.upgradePlug": {"category": "player", "sounds": [{"name": "tool/upgradePlug", "stream": false}]}, "item.battery": {"category": "player", "sounds": [{"name": "tool/battery", "stream": false}]}, + "item.boltgun": {"category": "player", "sounds": [{"name": "tool/boltgun", "stream": false}]}, "music.recordLambdaCore": {"category": "record", "sounds": [{"name": "music/recordLambdaCore", "stream": true}]}, "music.recordSectorSweep": {"category": "record", "sounds": [{"name": "music/recordSectorSweep", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/tool/boltgun.ogg b/src/main/resources/assets/hbm/sounds/tool/boltgun.ogg new file mode 100644 index 000000000..98356b58b Binary files /dev/null and b/src/main/resources/assets/hbm/sounds/tool/boltgun.ogg differ diff --git a/src/main/resources/assets/hbm/textures/blocks/watz_casing_bolted.png b/src/main/resources/assets/hbm/textures/blocks/watz_casing_bolted.png new file mode 100644 index 000000000..a52fac3c7 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/watz_casing_bolted.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/watz_cooler_side.png b/src/main/resources/assets/hbm/textures/blocks/watz_cooler_side.png new file mode 100644 index 000000000..346ddad5a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/watz_cooler_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/watz_cooler_top.png b/src/main/resources/assets/hbm/textures/blocks/watz_cooler_top.png new file mode 100644 index 000000000..e8f445868 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/watz_cooler_top.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_coker.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_coker.png new file mode 100644 index 000000000..221c215fb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_coker.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ingot_mud.png b/src/main/resources/assets/hbm/textures/items/ingot_mud.png new file mode 100644 index 000000000..e18313181 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ingot_mud.png differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/boltgun.png b/src/main/resources/assets/hbm/textures/models/weapons/boltgun.png index e3fd48d0c..2ec8e52bc 100644 Binary files a/src/main/resources/assets/hbm/textures/models/weapons/boltgun.png and b/src/main/resources/assets/hbm/textures/models/weapons/boltgun.png differ