From ee0f2d216d15989d331a41302bfe8a2ea38ac4a8 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Tue, 28 Jan 2014 00:00:21 +0800 Subject: [PATCH] Added millstone --- .../api/recipe/RecipeUtils.java | 2 +- .../resonantinduction/archaic/Archaic.java | 9 +- .../archaic/blocks/BlockMillstone.java | 144 ++++++++++++++++++ .../archaic/blocks/RenderMillstone.java | 24 +++ .../archaic/blocks/TileMillstone.java | 83 ++++++++++ .../archaic/engineering/ItemHammer.java | 2 +- .../engineering/TileEngineeringTable.java | 6 +- .../archaic/imprint/BlockImprinter.java | 2 +- ...ItemBlockImprint.java => ItemImprint.java} | 6 +- .../archaic/imprint/TileImprinter.java | 33 ++-- .../core/prefab/block/BlockImprintable.java | 4 +- .../prefab/tile/TileEntityFilterable.java | 4 +- .../core/render/RenderImprintable.java | 4 +- .../core/render/RenderItemOverlayTile.java | 6 +- .../mechanical/logistic/TileManipulator.java | 6 +- .../languages/en_US.properties | 1 + .../textures/blocks/machine.png | Bin 4557 -> 0 bytes .../textures/blocks/machine_input.png | Bin 4623 -> 0 bytes .../textures/blocks/machine_output.png | Bin 4585 -> 0 bytes .../textures/blocks/machine_side.png | Bin 2124 -> 0 bytes .../textures/blocks/material_stone_edge.png | Bin 4527 -> 0 bytes 21 files changed, 297 insertions(+), 39 deletions(-) create mode 100644 src/main/java/resonantinduction/archaic/blocks/BlockMillstone.java create mode 100644 src/main/java/resonantinduction/archaic/blocks/RenderMillstone.java create mode 100644 src/main/java/resonantinduction/archaic/blocks/TileMillstone.java rename src/main/java/resonantinduction/archaic/imprint/{ItemBlockImprint.java => ItemImprint.java} (96%) delete mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/machine.png delete mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/machine_input.png delete mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/machine_output.png delete mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/machine_side.png delete mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/material_stone_edge.png diff --git a/src/main/java/resonantinduction/api/recipe/RecipeUtils.java b/src/main/java/resonantinduction/api/recipe/RecipeUtils.java index bc709592..6368fae1 100644 --- a/src/main/java/resonantinduction/api/recipe/RecipeUtils.java +++ b/src/main/java/resonantinduction/api/recipe/RecipeUtils.java @@ -66,7 +66,7 @@ public class RecipeUtils @Override public ItemStack getItemStack() { - return itemStack; + return itemStack.copy(); } } diff --git a/src/main/java/resonantinduction/archaic/Archaic.java b/src/main/java/resonantinduction/archaic/Archaic.java index 46196921..515880c1 100644 --- a/src/main/java/resonantinduction/archaic/Archaic.java +++ b/src/main/java/resonantinduction/archaic/Archaic.java @@ -4,7 +4,9 @@ import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.ShapedOreRecipe; +import resonantinduction.archaic.blocks.BlockMillstone; import resonantinduction.archaic.blocks.BlockTurntable; +import resonantinduction.archaic.blocks.TileMillstone; import resonantinduction.archaic.crate.BlockCrate; import resonantinduction.archaic.crate.ItemBlockCrate; import resonantinduction.archaic.crate.TileCrate; @@ -16,7 +18,7 @@ import resonantinduction.archaic.firebox.BlockHotPlate; import resonantinduction.archaic.firebox.TileFirebox; import resonantinduction.archaic.firebox.TileHotPlate; import resonantinduction.archaic.imprint.BlockImprinter; -import resonantinduction.archaic.imprint.ItemBlockImprint; +import resonantinduction.archaic.imprint.ItemImprint; import resonantinduction.archaic.imprint.TileImprinter; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; @@ -68,6 +70,7 @@ public class Archaic public static Block blockTurntable; public static Block blockFirebox; public static Block blockHotPlate; + public static Block blockMillstone; public static Block blockMachinePart; public static Item itemImprint; @@ -86,10 +89,10 @@ public class Archaic blockTurntable = contentRegistry.createBlock(BlockTurntable.class); blockFirebox = contentRegistry.createTile(BlockFirebox.class, TileFirebox.class); blockHotPlate = contentRegistry.createBlock(BlockHotPlate.class, ItemBlockMetadata.class, TileHotPlate.class); - + blockMillstone = contentRegistry.createTile(BlockMillstone.class, TileMillstone.class); blockMachinePart = contentRegistry.createBlock(BlockMachineMaterial.class, ItemBlockMetadata.class); - itemImprint = contentRegistry.createItem(ItemBlockImprint.class); + itemImprint = contentRegistry.createItem(ItemImprint.class); itemHammer = contentRegistry.createItem(ItemHammer.class); proxy.preInit(); Settings.save(); diff --git a/src/main/java/resonantinduction/archaic/blocks/BlockMillstone.java b/src/main/java/resonantinduction/archaic/blocks/BlockMillstone.java new file mode 100644 index 00000000..5567cd8f --- /dev/null +++ b/src/main/java/resonantinduction/archaic/blocks/BlockMillstone.java @@ -0,0 +1,144 @@ +package resonantinduction.archaic.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Icon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeDirection; +import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; +import resonantinduction.archaic.crate.TileCrate; +import resonantinduction.core.Reference; +import resonantinduction.core.prefab.block.BlockRI; +import universalelectricity.api.vector.Vector2; +import universalelectricity.api.vector.Vector3; +import universalelectricity.api.vector.VectorWorld; +import calclavia.lib.utility.inventory.InventoryUtility; +import codechicken.multipart.ControlKeyModifer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockMillstone extends BlockRI +{ + Icon top; + + public BlockMillstone() + { + super("millstone", Material.wood); + setTextureName(Reference.PREFIX + "material_wood_surface"); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IconRegister iconReg) + { + this.top = iconReg.registerIcon(Reference.PREFIX + "material_wood_top"); + super.registerIcons(iconReg); + } + + @Override + @SideOnly(Side.CLIENT) + public Icon getBlockTexture(IBlockAccess world, int x, int y, int z, int side) + { + return getIcon(side, 0); + } + + /** Returns the block texture based on the side being looked at. Args: side */ + @Override + @SideOnly(Side.CLIENT) + public Icon getIcon(int side, int meta) + { + if (side == 1) + { + return top; + } + + return blockIcon; + } + + @Override + public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) + { + if (!world.isRemote) + { + TileEntity te = world.getBlockTileEntity(x, y, z); + + if (te instanceof TileMillstone) + { + TileMillstone tile = (TileMillstone) te; + + ItemStack output = tile.getStackInSlot(0); + + if (output != null) + { + InventoryUtility.dropItemStack(world, new Vector3(player), output, 0); + tile.setInventorySlotContents(0, null); + } + + tile.onInventoryChanged(); + } + + } + } + + @Override + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int hitSide, float hitX, float hitY, float hitZ) + { + TileEntity te = world.getBlockTileEntity(x, y, z); + + if (te instanceof TileMillstone) + { + TileMillstone tile = (TileMillstone) te; + ItemStack current = player.inventory.getCurrentItem(); + + ItemStack output = tile.getStackInSlot(0); + + if (output != null) + { + InventoryUtility.dropItemStack(world, new Vector3(player), output, 0); + tile.setInventorySlotContents(0, null); + } + else if (current != null && tile.isItemValidForSlot(0, current)) + { + tile.setInventorySlotContents(0, current); + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + } + + world.markBlockForUpdate(x, y, z); + } + + return false; + } + + @Override + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) + { + TileEntity te = world.getBlockTileEntity(x, y, z); + + if (te instanceof TileMillstone) + { + TileMillstone tile = (TileMillstone) te; + ItemStack output = tile.getStackInSlot(0); + + if (output != null) + { + tile.doGrind(new Vector3(entityPlayer)); + entityPlayer.addExhaustion(0.3f); + return true; + } + } + + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1) + { + return new TileMillstone(); + } +} diff --git a/src/main/java/resonantinduction/archaic/blocks/RenderMillstone.java b/src/main/java/resonantinduction/archaic/blocks/RenderMillstone.java new file mode 100644 index 00000000..c3e565d7 --- /dev/null +++ b/src/main/java/resonantinduction/archaic/blocks/RenderMillstone.java @@ -0,0 +1,24 @@ +package resonantinduction.archaic.blocks; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import resonantinduction.core.render.RenderItemOverlayTile; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderMillstone extends RenderItemOverlayTile +{ + private final RenderBlocks renderBlocks = new RenderBlocks(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float var8) + { + if (tileEntity instanceof TileMillstone) + { + TileMillstone tile = (TileMillstone) tileEntity; + renderItemOnSides(tileEntity, tile.getStackInSlot(0), x, y, z, "Empty"); + } + } +} diff --git a/src/main/java/resonantinduction/archaic/blocks/TileMillstone.java b/src/main/java/resonantinduction/archaic/blocks/TileMillstone.java new file mode 100644 index 00000000..b11beea8 --- /dev/null +++ b/src/main/java/resonantinduction/archaic/blocks/TileMillstone.java @@ -0,0 +1,83 @@ +package resonantinduction.archaic.blocks; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.packet.Packet; +import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; +import resonantinduction.api.recipe.RecipeUtils.Resource; +import resonantinduction.core.ResonantInduction; +import universalelectricity.api.vector.Vector3; +import calclavia.lib.network.IPacketReceiver; +import calclavia.lib.network.PacketHandler; +import calclavia.lib.prefab.tile.TileExternalInventory; +import calclavia.lib.utility.inventory.InventoryUtility; + +import com.google.common.io.ByteArrayDataInput; + +public class TileMillstone extends TileExternalInventory implements IPacketReceiver +{ + private int grindCount = 0; + + public void onInventoryChanged() + { + grindCount = 0; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public void doGrind(Vector3 spawnPos) + { + Resource[] outputs = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, getStackInSlot(0)); + + if (outputs.length > 0) + { + if (++grindCount > 20) + { + for (Resource res : outputs) + { + InventoryUtility.dropItemStack(worldObj, spawnPos, res.getItemStack().copy()); + } + + decrStackSize(0, 1); + onInventoryChanged(); + } + } + } + + @Override + public boolean canUpdate() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, itemstack).length > 0; + } + + /** + * Packets + */ + @Override + public Packet getDescriptionPacket() + { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return ResonantInduction.PACKET_TILE.getPacket(this, nbt); + } + + @Override + public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra) + { + try + { + this.readFromNBT(PacketHandler.readNBTTagCompound(data)); + } + catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/resonantinduction/archaic/engineering/ItemHammer.java b/src/main/java/resonantinduction/archaic/engineering/ItemHammer.java index 784830a4..8e6e86f3 100644 --- a/src/main/java/resonantinduction/archaic/engineering/ItemHammer.java +++ b/src/main/java/resonantinduction/archaic/engineering/ItemHammer.java @@ -56,7 +56,7 @@ public class ItemHammer extends ItemRI } world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, Reference.PREFIX + "hammer", 0.5f, 0.8f + (0.2f * world.rand.nextFloat())); - player.addExhaustion(1); + player.addExhaustion(0.3f); stack.damageItem(1, player); } } diff --git a/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java b/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java index b341339c..da6a0786 100644 --- a/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java +++ b/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java @@ -21,7 +21,7 @@ import org.apache.commons.lang3.ArrayUtils; import resonantinduction.api.IArmbot; import resonantinduction.api.IArmbotUseable; -import resonantinduction.archaic.imprint.ItemBlockImprint; +import resonantinduction.archaic.imprint.ItemImprint; import resonantinduction.core.ResonantInduction; import resonantinduction.electrical.encoder.coding.args.ArgumentData; import universalelectricity.api.vector.Vector3; @@ -329,9 +329,9 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive { ItemStack filterStack = craftingMatrix[CENTER_SLOT]; - if (filterStack != null && filterStack.getItem() instanceof ItemBlockImprint) + if (filterStack != null && filterStack.getItem() instanceof ItemImprint) { - Set filters = ItemBlockImprint.getFilters(filterStack); + Set filters = ItemImprint.getFilters(filterStack); for (ItemStack outputStack : filters) { diff --git a/src/main/java/resonantinduction/archaic/imprint/BlockImprinter.java b/src/main/java/resonantinduction/archaic/imprint/BlockImprinter.java index 6bbccdf2..94bf8f56 100644 --- a/src/main/java/resonantinduction/archaic/imprint/BlockImprinter.java +++ b/src/main/java/resonantinduction/archaic/imprint/BlockImprinter.java @@ -182,7 +182,7 @@ public class BlockImprinter extends BlockRI InventoryUtility.dropItemStack(world, new Vector3(player), output, 0); tile.setInventorySlotContents(9, null); } - else if (current != null && current.getItem() instanceof ItemBlockImprint) + else if (current != null && current.getItem() instanceof ItemImprint) { tile.setInventorySlotContents(9, current); player.inventory.setInventorySlotContents(player.inventory.currentItem, null); diff --git a/src/main/java/resonantinduction/archaic/imprint/ItemBlockImprint.java b/src/main/java/resonantinduction/archaic/imprint/ItemImprint.java similarity index 96% rename from src/main/java/resonantinduction/archaic/imprint/ItemBlockImprint.java rename to src/main/java/resonantinduction/archaic/imprint/ItemImprint.java index 39ee2106..4b86becc 100644 --- a/src/main/java/resonantinduction/archaic/imprint/ItemBlockImprint.java +++ b/src/main/java/resonantinduction/archaic/imprint/ItemImprint.java @@ -17,14 +17,14 @@ import resonantinduction.core.Reference; import resonantinduction.core.ResonantInductionTabs; import resonantinduction.core.Settings; -public class ItemBlockImprint extends Item +public class ItemImprint extends Item { - public ItemBlockImprint() + public ItemImprint() { this(Settings.getNextItemID()); } - public ItemBlockImprint(int id) + public ItemImprint(int id) { super(Settings.CONFIGURATION.getItem("imprint", id).getInt()); this.setUnlocalizedName(Reference.PREFIX + "imprint"); diff --git a/src/main/java/resonantinduction/archaic/imprint/TileImprinter.java b/src/main/java/resonantinduction/archaic/imprint/TileImprinter.java index da76ee67..14214e2c 100644 --- a/src/main/java/resonantinduction/archaic/imprint/TileImprinter.java +++ b/src/main/java/resonantinduction/archaic/imprint/TileImprinter.java @@ -21,18 +21,6 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac { public ItemStack[] inventory = new ItemStack[10]; - @Override - public boolean canUpdate() - { - return false; - } - - @Override - public int getSizeInventory() - { - return this.inventory.length; - } - @Override public Packet getDescriptionPacket() { @@ -54,6 +42,21 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac } } + /** + * Inventory methods. + */ + @Override + public boolean canUpdate() + { + return false; + } + + @Override + public int getSizeInventory() + { + return this.inventory.length; + } + /** * Sets the given item stack to the specified slot in the inventory (can be crafting or armor * sections). @@ -144,11 +147,11 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac /** Makes the stamping recipe for filters */ ItemStack fitlerStack = this.inventory[9]; - if (fitlerStack != null && fitlerStack.getItem() instanceof ItemBlockImprint) + if (fitlerStack != null && fitlerStack.getItem() instanceof ItemImprint) { ItemStack outputStack = fitlerStack.copy(); outputStack.stackSize = 1; - Set filters = ItemBlockImprint.getFilters(outputStack); + Set filters = ItemImprint.getFilters(outputStack); Set toAdd = new HashSet(); /** A hashset of to be imprinted items containing NO repeats. */ @@ -194,7 +197,7 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac filters.addAll(toAdd); - ItemBlockImprint.setFilters(outputStack, filters); + ItemImprint.setFilters(outputStack, filters); this.inventory[9] = outputStack; } } diff --git a/src/main/java/resonantinduction/core/prefab/block/BlockImprintable.java b/src/main/java/resonantinduction/core/prefab/block/BlockImprintable.java index 5cd80d1a..08d7f41d 100644 --- a/src/main/java/resonantinduction/core/prefab/block/BlockImprintable.java +++ b/src/main/java/resonantinduction/core/prefab/block/BlockImprintable.java @@ -8,7 +8,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import resonantinduction.api.IFilterable; -import resonantinduction.archaic.imprint.ItemBlockImprint; +import resonantinduction.archaic.imprint.ItemImprint; import resonantinduction.core.prefab.tile.TileEntityFilterable; /** @@ -51,7 +51,7 @@ public abstract class BlockImprintable extends BlockRIRotatable { if (player.getCurrentEquippedItem() != null) { - if (player.getCurrentEquippedItem().getItem() instanceof ItemBlockImprint) + if (player.getCurrentEquippedItem().getItem() instanceof ItemImprint) { ((IFilterable) tileEntity).setFilter(player.getCurrentEquippedItem()); player.inventory.setInventorySlotContents(player.inventory.currentItem, null); diff --git a/src/main/java/resonantinduction/core/prefab/tile/TileEntityFilterable.java b/src/main/java/resonantinduction/core/prefab/tile/TileEntityFilterable.java index fbd67c49..9bd97781 100644 --- a/src/main/java/resonantinduction/core/prefab/tile/TileEntityFilterable.java +++ b/src/main/java/resonantinduction/core/prefab/tile/TileEntityFilterable.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.ForgeDirection; import resonantinduction.api.IFilterable; -import resonantinduction.archaic.imprint.ItemBlockImprint; +import resonantinduction.archaic.imprint.ItemImprint; import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.prefab.tile.TileExternalInventory; @@ -36,7 +36,7 @@ public abstract class TileEntityFilterable extends TileExternalInventory impleme { if (this.getFilter() != null && itemStack != null) { - Set checkStacks = ItemBlockImprint.getFilters(getFilter()); + Set checkStacks = ItemImprint.getFilters(getFilter()); if (checkStacks != null) { diff --git a/src/main/java/resonantinduction/core/render/RenderImprintable.java b/src/main/java/resonantinduction/core/render/RenderImprintable.java index 5e571746..81498575 100644 --- a/src/main/java/resonantinduction/core/render/RenderImprintable.java +++ b/src/main/java/resonantinduction/core/render/RenderImprintable.java @@ -8,7 +8,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; -import resonantinduction.archaic.imprint.ItemBlockImprint; +import resonantinduction.archaic.imprint.ItemImprint; import resonantinduction.core.prefab.tile.TileEntityFilterable; import universalelectricity.api.vector.Vector3; import calclavia.lib.render.RenderUtility; @@ -41,7 +41,7 @@ public abstract class RenderImprintable extends TileEntitySpecialRenderer { if (objectPosition.blockX == tileFilterable.xCoord && objectPosition.blockY == tileFilterable.yCoord && objectPosition.blockZ == tileFilterable.zCoord) { - Set filters = ItemBlockImprint.getFilters(filter); + Set filters = ItemImprint.getFilters(filter); int i = 0; for (ItemStack filterStack : filters) diff --git a/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java b/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java index 9b980405..b8166163 100644 --- a/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java +++ b/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java @@ -88,7 +88,7 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer renderItemOnSides(tile, itemStack, x, y, z, "No Output"); } - public void renderItemOnSides(TileEntity tile, ItemStack itemStack, double x, double y, double z, String itemName) + public void renderItemOnSides(TileEntity tile, ItemStack itemStack, double x, double y, double z, String renderText) { RenderItem renderItem = ((RenderItem) RenderManager.instance.getEntityClassRenderObject(EntityItem.class)); @@ -99,7 +99,7 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer if (itemStack != null) { - itemName = itemStack.getDisplayName(); + renderText = itemStack.getDisplayName(); amount = Integer.toString(itemStack.stackSize); } @@ -155,7 +155,7 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer GL11.glPopMatrix(); } - this.renderText(itemName, side, 0.02f, x, y - 0.35f, z); + this.renderText(renderText, side, 0.02f, x, y - 0.35f, z); this.renderText(amount, side, 0.02f, x, y - 0.15f, z); } } diff --git a/src/main/java/resonantinduction/mechanical/logistic/TileManipulator.java b/src/main/java/resonantinduction/mechanical/logistic/TileManipulator.java index 2770f430..573a45a7 100644 --- a/src/main/java/resonantinduction/mechanical/logistic/TileManipulator.java +++ b/src/main/java/resonantinduction/mechanical/logistic/TileManipulator.java @@ -10,7 +10,7 @@ import net.minecraft.network.packet.Packet; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.ForgeDirection; import resonantinduction.api.IManipulator; -import resonantinduction.archaic.imprint.ItemBlockImprint; +import resonantinduction.archaic.imprint.ItemImprint; import resonantinduction.core.ResonantInduction; import resonantinduction.core.prefab.tile.TileEntityFilterable; import universalelectricity.api.vector.Vector3; @@ -214,7 +214,7 @@ public class TileManipulator extends TileEntityFilterable implements IRotatable, { if (invExtractionHelper == null || invExtractionHelper.world != this.worldObj) { - this.invExtractionHelper = new InternalInventoryHandler(this.worldObj, new Vector3(this), this.getFilter() != null ? ItemBlockImprint.getFilters(getFilter()) : null, this.isInverted()); + this.invExtractionHelper = new InternalInventoryHandler(this.worldObj, new Vector3(this), this.getFilter() != null ? ItemImprint.getFilters(getFilter()) : null, this.isInverted()); } return invExtractionHelper; } @@ -224,7 +224,7 @@ public class TileManipulator extends TileEntityFilterable implements IRotatable, { super.setFilter(filter); /* Reset inv Helper's filters */ - this.invHelper().setFilter(this.getFilter() != null ? ItemBlockImprint.getFilters(this.getFilter()) : null, this.isInverted()); + this.invHelper().setFilter(this.getFilter() != null ? ItemImprint.getFilters(this.getFilter()) : null, this.isInverted()); } /** Is this manipulator set to output items */ diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index 7b31b85a..41add651 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -37,6 +37,7 @@ item.resonantinduction\:hammer.name=Hammer ## Machines tile.resonantinduction\:millstone.name=Millstone +tile.resonantinduction\:millstone.tooltip=Put some rubble in the millstone and start wrenching to grind rubble into dust. tile.resonantinduction\:imprinter.name=Imprinter tile.resonantinduction\:engineeringTable.name=Engineering Table tile.resonantinduction\:firebox.name=Firebox diff --git a/src/main/resources/assets/resonantinduction/textures/blocks/machine.png b/src/main/resources/assets/resonantinduction/textures/blocks/machine.png deleted file mode 100644 index 7a7eee798f97b9eddf307a67c7bb6d9a32443a21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4557 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 FV1oatwVwb0 diff --git a/src/main/resources/assets/resonantinduction/textures/blocks/machine_output.png b/src/main/resources/assets/resonantinduction/textures/blocks/machine_output.png deleted file mode 100644 index 76348943432cb238e895bcb0b701d9a59748c57e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4585 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000LRNklmMzE4$t==jF(=z}-F)Zt>tvfnrqkGxBZ&k^ zJhA{p%V$p7!VA%&KmhmtUzD%E{yGCFrBF&pDO3J0*In1*{lsO6l+UJV$UsgRr3Ir6 z06AxzbL5<9+m>M%X&MWF)*1lkJUM4_P8fine)=bnmxY?9A?M8X5D{)~Z_!4hL;-L- z9^d^Y#DE~|4}0c$Mu}p(-7fRD+bv3~W&Y1U{|jY|#uyC^bS%Y3C3r_&K73X!);8l@B|XOvP*^Mn$G zHkueB0Mk6tHZ3V-M9L{ICwI>A`SWMGt^**Y#OZiq_wayH3a#}rKgL87h$&)?Sz2PK zJDKKb>0t~J5kV`%GefBZ>{*{M^dz4ZYQ{~f)5nsIbE=eWDOWw+bWb{#1t1X)U*QUVde zJTuQTZPzhR6IyG!u4kG&pFaJY!{I>A1wYPtnx>q&v4xsOYemyEh?EU@@0n*$jFH`L z$K&H8+8B&7AkcMft$-uM2stx{fOC$U%?*9uW345nQn~$pPY9uccA#zVu%@y@z$hgP z-BeVh6p1k*A~bD_Hky~07mlw-Y-4HL1`u*ir4l*e{lqW~^j(iqiid{>o}QlAY&O_> zQh<353!4h!!FWHF#YGWgsO2jCnWvc)6NmkQUw-+es#jskYSq!$hH0K~ZbECdfcD3K z{K$t79{@$yHT8KJrF4D1EZ{UsDXg)C5NO*XyIQM?@`(4-()Z`*mu2#PUypz+C(1c< zf4`+|Ta;Faf*8|sFQruQ(l*O?CZ)6p(Y5AZP%k3n{B|8<`R zMW$(5Frt*gq?C&|RI#`g6QzW%>*|EW|2u|pz&npM_MNAQ6!tjhFvb+IiZPIKB82dT z0cm4UN@1<32KC<;&N;K$thwE6P)3urqVKz_`(Ui8t)nQYwU%)hiv-8?2G45ISu z7b^Ex!M9|hQ_I|l{VVF`T9?vw5Wtyfd zHw(p#kSaoXiB*M~WwY0@qKWNI+dVAS z+_hbmVUN^`Win(K+=%mj$pIo%7Zg&87-NYc;Jq(GWQ-<+$T*JgwEJS6+wGPge)s{c zOCD_6hQ9B}WI_!uITtOc@AuDHf4?LKvMc! zJRaaYoN>NHY&SYqtDa#TYYSSewS^%e(03gvXN=Z(H}U$%D=#n4c<<3#6JuBuRRs1g zdq6O!(`kuh^E{K{n{a&k?GvAV`}B@(@0BfMjKx}ub3-*I!TYyFbWPDqx;EP2{Zw?| z!p}=2gG@@9@4ox{6)mp?DzjRx8HRHyp*4iL2-!5vyuR)c5x)Qa`-&r7!>eGMwg6U2 ze2X!mVpXOT6UG>fF;x@39M&qVZFqcqpznK(F|1dcMWFh==bLXnu-iReJ4BV<25T(q z^_uhPTw5Up1Gl#~{PFq+jcvd}N)6}pnVg|%G&u{?G_l)##b&cv-k!#BouyZ3>X1t5C9Ga7{i2xX(|LJ6yu1^(P0Q3ymuG0SDtYdBJVMU+ z$+O<9d3`-_b92Mf(-Wf`3aV=~kFhA);)344d#7w{N!pip!tM6{D!RdXy)Ll+_S004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XT000XT0n*)m z`~Uy|8gxZibW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE-^7j^FlWO00*o|L_t(YOSM(m zZ(CI!_8TN|>?DrkCHD1py~Mk(cgK!>y{}ok##_h&w1Ku%gsGZB+NSL^1%iaCmJaHc zp&)@qyo`icG#c?T@G$?>eCHk~lZTl{tWQ_R=bZa}zx|4o!cVPMYc%tCo-K?7~K$?%>uW*0y{9lUmf9Z=L7eOBfKF$*i`rRG}p8pSCuPYGX zaL40u_yazt%Vu|2gF){6oj}0vaAMOR2y)OM0t};t6b{bc`=7uazn}AQzF;sAj)d@w zL_+cSVmixb;7&A>OfDspN$i9|0iVwWT7*}`=(PEKoa4L#OE4S`hC;!_Qaln3=JUC1 zHXRE2v4e2&d@_|vCK7R;=kxh&xm+q13o9$j>%C5^-Ksa%u#fvo$pr4hKhPp2BAd;I z5K|iyONqtBSh-TFRLgiSFIP*Y;tDvHYlULIP{?Mp8Bl|_R;yO4m0~g9?zA>Ghuv( zEI}>PXx6v3HgHYsqlxwQdn@Lcb98jU(K!DsjspA3fsU;`}?K+WI_|C2SI<}m zgC3~+{qA7cgRub7SRI{$xD1tSfx@zdQogBB#+lM$^lvt>81i}Yb%H^oIvU* z5CJNH1vQ+e2PIT47m;~T=L>n%0*Pd`0+g#2v?^pEfDT6v7<2^KA>L>aYLvuq*rx#R z86bc>6I9BmC)8Uen+705CGjj2P!;K=rNn~W0$RkMcz_|{^|_MC1a35&jm|nT{7eI& z-oQp099$DL2s> z8kvlcOj5*n5_b3`2!Ndemyu+IWYh-;Q6@t?0H6%J&^4$YCE$lw%r@FHA+K?o78qW=nH(wIf$+Z~U`gxlm>2H@L*;-i%Z zC$K<6K;YCBB10L4G?a)P%QZ|3e6+!aP9}ZuhYKvQTHXAdMmfvsRNoxRUVJ$F!$bM6 zU#h>pE%P{x4vWt3HV51$&w`$F8UOxx_NOPZA0E&B_-O9c;mpY$1?MtZO=`PY7jm<1 zyTN7Eef41WTc=CIEibekjGg5SkL>Dyz;)4Owc z|GWFLzulYq{^Qw*&kExLZmZL(3wW$}<>xPzuZ|QiAIP5FlwDXIzxk$wbDBgxr|I7A z*lt7o?Dq6u4rV^RBwb(`znk^i4L*m_W7AtrnlG-)o*qbF-jW|(5`X^w)T3+D9=l<| z%owyvBcrsNao_wB;k`HW{U^$&2UE}P%J<)rnDuI>RWG{p&iJjj#qT!94t6I0G#Hzm zk+8aXW?rsR%xKketxCSX`PyD*?48#5wKpcNw8!>(uWM9trF=%GnPb#)1EbVy=H4Gp zT<+s&a<4DG)S0;29AoC^j9LY372Vzy-`bHLU7Gmljd3L0te-b%6=uE4$f%Hj{hi6{ z+v5-36CYg^-@hn1dKdm_?JR>gO^g!N0W%M_CJ!%)4=;@0ep7N|XZq-}1n+{K)u~N7 zwdl@U(oe5QpWmFbnKX8@R(LWv^VyBZ?@17l`d7_PpLZn>KbUfub>KnhI2Y@&>Hh=iza-KWW7cy30000|D^_ww@lRz|vCuzLs)$;-`! zo*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!& zC1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2hoGcOF60t^# zFqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTXa!E_i;d2ub z1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqKG_|(0G&D0Z z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl z*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY_n(^h55xYX z#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^bXThc7C4-yr zInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qjZ=)yBuQ3=5 z4Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK%>{;v(b^`kb zN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<)0>40zCTJ7v z2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01)S~6}jY?%U? zgEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j*2tcg9i<^O zEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfK zTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761jmyXF)a;mc z^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQqHZJR2&bcD4 z9Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^TY0bZ?)4%0 z1p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK8LKk71XR(_ zRKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS<&CX#T35dw zS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@qL5!WvekBL z-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW%ue3U;av{9 z4wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#o zSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%oZ=0JGnu?n~ z9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8No_-(u{qS+0 z<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-UsyQuty7Ua; zOu?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimkUAw*F_TX^n z@STz9kDQ$NC=!KfXWC z8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgUAAWQEt$#LR zcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6?<+s(e(3(_ z^YOu_)K8!O1p}D#{JO;G(*OVf24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_f zl`9S#00007bV*G`2i*h|3=$YB4br#(00#F-L_t(o!@ZYDj~vGlg};c*tfhNqnv}r- z50YTRfbZ7-{|)xlFf7=Bbs#B`9L{vtl3VzY)ioSJz8Nl{(bd^i8QXg=BIWJdw+5i9 zs0y_j?RUE$hMskeTrZLK-E|!XST)oM-gyAbjAdCcGy1+~nr6B#0N|VhU|Cko46}*{ z_~FlgBBe|So)|M-=c#6-m{FDAT)!F{h7N#~3boc3Yu9U8;)}KGUVr)P-|^l%mL>A9 zfB%HpbA+YT&1?P5byY+o>NtZp`%t~?Cj0sYOpGfZKfkBz zJkB{h0(tY^Ib|3|#&N``Ta?0K95FMTbEK50wNgrNL%;Lky6IFfU0ASE2=^%M%T5q z5CUdKt%ZK*>AH?&5ig^~-R!Z38CoOiaA+_2>5dEV0J2wlg` z&5>zZK(v9-yXFL-!0FYA+uOSxP>)|8cVOjGxV^nWL@BipLI49nFjc(wRFbD@-qS>5El37x+-pIVKlr!&rZR2%Y*`of9p_3-&K z0GG?e;W*;FqvS%@^%!lxp&u|aQc4_;H|;(r=4s;DW<^WMq*M@T;96tEtTqv<>`sIb zFkqS{Le~>Q2N=_3qU6%(y4AJ|&y8p3haF=gt;053O-VI`fb+VmUR+l$mkTjPO0CTa zYpL_j;hn>66l@y5;WRfqICU*DY3k7+VpMB24_!b+a9*1tni(ZmaxT=GcT`W8iD{ZP zgtt$rmE-Y-x^+Ymq3`?sKE;(7SHQ@*VAebkfvqwdW(p;@Uho3eA_@qH!-3bYUvHpm z^)I#V&)wYKwEw=M@bmi+V`5#~P!eO@8(4~oWnNz3$>*G@`{qK<>3YjyLwTtctbyk7 zsR@rdMYT;%&Us47`=(}fqiM!_-@s|MX@cwk6cPL|j62FhXkAa8zDU>gI-j3fglUWX zE3NpoW|%>(Wgp|N04$}vptTnf4##nOpc$;CP^AqRZ0dKNgdV;;a5|m#NWM1coZo54 zHbsrYKq-ZkGbzRA8RIyzuJ6!VD{)QxK=S7P&7Q_}omtnFQYzClF|Vx^$927SvX@SL zg*2lHnaH(71yxTj8RwL^rZxy)BWXi|(szLvBWA{z$47h!%*%{Ar4Jo~FpT4`z$d5* zDs8d`uv%Hy$UL_o1Zng&+4=^1i^n;)$z)S5Gq_wX91jPUdFJWy3GY4Ld#crq=emP8 z<-Bhy2qhO%YHhvIyXk+7k(}Flo00{8KA(4QoNM}=QbJU*+=kC@e)kPlD_z$i={aL* z(+pL``)ku_loM5|8Q%MSHc+SAdB9kf*mS^qw@2cxhaBJDt9t!$-Kw3ND2LPWTnC(J7Ix}eT)tf*YhXPhcs z*Q4SHeW34qLI~X5-tMw|IiIPuFt5v=dNZTz+MtTC2P`6OD815fU03ezPOV