diff --git a/buildnumber.txt b/buildnumber.txt index 831f0431..65b7f4cd 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -32 +35 diff --git a/info.txt b/info.txt index 970149aa..aba8097c 100644 --- a/info.txt +++ b/info.txt @@ -28,3 +28,6 @@ Minecraft 1.4.5 * AssemblyLine_v0.1.8.30.jar AssemblyLine_v0.1.8.30_api.zip @ AssemblyLine_v0.1.8.31.jar AssemblyLine_v0.1.8.31_api.zip @ AssemblyLine_v0.1.9.32.jar AssemblyLine_v0.1.9.32_api.zip +@ AssemblyLine_v0.1.9.33.jar AssemblyLine_v0.1.9.33_api.zip +@ AssemblyLine_v0.1.9.34.jar AssemblyLine_v0.1.9.34_api.zip +* AssemblyLine_v0.1.9.35.jar AssemblyLine_v0.1.9.35_api.zip diff --git a/recommendedversion.txt b/recommendedversion.txt index 20692fbd..518c1d65 100644 --- a/recommendedversion.txt +++ b/recommendedversion.txt @@ -1 +1 @@ -0.1.8 +0.1.9 diff --git a/resources/assemblyline/language/en_US.properties b/resources/assemblyline/language/en_US.properties index c75be015..3e5a1f8c 100644 --- a/resources/assemblyline/language/en_US.properties +++ b/resources/assemblyline/language/en_US.properties @@ -4,7 +4,6 @@ # Gui assemblyline.gui.crafting=Crafting - # Blocks tile.crate.name=Crate tile.conveyorBelt.name=Conveyor Belt @@ -12,6 +11,8 @@ tile.stamper.name=Stamper tile.engineerTable.name=Engineer's Table tile.detector.name=Detector tile.armbot.name=Armbot +tile.manipulator.name=Manipulator +tile.rejector.name=Rejector # Items item.filter.name=Filter diff --git a/resources/assemblyline/textures/blocks.png b/resources/assemblyline/textures/blocks.png index 6492a481..8a57ac37 100644 Binary files a/resources/assemblyline/textures/blocks.png and b/resources/assemblyline/textures/blocks.png differ diff --git a/resources/assemblyline/textures/detector_green.png b/resources/assemblyline/textures/detector_green.png deleted file mode 100644 index 9f5166fe..00000000 Binary files a/resources/assemblyline/textures/detector_green.png and /dev/null differ diff --git a/resources/assemblyline/textures/detector_red.png b/resources/assemblyline/textures/detector_red.png deleted file mode 100644 index 4310c2d5..00000000 Binary files a/resources/assemblyline/textures/detector_red.png and /dev/null differ diff --git a/src/minecraft/assemblyline/api/IFilterable.java b/src/minecraft/assemblyline/api/IFilterable.java new file mode 100644 index 00000000..2783176c --- /dev/null +++ b/src/minecraft/assemblyline/api/IFilterable.java @@ -0,0 +1,16 @@ +package assemblyline.api; + +import net.minecraft.item.ItemStack; + +/** + * Applied to TileEntities that can accept a filter. + * + * @author Calclavia + * + */ +public interface IFilterable +{ + public void setFilter(ItemStack filter); + + public ItemStack getFilter(); +} diff --git a/src/minecraft/assemblyline/api/IManipulator.java b/src/minecraft/assemblyline/api/IManipulator.java index 1b4a0c9a..5f217fb0 100644 --- a/src/minecraft/assemblyline/api/IManipulator.java +++ b/src/minecraft/assemblyline/api/IManipulator.java @@ -1,6 +1,5 @@ package assemblyline.api; - /** * Interface applied to the manipulator. * diff --git a/src/minecraft/assemblyline/client/ClientProxy.java b/src/minecraft/assemblyline/client/ClientProxy.java index 3b1a0db3..78994962 100644 --- a/src/minecraft/assemblyline/client/ClientProxy.java +++ b/src/minecraft/assemblyline/client/ClientProxy.java @@ -6,7 +6,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import universalelectricity.core.vector.Vector3; -import assemblyline.client.gui.GuiRejector; import assemblyline.client.gui.GuiStamper; import assemblyline.client.render.BlockRenderingHandler; import assemblyline.client.render.RenderConveyorBelt; @@ -49,8 +48,6 @@ public class ClientProxy extends CommonProxy switch (ID) { - case GUI_REJECTOR: - return new GuiRejector(player.inventory, ((TileEntityRejector) tileEntity)); case GUI_STAMPER: return new GuiStamper(player.inventory, world, new Vector3(x, y, z)); } diff --git a/src/minecraft/assemblyline/client/gui/GuiStamper.java b/src/minecraft/assemblyline/client/gui/GuiStamper.java index 70062e23..61910078 100644 --- a/src/minecraft/assemblyline/client/gui/GuiStamper.java +++ b/src/minecraft/assemblyline/client/gui/GuiStamper.java @@ -28,7 +28,7 @@ public class GuiStamper extends GuiContainer protected void drawGuiContainerForegroundLayer(int par1, int par2) { this.fontRenderer.drawString(TranslationHelper.getLocal("tile.stamper.name"), 68, 6, 4210752); - this.fontRenderer.drawString(TranslationHelper.getLocal("assemblyline.gui.crafting")+":", 25, 55, 4210752); + this.fontRenderer.drawString(TranslationHelper.getLocal("assemblyline.gui.crafting") + ":", 25, 55, 4210752); } /** diff --git a/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java b/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java index 384bfedc..4285867c 100644 --- a/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java +++ b/src/minecraft/assemblyline/client/render/BlockRenderingHandler.java @@ -11,7 +11,6 @@ import assemblyline.client.model.ModelConveyorBelt; import assemblyline.client.model.ModelManipulator; import assemblyline.client.model.ModelSorter; import assemblyline.common.AssemblyLine; -import assemblyline.common.machine.BlockMulti.MachineType; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; @@ -39,33 +38,30 @@ public class BlockRenderingHandler implements ISimpleBlockRenderingHandler modelConveyorBelt.render(0.0625F, 0, false, false, false); GL11.glPopMatrix(); } - if (block.blockID == AssemblyLine.blockDetector.blockID) + else if (block.blockID == AssemblyLine.blockDetector.blockID) { RenderDetector.render(false, new Vector3()); } - else if (block.blockID == AssemblyLine.blockMulti.blockID) + else if (block.blockID == AssemblyLine.blockRejector.blockID) { - if (metadata == MachineType.REJECTOR.metadata) - { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "sorter.png")); - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glRotatef(-90f, 0f, 1f, 0f); - modelEjector.renderMain(0.0625F); - modelEjector.renderPiston(0.0625F, 1); - GL11.glPopMatrix(); - } - else if (metadata == MachineType.MANIPULATOR.metadata) - { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "manipulator1.png")); - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glRotatef(-90f, 0f, 1f, 0f); - modelInjector.render(0.0625F, true, 0); - GL11.glPopMatrix(); - } + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "sorter.png")); + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glRotatef(-90f, 0f, 1f, 0f); + modelEjector.renderMain(0.0625F); + modelEjector.renderPiston(0.0625F, 1); + GL11.glPopMatrix(); + } + else if (block.blockID == AssemblyLine.blockManipulator.blockID) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "manipulator1.png")); + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glRotatef(-90f, 0f, 1f, 0f); + modelInjector.render(0.0625F, true, 0); + GL11.glPopMatrix(); } } diff --git a/src/minecraft/assemblyline/client/render/RenderCrate.java b/src/minecraft/assemblyline/client/render/RenderCrate.java index 9f3c6069..c13803e2 100644 --- a/src/minecraft/assemblyline/client/render/RenderCrate.java +++ b/src/minecraft/assemblyline/client/render/RenderCrate.java @@ -151,7 +151,6 @@ public class RenderCrate extends TileEntitySpecialRenderer // Find Center GL11.glTranslatef(displayWidth / 2, 1F, displayHeight / 2); GL11.glRotatef(-90, 1, 0, 0); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); FontRenderer fontRenderer = this.getFontRenderer(); int requiredWidth = Math.max(fontRenderer.getStringWidth(text), 1); @@ -166,7 +165,7 @@ public class RenderCrate extends TileEntitySpecialRenderer { scale = Math.min(scale, maxScale); } - + GL11.glScalef(scale, -scale, scale); GL11.glDepthMask(false); @@ -179,11 +178,9 @@ public class RenderCrate extends TileEntitySpecialRenderer offsetY = (realHeight - requiredHeight) / 2; GL11.glDisable(GL11.GL_LIGHTING); - fontRenderer.drawString(text, offsetX - (realWidth / 2), 1 + offsetY - (realHeight / 2), 1); + fontRenderer.drawString("\u00a7f" + text, offsetX - (realWidth / 2), 1 + offsetY - (realHeight / 2), 1); GL11.glEnable(GL11.GL_LIGHTING); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDepthMask(true); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); GL11.glPopMatrix(); diff --git a/src/minecraft/assemblyline/client/render/RenderSorter.java b/src/minecraft/assemblyline/client/render/RenderSorter.java index f68f2732..c61bf3bd 100644 --- a/src/minecraft/assemblyline/client/render/RenderSorter.java +++ b/src/minecraft/assemblyline/client/render/RenderSorter.java @@ -16,8 +16,9 @@ public class RenderSorter extends TileEntitySpecialRenderer private void renderAModelAt(TileEntityRejector tileEntity, double x, double y, double z, float f) { boolean fire = tileEntity.firePiston; - int face = tileEntity.getDirection(tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord)); + int face = tileEntity.getDirection().ordinal(); int pos = 0; + if (fire) { pos = 8; diff --git a/src/minecraft/assemblyline/common/AssemblyLine.java b/src/minecraft/assemblyline/common/AssemblyLine.java index 6a0bc9cc..52e8efeb 100644 --- a/src/minecraft/assemblyline/common/AssemblyLine.java +++ b/src/minecraft/assemblyline/common/AssemblyLine.java @@ -3,8 +3,6 @@ package assemblyline.common; import java.io.File; import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.Configuration; @@ -18,14 +16,12 @@ import universalelectricity.prefab.network.PacketManager; import assemblyline.common.block.BlockCrate; import assemblyline.common.block.BlockEngineerTable; import assemblyline.common.block.ItemBlockCrate; -import assemblyline.common.machine.BlockMulti; -import assemblyline.common.machine.BlockMulti.MachineType; -import assemblyline.common.machine.ItemBlockMulti; +import assemblyline.common.machine.BlockManipulator; import assemblyline.common.machine.belt.BlockConveyorBelt; import assemblyline.common.machine.detector.BlockDetector; import assemblyline.common.machine.filter.BlockStamper; import assemblyline.common.machine.filter.ItemFilter; -import cpw.mods.fml.common.ICraftingHandler; +import assemblyline.common.machine.machine.BlockRejector; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; @@ -37,7 +33,6 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid = AssemblyLine.CHANNEL, name = AssemblyLine.NAME, version = AssemblyLine.VERSION, dependencies = "required-after:BasicComponents") @NetworkMod(channels = { AssemblyLine.CHANNEL }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) @@ -67,11 +62,12 @@ public class AssemblyLine public static final int BLOCK_ID_PREFIX = 3030; public static Block blockConveyorBelt; - public static Block blockMulti; + public static Block blockManipulator; public static Block blockEngineerTable; public static Block blockCrate; public static Block blockStamper; public static Block blockDetector; + public static Block blockRejector; public static final int ITEM_ID_PREFIX = 3030; public static Item itemFilter; @@ -84,11 +80,12 @@ public class AssemblyLine CONFIGURATION.load(); blockConveyorBelt = new BlockConveyorBelt(CONFIGURATION.getBlock("Conveyor Belt", BLOCK_ID_PREFIX).getInt()); - blockMulti = new BlockMulti(CONFIGURATION.getBlock("Machine", BLOCK_ID_PREFIX + 1).getInt()); + blockManipulator = new BlockManipulator(CONFIGURATION.getBlock("Manipulator", BLOCK_ID_PREFIX + 1).getInt()); blockEngineerTable = new BlockEngineerTable(CONFIGURATION.getBlock("Architect's Table", BLOCK_ID_PREFIX + 2).getInt()); blockCrate = new BlockCrate(CONFIGURATION.getBlock("Crate", BLOCK_ID_PREFIX + 3).getInt(), 0); blockStamper = new BlockStamper(CONFIGURATION.getBlock("Stamper", BLOCK_ID_PREFIX + 4).getInt(), 0); blockDetector = new BlockDetector(CONFIGURATION.getBlock("Detector", BLOCK_ID_PREFIX + 5).getInt(), 1); + blockRejector = new BlockRejector(CONFIGURATION.getBlock("Rejector", BLOCK_ID_PREFIX + 6).getInt()); itemFilter = new ItemFilter(CONFIGURATION.getBlock("Filter", ITEM_ID_PREFIX).getInt()); CONFIGURATION.save(); @@ -96,29 +93,14 @@ public class AssemblyLine NetworkRegistry.instance().registerGuiHandler(this, this.proxy); GameRegistry.registerBlock(blockConveyorBelt, "Conveyor Belt"); GameRegistry.registerBlock(blockCrate, ItemBlockCrate.class, "Crate"); - GameRegistry.registerBlock(blockMulti, ItemBlockMulti.class, "Machine"); - GameRegistry.registerBlock(blockEngineerTable, "Engineer's Table"); + GameRegistry.registerBlock(blockManipulator, "Manipulator"); + // GameRegistry.registerBlock(blockEngineerTable, "Engineer's Table"); GameRegistry.registerBlock(blockStamper, "Stamper"); GameRegistry.registerBlock(blockDetector, "Detector"); + GameRegistry.registerBlock(blockRejector, "Rejector"); UpdateNotifier.INSTANCE.checkUpdate(NAME, VERSION, "http://calclavia.com/downloads/al/recommendedversion.txt"); - GameRegistry.registerCraftingHandler(new ICraftingHandler() - { - @Override - public void onCrafting(EntityPlayer player, ItemStack itemStack, IInventory craftMatrix) - { - // TODO Make this work for the filter - System.out.println("TEST: " + craftMatrix.getSizeInventory()); - } - - @Override - public void onSmelting(EntityPlayer player, ItemStack item) - { - - } - }); - proxy.preInit(); } @@ -129,12 +111,6 @@ public class AssemblyLine System.out.println(NAME + " Loaded: " + TranslationHelper.loadLanguages(LANGUAGE_PATH, LANGUAGES_SUPPORTED) + " languages."); - // Add Names - for (MachineType type : MachineType.values()) - { - LanguageRegistry.addName(new ItemStack(blockMulti, 1, type.metadata), type.name); - } - // Filter GameRegistry.addRecipe(new ShapedOreRecipe(itemFilter, new Object[] { "R", "P", "I", 'P', Item.paper, 'R', Item.redstone, 'I', new ItemStack(Item.dyePowder, 1, 0) })); @@ -151,10 +127,10 @@ public class AssemblyLine GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockConveyorBelt, 4), new Object[] { "III", "WMW", 'I', "ingotSteel", 'W', Block.wood, 'M', "motor" })); // Rejector - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockMulti, 1, MachineType.REJECTOR.metadata), new Object[] { "WPW", "@R@", '@', "plateSteel", 'R', Item.redstone, 'P', Block.pistonBase, 'C', "basicCircuit", 'W', "copperWire" })); + GameRegistry.addRecipe(new ShapedOreRecipe(blockRejector, new Object[] { "WPW", "@R@", '@', "plateSteel", 'R', Item.redstone, 'P', Block.pistonBase, 'C', "basicCircuit", 'W', "copperWire" })); // Manipulator - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(blockMulti, 1, MachineType.MANIPULATOR.metadata), new Object[] { Block.dispenser, "basicCircuit" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(blockManipulator, new Object[] { Block.dispenser, "basicCircuit" })); UETab.setItemStack(new ItemStack(blockConveyorBelt)); } diff --git a/src/minecraft/assemblyline/common/CommonProxy.java b/src/minecraft/assemblyline/common/CommonProxy.java index 0295dc8d..e0ed81f8 100644 --- a/src/minecraft/assemblyline/common/CommonProxy.java +++ b/src/minecraft/assemblyline/common/CommonProxy.java @@ -5,7 +5,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import universalelectricity.core.vector.Vector3; import assemblyline.common.block.TileEntityCrate; -import assemblyline.common.machine.ContainerRejector; import assemblyline.common.machine.TileEntityManipulator; import assemblyline.common.machine.TileEntityRejector; import assemblyline.common.machine.belt.TileEntityConveyorBelt; @@ -16,7 +15,6 @@ import cpw.mods.fml.common.registry.GameRegistry; public class CommonProxy implements IGuiHandler { - public static final int GUI_REJECTOR = 0; public static final int GUI_STAMPER = 1; public static final int GUI_ARCHITECHT_TABLE = 2; @@ -41,8 +39,6 @@ public class CommonProxy implements IGuiHandler switch (ID) { - case GUI_REJECTOR: - return new ContainerRejector(player.inventory, ((TileEntityRejector) tileEntity)); case GUI_STAMPER: return new ContainerStamper(player.inventory, world, new Vector3(x, y, z)); } diff --git a/src/minecraft/assemblyline/common/block/ItemBlockCrate.java b/src/minecraft/assemblyline/common/block/ItemBlockCrate.java index 86b3e259..a356e07b 100644 --- a/src/minecraft/assemblyline/common/block/ItemBlockCrate.java +++ b/src/minecraft/assemblyline/common/block/ItemBlockCrate.java @@ -46,7 +46,7 @@ public class ItemBlockCrate extends ItemBlock if (containingStack != null) { - player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 5, (int)((float) containingStack.stackSize / (float) TileEntityCrate.MAX_LIMIT) * 5)); + player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 5, (int) ((float) containingStack.stackSize / (float) TileEntityCrate.MAX_LIMIT) * 5)); } } } diff --git a/src/minecraft/assemblyline/common/machine/BlockManipulator.java b/src/minecraft/assemblyline/common/machine/BlockManipulator.java new file mode 100644 index 00000000..9fb844fb --- /dev/null +++ b/src/minecraft/assemblyline/common/machine/BlockManipulator.java @@ -0,0 +1,85 @@ +package assemblyline.common.machine; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import universalelectricity.core.UniversalElectricity; +import universalelectricity.prefab.UETab; +import assemblyline.client.render.BlockRenderingHandler; +import assemblyline.common.machine.detector.BlockFilterable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * A block that manipulates item movement between inventories. + * + * @author Calclavia + * + */ +public class BlockManipulator extends BlockFilterable +{ + public BlockManipulator(int id) + { + super("manipulator", id, UniversalElectricity.machine, UETab.INSTANCE); + this.setBlockBounds(0, 0, 0, 1, 0.3f, 1); + } + + @Override + public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int par2, int par3, int par4) + { + return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double) par2, (double) par3, (double) par4, (double) par2 + 1, (double) par3 + 1, (double) par4 + 1); + } + + @Override + public boolean onSneakMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileEntityManipulator) + { + ((TileEntityManipulator) tileEntity).selfPulse = !((TileEntityManipulator) tileEntity).selfPulse; + } + + return true; + } + + @Override + public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileEntityManipulator) + { + ((TileEntityManipulator) tileEntity).toggleOutput(); + return true; + } + + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1, int metadata) + { + return new TileEntityManipulator(); + } + + @SideOnly(Side.CLIENT) + @Override + public int getRenderType() + { + return BlockRenderingHandler.BLOCK_RENDER_ID; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } +} diff --git a/src/minecraft/assemblyline/common/machine/BlockMulti.java b/src/minecraft/assemblyline/common/machine/BlockMulti.java deleted file mode 100644 index c3625eb3..00000000 --- a/src/minecraft/assemblyline/common/machine/BlockMulti.java +++ /dev/null @@ -1,254 +0,0 @@ -package assemblyline.common.machine; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import universalelectricity.core.UniversalElectricity; -import universalelectricity.prefab.BlockMachine; -import universalelectricity.prefab.UETab; -import universalelectricity.prefab.implement.IRedstoneReceptor; -import universalelectricity.prefab.multiblock.IBlockActivate; -import assemblyline.client.render.BlockRenderingHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -/** - * A metadata block containing a bunch of machines with direction. - * - * @author Darkguardsman, Calclavia - * - */ -public class BlockMulti extends BlockMachine -{ - public static enum MachineType - { - REJECTOR("Rejector", 0, 0, TileEntityRejector.class), MANIPULATOR("Manipulator", 4, -1, TileEntityManipulator.class), INVALID_1("Invalid", 8, -1, null), INVALID_2("Invalid", 12, -1, null); - - public String name; - public int metadata; - public int guiID; - public Class tileEntity; - - MachineType(String name, int metadata, int guiID, Class tileEntity) - { - this.name = name; - this.metadata = metadata; - this.guiID = guiID; - this.tileEntity = tileEntity; - } - - public static MachineType get(int metadata) - { - for (MachineType value : MachineType.values()) - { - if (metadata >= value.metadata && metadata < value.metadata + 4) { return value; } - } - - return null; - } - - /** - * Gets the direction based on the metadata - * - * @return A direction value from 0 to 4. - */ - public static int getDirection(int metadata) - { - return metadata - MachineType.get(metadata).metadata; - } - - /** - * @param currentDirection - An integer from 0 to 4. - * @return The metadata this block should change into. - */ - public int getNextDirectionMeta(int currentDirection) - { - currentDirection++; - - if (currentDirection >= 4) - { - currentDirection = 0; - } - - return currentDirection + this.metadata; - } - - /** - * Creates a new TIleEntity. - */ - public TileEntity instantiateTileEntity() - { - try - { - return this.tileEntity.newInstance(); - } - catch (Exception e) - { - e.printStackTrace(); - return null; - } - } - } - - public BlockMulti(int id) - { - super("AssemblyLineMachine", id, UniversalElectricity.machine); - this.setCreativeTab(UETab.INSTANCE); - } - - @Override - public int damageDropped(int metadata) - { - return MachineType.get(metadata).metadata; - } - - @Override - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) - { - if (!world.isRemote) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof IBlockActivate) - { - ((IBlockActivate) tileEntity).onActivated(entityPlayer); - } - } - return true; - } - - @Override - public void onBlockPlacedBy(World par1World, int x, int y, int z, EntityLiving par5EntityLiving) - { - int metadata = par1World.getBlockMetadata(x, y, z); - - int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - - switch (angle) - { - case 0: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 0); - break; - case 1: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 3); - break; - case 2: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 1); - break; - case 3: - par1World.setBlockMetadataWithNotify(x, y, z, metadata + 2); - break; - } - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - int metadata = par1World.getBlockMetadata(x, y, z); - MachineType machineType = MachineType.get(metadata); - par1World.setBlockAndMetadataWithNotify(x, y, z, this.blockID, machineType.getNextDirectionMeta(MachineType.getDirection(metadata))); - return true; - } - - @Override - public boolean onSneakUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - int metadata = par1World.getBlockMetadata(x, y, z); - - if (MachineType.get(metadata) == MachineType.MANIPULATOR) - { - TileEntityManipulator tileEntity = (TileEntityManipulator) par1World.getBlockTileEntity(x, y, z); - tileEntity.toggleOutput(); - - return true; - } - else - { - return this.onUseWrench(par1World, x, y, z, par5EntityPlayer, side, hitX, hitY, hitZ); - } - } - - @Override - public void onNeighborBlockChange(World par1World, int x, int y, int z, int side) - { - super.onNeighborBlockChange(par1World, x, y, z, side); - - TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof IRedstoneReceptor) - { - if (par1World.isBlockIndirectlyGettingPowered(x, y, z)) - { - ((IRedstoneReceptor) par1World.getBlockTileEntity(x, y, z)).onPowerOn(); - } - } - } - - /** - * Returns the bounding box of the wired rectangular prism to render. - */ - @Override - public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int x, int y, int z) - { - return this.getCollisionBoundingBoxFromPool(par1World, x, y, z); - } - - /** - * Returns a bounding box from the pool of bounding boxes (this means this box can change after - * the pool has been cleared to be reused) - */ - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int x, int y, int z) - { - int metadata = par1World.getBlockMetadata(x, y, z); - - if (MachineType.get(metadata) == MachineType.MANIPULATOR) { return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double) x + this.minX, (double) y + this.minY, (double) z + this.minZ, (double) x + this.maxX, (double) y + 0.3f, (double) z + this.maxZ); } - - return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double) x + this.minX, (double) y + this.minY, (double) z + this.minZ, (double) x + this.maxX, (double) y + this.maxY, (double) z + this.maxZ); - } - - @Override - public TileEntity createNewTileEntity(World var1, int metadata) - { - return MachineType.get(metadata).instantiateTileEntity(); - } - - @SideOnly(Side.CLIENT) - @Override - public int getRenderType() - { - return BlockRenderingHandler.BLOCK_RENDER_ID; - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean renderAsNormalBlock() - { - return false; - } - - @Override - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for (MachineType type : MachineType.values()) - { - if (type.tileEntity != null) - { - par3List.add(new ItemStack(par1, 1, type.metadata)); - } - } - } - -} diff --git a/src/minecraft/assemblyline/common/machine/ItemBlockMulti.java b/src/minecraft/assemblyline/common/machine/ItemBlockMulti.java deleted file mode 100644 index d6fc2d7c..00000000 --- a/src/minecraft/assemblyline/common/machine/ItemBlockMulti.java +++ /dev/null @@ -1,26 +0,0 @@ -package assemblyline.common.machine; - -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import assemblyline.common.machine.BlockMulti.MachineType; - -public class ItemBlockMulti extends ItemBlock -{ - public ItemBlockMulti(int par1) - { - super(par1); - this.setHasSubtypes(true); - } - - @Override - public String getItemNameIS(ItemStack itemstack) - { - return MachineType.get(itemstack.getItemDamage()).name; - } - - @Override - public int getMetadata(int par1) - { - return MachineType.get(par1).metadata; - } -} diff --git a/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java b/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java index 854362ad..eb20748f 100644 --- a/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java +++ b/src/minecraft/assemblyline/common/machine/TileEntityManipulator.java @@ -17,18 +17,16 @@ import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import universalelectricity.core.vector.Vector3; import universalelectricity.prefab.implement.IRedstoneReceptor; -import universalelectricity.prefab.multiblock.IBlockActivate; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; import assemblyline.api.IManipulator; import assemblyline.common.AssemblyLine; -import assemblyline.common.machine.BlockMulti.MachineType; import com.google.common.io.ByteArrayDataInput; import cpw.mods.fml.common.network.PacketDispatcher; -public class TileEntityManipulator extends TileEntityAssemblyNetwork implements IRedstoneReceptor, IPacketReceiver, IManipulator, IBlockActivate +public class TileEntityManipulator extends TileEntityAssemblyNetwork implements IRedstoneReceptor, IPacketReceiver, IManipulator { public boolean selfPulse = false; @@ -81,7 +79,7 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements { this.isRedstonePowered = true; } - + /** * Finds the connected inventory and outputs the items upon a redstone pulse. */ @@ -218,6 +216,7 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements entityItem.motionX = 0; entityItem.motionZ = 0; entityItem.motionY /= 5; + entityItem.delayBeforeCanPickup = 30; worldObj.spawnEntityInWorld(entityItem); } @@ -421,7 +420,7 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements public ForgeDirection getBeltDirection() { - return ForgeDirection.getOrientation(MachineType.getDirection(this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord)) + 2); + return ForgeDirection.getOrientation(this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord)); } @Override @@ -452,11 +451,4 @@ public class TileEntityManipulator extends TileEntityAssemblyNetwork implements { this.isRedstonePowered = false; } - - @Override - public boolean onActivated(EntityPlayer entityPlayer) - { - this.selfPulse = !this.selfPulse; - return true; - } } diff --git a/src/minecraft/assemblyline/common/machine/TileEntityRejector.java b/src/minecraft/assemblyline/common/machine/TileEntityRejector.java index 7e27b4bf..1fde1b9e 100644 --- a/src/minecraft/assemblyline/common/machine/TileEntityRejector.java +++ b/src/minecraft/assemblyline/common/machine/TileEntityRejector.java @@ -1,5 +1,6 @@ package assemblyline.common.machine; +import java.util.ArrayList; import java.util.List; import net.minecraft.entity.Entity; @@ -16,12 +17,13 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.ForgeDirection; import universalelectricity.core.vector.Vector3; -import universalelectricity.prefab.multiblock.IBlockActivate; +import universalelectricity.prefab.TranslationHelper; +import universalelectricity.prefab.implement.IRotatable; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; +import assemblyline.api.IFilterable; import assemblyline.common.AssemblyLine; -import assemblyline.common.CommonProxy; -import assemblyline.common.machine.belt.TileEntityConveyorBelt; +import assemblyline.common.machine.filter.ItemFilter; import com.google.common.io.ByteArrayDataInput; @@ -32,12 +34,12 @@ import cpw.mods.fml.common.network.PacketDispatcher; * @author Darkguardsman * */ -public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPacketReceiver, IInventory, IBlockActivate +public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRotatable, IFilterable, IPacketReceiver, IInventory { /** * The items this container contains. */ - protected ItemStack[] containingItems = new ItemStack[this.getSizeInventory()]; + protected ItemStack[] containingItems = new ItemStack[1]; /** * Used to id the packet types @@ -55,10 +57,6 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa * on/off value for the GUI buttons */ public boolean[] guiButtons = new boolean[] { true, true, true, true, true }; - /** - * the belt found in the search area - */ - public TileEntityConveyorBelt beltSide = null; private int playerUsing = 0; @@ -74,45 +72,36 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa this.firePiston = false; // area to search for items - ForgeDirection searchPosition = Vector3.getOrientationFromSide(ForgeDirection.getOrientation(getDirection(meta)), ForgeDirection.SOUTH); - TileEntity tileEntity = worldObj.getBlockTileEntity(xCoord + searchPosition.offsetX, yCoord + searchPosition.offsetY, zCoord + searchPosition.offsetZ); - - // find the belt in that search area - if (tileEntity instanceof TileEntityConveyorBelt) - { - this.beltSide = (TileEntityConveyorBelt) tileEntity; - } - else - { - this.beltSide = null; - } + Vector3 searchPosition = new Vector3(this); + searchPosition.modifyPositionFromSide(this.getDirection()); + TileEntity tileEntity = searchPosition.getTileEntity(this.worldObj); try { - // search area bound box - AxisAlignedBB bounds = AxisAlignedBB.getBoundingBox(xCoord + searchPosition.offsetX, yCoord + searchPosition.offsetY, zCoord + searchPosition.offsetZ, xCoord + searchPosition.offsetX + 1, yCoord + searchPosition.offsetY + 1, zCoord + searchPosition.offsetZ + 1); - // EntityItem list - List itemsBehind = worldObj.getEntitiesWithinAABB(EntityItem.class, bounds); - boolean flag = false; - if (itemsBehind.size() > 0 && this.isRunning()) + if (this.isRunning()) { - // for every item found check - // if can be thrown then throw - // item off belt if it can - for (EntityItem entity : itemsBehind) + /** + * Find all entities in the position in which this block is facing and attempt + * to push it out of the way. + */ + AxisAlignedBB bounds = AxisAlignedBB.getBoundingBox(searchPosition.x, searchPosition.y, searchPosition.z, searchPosition.x + 1, searchPosition.y + 1, searchPosition.z + 1); + List entitiesInFront = this.worldObj.getEntitiesWithinAABB(Entity.class, bounds); + + for (Entity entity : entitiesInFront) { - if (this.canItemBeThrow(entity)) + if (this.canEntityBeThrow(entity)) { - this.throwItem(searchPosition, entity); + this.throwItem(this.getDirection(), entity); flag = true; } } } - // send packet with animation data - // if an item was rejected from - // the area + + /** + * If a push happened, send a packet to the client to notify it for an animation. + */ if (!this.worldObj.isRemote && flag) { Packet packet = PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.getPacketData(PacketTypes.ANIMATION)); @@ -148,65 +137,37 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa { this.firePiston = true; - entity.motionX = (double) side.offsetX * 0.15; + entity.motionX = (double) side.offsetX * 0.1; entity.motionY += 0.10000000298023224D; - entity.motionZ = (double) side.offsetZ * 0.15; + entity.motionZ = (double) side.offsetZ * 0.1; } - public boolean canItemBeThrow(Entity entity) + public boolean canEntityBeThrow(Entity entity) { // TODO Add other things than items if (entity instanceof EntityItem) { - EntityItem itemE = (EntityItem) entity; - ItemStack item = itemE.func_92014_d(); + EntityItem entityItem = (EntityItem) entity; + ItemStack itemStack = entityItem.func_92014_d(); - if (this.guiButtons[4]) + if (this.containingItems[0] != null) { - // reject matching items - for (int i = 0; i < this.containingItems.length; i++) + ArrayList checkStacks = ItemFilter.getFilters(this.containingItems[0]); + + // Reject matching items + for (int i = 0; i < checkStacks.size(); i++) { - if (containingItems[i] != null && guiButtons[i]) + if (checkStacks.get(i) != null) { - if (containingItems[i].itemID == item.itemID && containingItems[i].getItemDamage() == item.getItemDamage()) { return true; } + if (checkStacks.get(i).isItemEqual(itemStack)) { return true; } } } - return false; - - } - else if (!this.guiButtons[4]) - { - // reject all but matching items - for (int i = 0; i < this.containingItems.length; i++) - { - if (containingItems[i] != null && guiButtons[i]) - { - if (containingItems[i].itemID == item.itemID && containingItems[i].getItemDamage() == item.getItemDamage()) { return false; } - } - } - return true; } } + return false; } - public byte getDirection(int meta) - { - - switch (meta) - { - case 0: - return 2; - case 1: - return 5; - case 2: - return 3; - case 3: - return 4; - } - return 0; - } - /** * Used to change any one of the boolean value of on/off array After changing the value if it * was changed client side it will send a packet server side with the changes @@ -290,13 +251,13 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa @Override public String getInvName() { - return "Sorter"; + return TranslationHelper.getLocal("tile.rejector.name"); } @Override public int getSizeInventory() { - return 4; + return this.containingItems.length; } /** @@ -454,9 +415,26 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IPa } @Override - public boolean onActivated(EntityPlayer entityPlayer) + public void setFilter(ItemStack filter) { - entityPlayer.openGui(AssemblyLine.instance, CommonProxy.GUI_REJECTOR, this.worldObj, this.xCoord, this.yCoord, this.zCoord); - return true; + this.setInventorySlotContents(0, filter); + } + + @Override + public ItemStack getFilter() + { + return this.getStackInSlot(0); + } + + @Override + public ForgeDirection getDirection() + { + return ForgeDirection.getOrientation(this.getBlockMetadata()); + } + + @Override + public void setDirection(ForgeDirection facingDirection) + { + this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, facingDirection.ordinal()); } } diff --git a/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java b/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java index 6b3759e6..59b2c716 100644 --- a/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java +++ b/src/minecraft/assemblyline/common/machine/belt/BlockConveyorBelt.java @@ -64,17 +64,18 @@ public class BlockConveyorBelt extends BlockMachine switch (original) { case 2: - change = 5; - break; - case 5: change = 4; break; + case 3: + change = 5; + break; case 4: change = 3; break; - case 3: + case 5: change = 2; break; + } world.setBlockMetadataWithNotify(x, y, z, change); @@ -123,29 +124,36 @@ public class BlockConveyorBelt extends BlockMachine // Move the entity based on the conveyor belt's direction. entity.addVelocity(direction.offsetX * tileEntity.acceleration * modifier, 0, direction.offsetZ * tileEntity.acceleration * modifier); - if (direction.offsetX != 0 && Math.abs(entity.motionX) > Math.abs(direction.offsetX * tileEntity.maxSpeed)) + if (direction.offsetX != 0 && Math.abs(entity.motionX) > tileEntity.maxSpeed) { entity.motionX = direction.offsetX * tileEntity.maxSpeed; + entity.motionZ = 0; } - if (direction.offsetZ != 0 && Math.abs(entity.motionZ) > Math.abs(direction.offsetZ * tileEntity.maxSpeed)) + if (direction.offsetZ != 0 && Math.abs(entity.motionZ) > tileEntity.maxSpeed) { entity.motionZ = direction.offsetZ * tileEntity.maxSpeed; + entity.motionX = 0; } - // Attempt to move entity to the center of the belt to prevent them - // from flying off. - if (direction.offsetX != 0) + if (entity instanceof EntityItem) { - double difference = (z + 0.5) - entity.posZ; - entity.motionZ += difference * 0.015; - // entity.posZ = z + 0.5; - } - else if (direction.offsetZ != 0) - { - double difference = (x + 0.5) - entity.posX; - entity.motionX += difference * 0.015; - // entity.posX = z + 0.5; + if (direction.offsetX != 0) + { + double difference = (z + 0.5) - entity.posZ; + entity.motionZ += difference * 0.006; + // entity.posZ = z + 0.5; + } + else if (direction.offsetZ != 0) + { + double difference = (x + 0.5) - entity.posX; + entity.motionX += difference * 0.006; + // /entity.posX = x + 0.5; + } + + ((EntityItem) entity).age++; + ((EntityItem) entity).delayBeforeCanPickup = 2; + entity.onGround = false; } if (slantType == SlantType.UP) @@ -163,12 +171,6 @@ public class BlockConveyorBelt extends BlockMachine } } - if (entity instanceof EntityItem) - { - ((EntityItem) entity).age++; - ((EntityItem) entity).delayBeforeCanPickup = 2; - entity.onGround = false; - } } } diff --git a/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java b/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java index d2bc7117..e00b8a4b 100644 --- a/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java +++ b/src/minecraft/assemblyline/common/machine/belt/TileEntityConveyorBelt.java @@ -33,8 +33,8 @@ public class TileEntityConveyorBelt extends TileEntityAssemblyNetwork implements /** * Joules required to run this thing. */ - public float acceleration = 0.01f; - public float maxSpeed = 0.3f; + public final float acceleration = 0.01f; + public final float maxSpeed = 0.1f; public float wheelRotation = 0; private SlantType slantType = SlantType.NONE; diff --git a/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java b/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java index 79bf0ed1..87d71e24 100644 --- a/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java +++ b/src/minecraft/assemblyline/common/machine/detector/BlockDetector.java @@ -124,21 +124,6 @@ public class BlockDetector extends BlockFilterable return false; } - @Override - public boolean canBlockStay(World world, int x, int y, int z) - { - if (world.isBlockSolidOnSide(x, y + 1, z, ForgeDirection.DOWN)) - return true; - - return false; - } - - @Override - public boolean canPlaceBlockAt(World world, int x, int y, int z) - { - return canBlockStay(world, x, y, z); - } - @Override public TileEntity createNewTileEntity(World world) { diff --git a/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java b/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java index 8b619dbe..ac1d993e 100644 --- a/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java +++ b/src/minecraft/assemblyline/common/machine/detector/BlockFilterable.java @@ -2,12 +2,16 @@ package assemblyline.common.machine.detector; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; 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.util.MathHelper; import net.minecraft.world.World; import universalelectricity.prefab.BlockMachine; +import universalelectricity.prefab.implement.IRedstoneReceptor; +import assemblyline.api.IFilterable; import assemblyline.common.machine.filter.ItemFilter; /** @@ -32,9 +36,9 @@ public abstract class BlockFilterable extends BlockMachine if (tileEntity != null) { - if (tileEntity instanceof TileEntityDetector) + if (tileEntity instanceof IFilterable) { - ItemStack containingStack = ((TileEntityDetector) tileEntity).getStackInSlot(0); + ItemStack containingStack = ((IFilterable) tileEntity).getFilter(); if (containingStack != null) { @@ -45,7 +49,7 @@ public abstract class BlockFilterable extends BlockMachine world.spawnEntityInWorld(dropStack); } - ((TileEntityDetector) tileEntity).setInventorySlotContents(0, null); + ((IFilterable) tileEntity).setFilter(null); return true; } else @@ -54,7 +58,7 @@ public abstract class BlockFilterable extends BlockMachine { if (player.getCurrentEquippedItem().getItem() instanceof ItemFilter) { - ((TileEntityDetector) tileEntity).setInventorySlotContents(0, player.getCurrentEquippedItem()); + ((IFilterable) tileEntity).setFilter(player.getCurrentEquippedItem()); player.inventory.setInventorySlotContents(player.inventory.currentItem, null); return true; } @@ -67,4 +71,72 @@ public abstract class BlockFilterable extends BlockMachine return false; } + @Override + public void onNeighborBlockChange(World par1World, int x, int y, int z, int side) + { + super.onNeighborBlockChange(par1World, x, y, z, side); + + TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof IRedstoneReceptor) + { + if (par1World.isBlockIndirectlyGettingPowered(x, y, z)) + { + ((IRedstoneReceptor) par1World.getBlockTileEntity(x, y, z)).onPowerOn(); + } + } + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving par5EntityLiving) + { + int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int change = 2; + + switch (angle) + { + case 0: + change = 2; + break; + case 1: + change = 5; + break; + case 2: + change = 3; + break; + case 3: + change = 4; + break; + + } + world.setBlockMetadataWithNotify(x, y, z, change); + } + + @Override + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) + { + int original = world.getBlockMetadata(x, y, z); + int change = 2; + + switch (original) + { + case 2: + change = 4; + break; + case 3: + change = 5; + break; + case 4: + change = 3; + break; + case 5: + change = 2; + break; + + } + + world.setBlockMetadataWithNotify(x, y, z, change); + + return true; + } } diff --git a/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java b/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java index 7d8111ae..d11c59e7 100644 --- a/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java +++ b/src/minecraft/assemblyline/common/machine/detector/TileEntityDetector.java @@ -19,12 +19,13 @@ import universalelectricity.prefab.implement.IRedstoneProvider; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; import universalelectricity.prefab.tile.TileEntityAdvanced; +import assemblyline.api.IFilterable; import assemblyline.common.AssemblyLine; import assemblyline.common.machine.filter.ItemFilter; import com.google.common.io.ByteArrayDataInput; -public class TileEntityDetector extends TileEntityAdvanced implements IInventory, IRedstoneProvider, IPacketReceiver +public class TileEntityDetector extends TileEntityAdvanced implements IFilterable, IInventory, IRedstoneProvider, IPacketReceiver { private boolean powering = false; private boolean isInverted = false; @@ -327,4 +328,16 @@ public class TileEntityDetector extends TileEntityAdvanced implements IInventory return this.isPoweringTo(side); } + @Override + public void setFilter(ItemStack filter) + { + this.setInventorySlotContents(0, filter); + } + + @Override + public ItemStack getFilter() + { + return this.getStackInSlot(0); + } + } diff --git a/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java b/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java index 14185307..ee1c4fa1 100644 --- a/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java +++ b/src/minecraft/assemblyline/common/machine/filter/ContainerStamper.java @@ -165,7 +165,10 @@ public class ContainerStamper extends Container implements IInventory @Override public void setInventorySlotContents(int par1, ItemStack par2ItemStack) { - this.containingItems[par1] = par2ItemStack; + if (par1 < this.containingItems.length) + { + this.containingItems[par1] = par2ItemStack; + } } @Override @@ -221,36 +224,22 @@ public class ContainerStamper extends Container implements IInventory } /** - * TODO WORK IN PROGRESS. Make filters able to autocraft into its item based on what is in the player's inventory - - boolean didCraft = false; - - if (this.getStackInSlot(3) != null) - { - if (this.getStackInSlot(3).getItem() instanceof ItemFilter) - { - ArrayList filters = ItemFilter.getFilters(this.getStackInSlot(3)); - - if (filters.size() > 0) - { - ItemStack outputStack = filters.get(0); - - if (outputStack != null) - { - if (this.getIdealRecipe(outputStack) != null) - { - this.setInventorySlotContents(4, outputStack); - didCraft = true; - } - } - } - } - } - - if (!didCraft) - { - this.setInventorySlotContents(4, null); - } */ + * TODO WORK IN PROGRESS. Make filters able to autocraft into its item based on what is in + * the player's inventory + * + * boolean didCraft = false; + * + * if (this.getStackInSlot(3) != null) { if (this.getStackInSlot(3).getItem() instanceof + * ItemFilter) { ArrayList filters = + * ItemFilter.getFilters(this.getStackInSlot(3)); + * + * if (filters.size() > 0) { ItemStack outputStack = filters.get(0); + * + * if (outputStack != null) { if (this.getIdealRecipe(outputStack) != null) { + * this.setInventorySlotContents(4, outputStack); didCraft = true; } } } } } + * + * if (!didCraft) { this.setInventorySlotContents(4, null); } + */ } /** diff --git a/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java b/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java index 7832c1cb..ffb9dd17 100644 --- a/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java +++ b/src/minecraft/assemblyline/common/machine/filter/ItemFilter.java @@ -16,7 +16,7 @@ public class ItemFilter extends Item { super(id); this.setItemName("filter"); - this.setIconIndex(Item.paper.getIconFromDamage(0)); + this.setIconIndex(58); this.setCreativeTab(UETab.INSTANCE); this.setHasSubtypes(true); } diff --git a/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java b/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java index 345539e9..07fb26f6 100644 --- a/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java +++ b/src/minecraft/assemblyline/common/machine/filter/SlotFilterResult.java @@ -33,13 +33,10 @@ public class SlotFilterResult extends Slot } } /* - if (this.inventory.getStackInSlot(1) != null) - { - this.inventory.getStackInSlot(1).stackSize--; - if (this.inventory.getStackInSlot(1).stackSize <= 1) - { - this.inventory.setInventorySlotContents(1, null); - } - }*/ + * if (this.inventory.getStackInSlot(1) != null) { + * this.inventory.getStackInSlot(1).stackSize--; if + * (this.inventory.getStackInSlot(1).stackSize <= 1) { + * this.inventory.setInventorySlotContents(1, null); } } + */ } } diff --git a/src/minecraft/assemblyline/common/machine/machine/BlockRejector.java b/src/minecraft/assemblyline/common/machine/machine/BlockRejector.java new file mode 100644 index 00000000..a4c52785 --- /dev/null +++ b/src/minecraft/assemblyline/common/machine/machine/BlockRejector.java @@ -0,0 +1,45 @@ +package assemblyline.common.machine.machine; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import universalelectricity.core.UniversalElectricity; +import universalelectricity.prefab.UETab; +import assemblyline.client.render.BlockRenderingHandler; +import assemblyline.common.machine.TileEntityRejector; +import assemblyline.common.machine.detector.BlockFilterable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockRejector extends BlockFilterable +{ + public BlockRejector(int id) + { + super("rejector", id, UniversalElectricity.machine, UETab.INSTANCE); + } + + @Override + public TileEntity createNewTileEntity(World var1, int metadata) + { + return new TileEntityRejector(); + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public int getRenderType() + { + return BlockRenderingHandler.BLOCK_RENDER_ID; + } + +}