diff --git a/src/main/java/resonantinduction/api/recipe/MachineRecipes.java b/src/main/java/resonantinduction/api/recipe/MachineRecipes.java index f490f4ed..0fd69e68 100644 --- a/src/main/java/resonantinduction/api/recipe/MachineRecipes.java +++ b/src/main/java/resonantinduction/api/recipe/MachineRecipes.java @@ -60,7 +60,7 @@ public final class MachineRecipes return new HashMap>(this.recipes); } - public Resource[] getOutput(RecipeType machine, Resource[] input) + public Resource[] getOutput(RecipeType machine, Resource... input) { Iterator> it = this.getRecipes(machine).entrySet().iterator(); @@ -77,7 +77,7 @@ public final class MachineRecipes return new Resource[] {}; } - public Resource[] getRecipe(RecipeType machine, ItemStack... inputs) + public Resource[] getOutput(RecipeType machine, ItemStack... inputs) { Resource[] resourceInputs = new Resource[inputs.length]; @@ -89,7 +89,7 @@ public final class MachineRecipes return this.getOutput(machine, resourceInputs); } - public Resource[] getRecipe(RecipeType machine, String... oreDictNames) + public Resource[] getOutput(RecipeType machine, String... oreDictNames) { Resource[] resourceInputs = new Resource[oreDictNames.length]; diff --git a/src/main/java/resonantinduction/api/recipe/RecipeUtils.java b/src/main/java/resonantinduction/api/recipe/RecipeUtils.java index 59b3a5fb..4709f35a 100644 --- a/src/main/java/resonantinduction/api/recipe/RecipeUtils.java +++ b/src/main/java/resonantinduction/api/recipe/RecipeUtils.java @@ -32,6 +32,8 @@ public class RecipeUtils { return this.chance; } + + public abstract ItemStack getItemStack(); } public static class ItemStackResource extends Resource @@ -60,6 +62,12 @@ public class RecipeUtils return false; } + + @Override + public ItemStack getItemStack() + { + return itemStack; + } } public static class OreDictResource extends Resource @@ -82,17 +90,23 @@ public class RecipeUtils public boolean equals(Object obj) { if (obj instanceof OreDictResource) - { + {System.out.println(name +" VS " +((OreDictResource) obj).name); return this.name.equals(((OreDictResource) obj).name); } if (obj instanceof ItemStackResource) { - return this.name.equals(OreDictionary.getOreName(OreDictionary.getOreID(((ItemStackResource) obj).itemStack))); + return this.name.equals(OreDictionary.getOreName(OreDictionary.getOreID(((ItemStackResource) obj).itemStack))); } return false; } + + @Override + public ItemStack getItemStack() + { + return OreDictionary.getOres(name).get(0); + } } public static class FluidStackResource extends Resource @@ -116,5 +130,11 @@ public class RecipeUtils { return (obj instanceof FluidStack) ? ((FluidStack) obj).equals(obj) : false; } + + @Override + public ItemStack getItemStack() + { + return null; + } } } diff --git a/src/main/java/resonantinduction/archaic/Archaic.java b/src/main/java/resonantinduction/archaic/Archaic.java index 3946e29d..dc879f50 100644 --- a/src/main/java/resonantinduction/archaic/Archaic.java +++ b/src/main/java/resonantinduction/archaic/Archaic.java @@ -9,6 +9,7 @@ import resonantinduction.archaic.crate.BlockCrate; import resonantinduction.archaic.crate.ItemBlockCrate; import resonantinduction.archaic.crate.TileCrate; import resonantinduction.archaic.engineering.BlockEngineeringTable; +import resonantinduction.archaic.engineering.ItemHammer; import resonantinduction.archaic.engineering.TileEngineeringTable; import resonantinduction.archaic.firebox.BlockFirebox; import resonantinduction.archaic.firebox.BlockHotPlate; @@ -68,9 +69,12 @@ public class Archaic public static Block blockFirebox; public static Block blockHotPlate; public static Block blockMachinePart; - + public static Item itemImprint; + // Machine and Processing + public static Item itemHammer; + @EventHandler public void preInit(FMLPreInitializationEvent evt) { @@ -84,8 +88,9 @@ public class Archaic blockHotPlate = contentRegistry.createBlock(BlockHotPlate.class, ItemBlockMetadata.class, TileHotPlate.class); blockMachinePart = contentRegistry.createBlock(BlockMachinePart.class, ItemBlockMetadata.class); - + itemImprint = contentRegistry.createItem(ItemBlockImprint.class); + itemHammer = contentRegistry.createItem(ItemHammer.class); proxy.preInit(); Settings.save(); } diff --git a/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java b/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java index 1821db4e..098fcb52 100644 --- a/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java +++ b/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java @@ -111,6 +111,11 @@ public class BlockEngineeringTable extends BlockRIRotatable @Override public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int hitSide, float hitX, float hitY, float hitZ) { + if(player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemHammer) + { + return false; + } + TileEntity te = world.getBlockTileEntity(x, y, z); if (te instanceof TileEngineeringTable) diff --git a/src/main/java/resonantinduction/archaic/engineering/ItemHammer.java b/src/main/java/resonantinduction/archaic/engineering/ItemHammer.java new file mode 100644 index 00000000..86cd90ff --- /dev/null +++ b/src/main/java/resonantinduction/archaic/engineering/ItemHammer.java @@ -0,0 +1,66 @@ +package resonantinduction.archaic.engineering; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; +import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; +import resonantinduction.api.recipe.RecipeUtils.Resource; +import resonantinduction.core.prefab.item.ItemRI; +import universalelectricity.api.vector.Vector3; +import calclavia.lib.utility.inventory.InventoryUtility; + +public class ItemHammer extends ItemRI +{ + public ItemHammer() + { + super("hammer"); + setMaxStackSize(1); + setMaxDamage(400); + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileEngineeringTable) + { + TileEngineeringTable tile = (TileEngineeringTable) tileEntity; + ItemStack inputStack = tile.getStackInSlot(TileEngineeringTable.CENTER_SLOT); + + if (inputStack != null) + { + String oreName = OreDictionary.getOreName(OreDictionary.getOreID(inputStack)); + + if (oreName != null && !oreName.equals("Unknown")) + { + if (!world.isRemote && world.rand.nextFloat() < 0.04) + { + Resource[] outputs = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, oreName); + + // TODO: Fix multiple outputs. + for (Resource resource : outputs) + { + ItemStack outputStack = resource.getItemStack().copy(); + + if (outputStack != null) + { + InventoryUtility.dropItemStack(world, new Vector3(player), outputStack, 0); + tile.setInventorySlotContents(TileEngineeringTable.CENTER_SLOT, --inputStack.stackSize <= 0 ? null : inputStack); + } + } + } + + player.addExhaustion(1); + stack.damageItem(1, player); + } + } + + return true; + } + return false; + } +} diff --git a/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java b/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java index 12c055a3..87e50890 100644 --- a/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java +++ b/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java @@ -42,6 +42,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive public static final int CRAFTING_MATRIX_END = 9; public static final int CRAFTING_OUTPUT_END = CRAFTING_MATRIX_END + 1; public static final int PLAYER_OUTPUT_END = CRAFTING_OUTPUT_END + 40; + public static final int CENTER_SLOT = 4; // Relative slot IDs public static final int CRAFTING_OUTPUT_SLOT = 0; @@ -326,7 +327,7 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive */ if (!didCraft) { - ItemStack filterStack = craftingMatrix[4];// this.inventory[IMPRINT_SLOT]; + ItemStack filterStack = craftingMatrix[CENTER_SLOT]; if (filterStack != null && filterStack.getItem() instanceof ItemBlockImprint) { diff --git a/src/main/java/resonantinduction/archaic/trough/EnumPipeMaterial.java b/src/main/java/resonantinduction/archaic/trough/EnumPipeMaterial.java deleted file mode 100644 index 93ca281a..00000000 --- a/src/main/java/resonantinduction/archaic/trough/EnumPipeMaterial.java +++ /dev/null @@ -1,140 +0,0 @@ -package resonantinduction.archaic.trough; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; - -/** - * Enum to hold info about each pipe material. Values are by default and some can change with pipe - * upgrades. - * - * @Note unsupportedFluids should only be used by filters. All pipes should allow all fluid types. - * However, pipes that can't support the fluid should have an effect. Eg no gas support should cause - * the pipe to leak. No molten support should cause the pipe to take damage. - * - * @author DarkGuardsman - */ -public enum EnumPipeMaterial -{ - /** Simple water only pipe. Should render open toped when it can */ - WOOD("wood", false, true, false, -1, 200), - /** Another version of the wooden pipe */ - STONE("stone", false, true, false, -1, 1000); - - public String matName = "material"; - List unsupportedFluids = new ArrayList(); - public boolean canSupportGas = false; - public boolean canSupportFluids = false; - public boolean canSupportMoltenFluids = false; - public int maxPressure = 1000; - public int maxVolume = 2000; - /** - * Materials are stored as meta were there sub types are stored by NBT. Item versions of the - * pipes are still meta so there is a set spacing to allow for a large but defined range of sub - * pipes - */ - public static int spacing = 1000; - - private EnumPipeMaterial() - { - this.canSupportGas = true; - this.canSupportFluids = true; - canSupportMoltenFluids = true; - } - - private EnumPipeMaterial(String name, boolean gas, boolean fluid, boolean molten, String... strings) - { - this.matName = name; - this.canSupportGas = gas; - this.canSupportFluids = fluid; - this.canSupportMoltenFluids = molten; - } - - private EnumPipeMaterial(String name, boolean gas, boolean fluid, boolean molten, int pressure, int volume, String... strings) - { - this(name, gas, fluid, molten, strings); - this.maxPressure = pressure; - this.maxVolume = volume; - } - - public static EnumPipeMaterial get(World world, int x, int y, int z) - { - return get(world.getBlockMetadata(x, y, z)); - } - - public static EnumPipeMaterial get(int i) - { - if (i < EnumPipeMaterial.values().length) - { - return EnumPipeMaterial.values()[i]; - } - return null; - } - - public static EnumPipeMaterial get(ItemStack stack) - { - if (stack != null) - { - return getFromItemMeta(stack.getItemDamage()); - } - return null; - } - - public static EnumPipeMaterial getFromItemMeta(int meta) - { - meta = meta / spacing; - if (meta < EnumPipeMaterial.values().length) - { - return EnumPipeMaterial.values()[meta]; - } - return EnumPipeMaterial.WOOD; - } - - public int getMeta(int typeID) - { - return (this.ordinal() * spacing) + typeID; - } - - public int getMeta() - { - return this.getMeta(0); - } - - public static int getType(int meta) - { - return meta / spacing; - } - - public static int getDropItemMeta(World world, int x, int y, int z) - { - int meta = world.getBlockMetadata(x, y, z); - TileEntity ent = world.getBlockTileEntity(x, y, z); - meta *= spacing; - if (ent instanceof TileFluidNetwork) - { - meta += ((TileFluidNetwork) ent).getSubID(); - } - return meta; - } - - public boolean canSupport(FluidStack fluid) - { - if (fluid != null && fluid.getFluid() != null) - { - if (fluid.getFluid().isGaseous(fluid) && this.canSupportGas) - { - return true; - } - else if (!fluid.getFluid().isGaseous(fluid) && this.canSupportFluids) - { - return true; - } - } - return false; - } -} diff --git a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java index 76c60949..ec673f64 100644 --- a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java +++ b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java @@ -9,6 +9,7 @@ import java.util.Set; import javax.imageio.ImageIO; +import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -52,6 +53,13 @@ public class ResourceGenerator public static void generateOreResources() { + OreDictionary.registerOre("ingotGold", Item.ingotGold); + OreDictionary.registerOre("ingotIron", Item.ingotIron); + + OreDictionary.registerOre("oreGold", Block.oreGold); + OreDictionary.registerOre("oreIron", Block.oreIron); + OreDictionary.registerOre("oreLapis", Block.oreLapis); + for (String materialName : materialNames) { String name = materialName.substring(0, 1).toUpperCase() + materialName.substring(1); @@ -66,7 +74,7 @@ public class ResourceGenerator } // Add to machine recipes - ItemStack dust = OreDictionary.getOres("dust" + name).get(0).copy(); + ItemStack dust = OreDictionary.getOres("rubble" + name).get(0).copy(); dust.stackSize = 2; MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "ore" + name, dust); } diff --git a/src/main/java/resonantinduction/electrical/armbot/task/TaskBreak.java b/src/main/java/resonantinduction/electrical/armbot/task/TaskBreak.java index 8ed90528..49fd2fb9 100644 --- a/src/main/java/resonantinduction/electrical/armbot/task/TaskBreak.java +++ b/src/main/java/resonantinduction/electrical/armbot/task/TaskBreak.java @@ -12,7 +12,7 @@ import resonantinduction.electrical.armbot.TaskBaseArmbot; import resonantinduction.electrical.armbot.TaskBaseProcess; import resonantinduction.electrical.encoder.coding.ITask; import universalelectricity.api.vector.Vector3; -import calclavia.lib.utility.WorldUtility; +import calclavia.lib.utility.inventory.InventoryUtility; import com.builtbroken.common.Pair; @@ -53,7 +53,7 @@ public class TaskBreak extends TaskBaseArmbot if (!this.keep || items.size() > 1) { - WorldUtility.dropBlockAsItem(location.left(), serachPosition); + InventoryUtility.dropBlockAsItem(location.left(), serachPosition); } else { diff --git a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java index aafae13b..5c4c98aa 100644 --- a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java +++ b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java @@ -122,14 +122,14 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable public boolean canGrind(ItemStack itemStack) { - return MachineRecipes.INSTANCE.getRecipe(RecipeType.GRINDER, itemStack) == null ? false : MachineRecipes.INSTANCE.getRecipe(RecipeType.GRINDER, itemStack).length > 0; + return MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, itemStack) == null ? false : MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, itemStack).length > 0; } private boolean doGrind(EntityItem entity) { ItemStack itemStack = entity.getEntityItem(); - Resource[] results = MachineRecipes.INSTANCE.getRecipe(RecipeType.GRINDER, itemStack); + Resource[] results = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, itemStack); for (Resource resource : results) { diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index c106c30c..ee2b31f3 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -24,6 +24,7 @@ tile.resonantinduction\:DebugBlock.3.name=Power Void ### Archaic Module ## Items item.resonantinduction\:imprint.name=Imprint +item.resonantinduction\:hammer.name=Hammer ## Machines tile.resonantinduction\:imprinter.name=Imprinter