From 154cdb6f33685ef4da939d564ee760fa80a80924 Mon Sep 17 00:00:00 2001 From: AlexanderMaster Date: Sun, 22 Jun 2014 18:04:50 +0200 Subject: [PATCH 1/2] Stating to work on the assembler --- .../net/quetzi/bluepower/CommonProxy.java | 16 ++ .../blocks/machines/BlockAssembler.java | 69 ++++++ .../bluepower/client/gui/GUIHandler.java | 7 +- .../bluepower/client/gui/GuiAssembler.java | 49 ++++ .../containers/ContainerAssembler.java | 193 ++++++++++++++++ .../net/quetzi/bluepower/init/BPBlocks.java | 8 +- .../quetzi/bluepower/references/GuiIDs.java | 31 +-- .../net/quetzi/bluepower/references/Refs.java | 1 + .../bluepower/tileentities/TileEntities.java | 6 +- .../tileentities/tier2/TileAssembler.java | 216 ++++++++++++++++++ 10 files changed, 575 insertions(+), 21 deletions(-) create mode 100644 src/main/java/net/quetzi/bluepower/blocks/machines/BlockAssembler.java create mode 100644 src/main/java/net/quetzi/bluepower/client/gui/GuiAssembler.java create mode 100644 src/main/java/net/quetzi/bluepower/containers/ContainerAssembler.java create mode 100644 src/main/java/net/quetzi/bluepower/tileentities/tier2/TileAssembler.java diff --git a/src/main/java/net/quetzi/bluepower/CommonProxy.java b/src/main/java/net/quetzi/bluepower/CommonProxy.java index e657feb..62c4b00 100644 --- a/src/main/java/net/quetzi/bluepower/CommonProxy.java +++ b/src/main/java/net/quetzi/bluepower/CommonProxy.java @@ -17,10 +17,18 @@ package net.quetzi.bluepower; +import com.mojang.authlib.GameProfile; + import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.FakePlayerFactory; +import net.quetzi.bluepower.references.Refs; public class CommonProxy { + public static EntityPlayer fakePlayer; + public void init() { } @@ -29,6 +37,14 @@ public void initRenderers() { } + public EntityPlayer getFakePlayer(World world) { + if(fakePlayer == null) { + fakePlayer = FakePlayerFactory.get((WorldServer) world, new GameProfile(Refs.MODID, "Bluepower")); + } + + return fakePlayer; + } + public EntityPlayer getPlayer() { return null; diff --git a/src/main/java/net/quetzi/bluepower/blocks/machines/BlockAssembler.java b/src/main/java/net/quetzi/bluepower/blocks/machines/BlockAssembler.java new file mode 100644 index 0000000..4a8ed0b --- /dev/null +++ b/src/main/java/net/quetzi/bluepower/blocks/machines/BlockAssembler.java @@ -0,0 +1,69 @@ +package net.quetzi.bluepower.blocks.machines; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.quetzi.bluepower.blocks.BlockContainerBase; +import net.quetzi.bluepower.init.CustomTabs; +import net.quetzi.bluepower.references.GuiIDs; +import net.quetzi.bluepower.references.Refs; +import net.quetzi.bluepower.tileentities.tier2.TileEntityAssembler; + +public class BlockAssembler extends BlockContainerBase { + + public IIcon front; + public IIcon back; + public IIcon active; + + public BlockAssembler() { + super(Material.iron); + this.setBlockName(Refs.ASSEMBLER_NAME); + this.setCreativeTab(CustomTabs.tabBluePowerMachines); + } + + @Override + protected Class getTileEntity() { + return TileEntityAssembler.class; + } + + @Override + public GuiIDs getGuiID() { + return GuiIDs.ASSEMBLER_ID; + } + + @Override + public IIcon getIcon(int side, int meta) { + ForgeDirection orientation = ForgeDirection.getOrientation(meta); + + if(side == orientation.ordinal()) { + return this.front; + } else if(side == orientation.getOpposite().ordinal()) { + return this.back; + } + + return this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + + //TODO : Add the animated textures + + String name = getUnlocalizedName().substring(5); + + this.blockIcon = iconRegister.registerIcon(Refs.MODID + ":" + Refs.MACHINE_TEXTURE_LOCATION + name + "_side_0"); + this.active = iconRegister.registerIcon(Refs.MODID + ":" + Refs.MACHINE_TEXTURE_LOCATION + name + "_front_active"); + this.front = iconRegister.registerIcon(Refs.MODID + ":" + Refs.MACHINE_TEXTURE_LOCATION + name + "_front"); + this.back = iconRegister.registerIcon(Refs.MODID + ":" + Refs.MACHINE_TEXTURE_LOCATION + name + "_bottom"); + } +} diff --git a/src/main/java/net/quetzi/bluepower/client/gui/GUIHandler.java b/src/main/java/net/quetzi/bluepower/client/gui/GUIHandler.java index 9c19fb0..af0a655 100644 --- a/src/main/java/net/quetzi/bluepower/client/gui/GUIHandler.java +++ b/src/main/java/net/quetzi/bluepower/client/gui/GUIHandler.java @@ -29,6 +29,7 @@ import net.quetzi.bluepower.items.ItemSeedBag; import net.quetzi.bluepower.references.GuiIDs; import net.quetzi.bluepower.tileentities.tier1.*; +import net.quetzi.bluepower.tileentities.tier2.TileAssembler; import net.quetzi.bluepower.tileentities.tier2.TileSortingMachine; import net.quetzi.bluepower.tileentities.tier3.*; @@ -87,6 +88,8 @@ public Object getServerGuiElement(int ID, EntityPlayer player, World world, int return new ContainerRelay(player.inventory, (TileRelay) ent); case EJECTOR_ID: return new ContainerEjector(player.inventory, (TileEjector) ent); + case ASSEMBLER_ID: + return new ContainerAssembler(player.inventory, (TileAssembler) ent); default: break; } @@ -142,9 +145,11 @@ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int return new GuiRelay(player.inventory, (TileRelay) ent); case EJECTOR_ID: return new GuiEjector(player.inventory, (TileEjector) ent); + case ASSEMBLER_ID: + return new GuiAssembler(player.inventory, (TileAssembler) ent); default: break; } return null; } -} +} \ No newline at end of file diff --git a/src/main/java/net/quetzi/bluepower/client/gui/GuiAssembler.java b/src/main/java/net/quetzi/bluepower/client/gui/GuiAssembler.java new file mode 100644 index 0000000..e7f70d7 --- /dev/null +++ b/src/main/java/net/quetzi/bluepower/client/gui/GuiAssembler.java @@ -0,0 +1,49 @@ +package net.quetzi.bluepower.client.gui; + +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.util.ResourceLocation; +import net.quetzi.bluepower.containers.ContainerAssembler; +import net.quetzi.bluepower.references.Refs; +import net.quetzi.bluepower.tileentities.tier2.TileEntityAssembler; + +public class GuiAssembler extends GuiBase { + + private static final ResourceLocation resLoc = new ResourceLocation(Refs.MODID, "textures/gui/assembler.png"); + + public TileEntityAssembler assembler; + + public GuiAssembler(InventoryPlayer invP, TileEntityAssembler tile) { + super(new ContainerAssembler(invP, tile), resLoc); + this.ySize = 195; + this.assembler = tile; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { + super.drawGuiContainerBackgroundLayer(f, i, j); + + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + + this.drawTexturedModalRect(x + 6 + this.addXAmount(), y + 16 + this.addYAmount(), 176, 0, 20, 20); + } + + private int addYAmount() { + if(this.assembler.currentSlot <= 7) { + return 0; + } else { + return 18; + } + } + + private int addXAmount() { + if(this.assembler.currentSlot <= 7) { + return 18 * this.assembler.currentSlot; + } else { + int i = this.assembler.currentSlot - 8; + return 18 * i; + } + } + +} diff --git a/src/main/java/net/quetzi/bluepower/containers/ContainerAssembler.java b/src/main/java/net/quetzi/bluepower/containers/ContainerAssembler.java new file mode 100644 index 0000000..2c2f5b2 --- /dev/null +++ b/src/main/java/net/quetzi/bluepower/containers/ContainerAssembler.java @@ -0,0 +1,193 @@ +package net.quetzi.bluepower.containers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.quetzi.bluepower.containers.slots.IPhantomSlot; +import net.quetzi.bluepower.containers.slots.SlotPhantom; +import net.quetzi.bluepower.tileentities.tier2.TileEntityAssembler; + +public class ContainerAssembler extends Container { + + private TileEntityAssembler assembler; + + public int lastSlot = 0; + + public ContainerAssembler(InventoryPlayer invP, TileEntityAssembler ass) { + this.assembler = ass; + + int slotID = 0; + + for(int i = 0;i < 2;i++) { + for(int j = 0;j < 8;j++) { + this.addSlotToContainer(new SlotPhantom(this.assembler, slotID, 8 + j * 18, 18 + i * 18)); + slotID++; + } + } + + for(int i = 0;i < 2;i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(this.assembler, slotID, 8 + j * 18, 63 + i * 18)); + slotID++; + } + } + + for (int i = 0;i < 3;i++) { + for (int j = 0;j < 9;j++) { + this.addSlotToContainer(new Slot(invP, j + i * 9 + 9, 8 + j * 18, 113 + i * 18)); + } + } + for (int i = 0;i < 9;i++) + this.addSlotToContainer(new Slot(invP, i, 8 + i * 18, 171)); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { + //TODO : ^ + return super.transferStackInSlot(par1EntityPlayer, par2); + } + + @Override + public ItemStack slotClick(int slotNum, int mouseButton, int modifier, EntityPlayer player) { + + Slot slot = slotNum < 0 ? null : (Slot) inventorySlots.get(slotNum); + if (slot instanceof IPhantomSlot) { + return slotClickPhantom(slot, mouseButton, modifier, player); + } + return super.slotClick(slotNum, mouseButton, modifier, player); + } + + /** + * This method is copied from the BuildCraft code, which can be found here: https://github.com/BuildCraft/BuildCraft + * @author CovertJaguar + */ + private ItemStack slotClickPhantom(Slot slot, int mouseButton, int modifier, EntityPlayer player) { + + ItemStack stack = null; + + if (mouseButton == 2) { + if (((IPhantomSlot) slot).canAdjust()) { + slot.putStack(null); + } + } else if (mouseButton == 0 || mouseButton == 1) { + InventoryPlayer playerInv = player.inventory; + slot.onSlotChanged(); + ItemStack stackSlot = slot.getStack(); + ItemStack stackHeld = playerInv.getItemStack(); + + if (stackSlot != null) { + stack = stackSlot.copy(); + } + + if (stackSlot == null) { + if (stackHeld != null && slot.isItemValid(stackHeld)) { + fillPhantomSlot(slot, stackHeld, mouseButton, modifier); + } + } else if (stackHeld == null) { + adjustPhantomSlot(slot, mouseButton, modifier); + slot.onPickupFromSlot(player, playerInv.getItemStack()); + } else if (slot.isItemValid(stackHeld)) { + if (canStacksMerge(stackSlot, stackHeld)) { + adjustPhantomSlot(slot, mouseButton, modifier); + } else { + fillPhantomSlot(slot, stackHeld, mouseButton, modifier); + } + } + } + + return stack; + } + + /** + * This method is copied from the BuildCraft code, which can be found here: https://github.com/BuildCraft/BuildCraft + * @author CovertJaguar + */ + public boolean canStacksMerge(ItemStack stack1, ItemStack stack2) { + + if (stack1 == null || stack2 == null) return false; + if (!stack1.isItemEqual(stack2)) return false; + if (!ItemStack.areItemStackTagsEqual(stack1, stack2)) return false; + return true; + + } + + /** + * This method is copied from the BuildCraft code, which can be found here: https://github.com/BuildCraft/BuildCraft + * @author CovertJaguar + */ + protected void adjustPhantomSlot(Slot slot, int mouseButton, int modifier) { + + if (!((IPhantomSlot) slot).canAdjust()) { + return; + } + ItemStack stackSlot = slot.getStack(); + int stackSize; + if (modifier == 1) { + stackSize = mouseButton == 0 ? (stackSlot.stackSize + 1) / 2 : stackSlot.stackSize * 2; + } else { + stackSize = mouseButton == 0 ? stackSlot.stackSize - 1 : stackSlot.stackSize + 1; + } + + if (stackSize > slot.getSlotStackLimit()) { + stackSize = slot.getSlotStackLimit(); + } + + stackSlot.stackSize = stackSize; + + if (stackSlot.stackSize <= 0) { + slot.putStack((ItemStack) null); + } + } + + protected void fillPhantomSlot(Slot slot, ItemStack stackHeld, int mouseButton, int modifier) { + + if (!((IPhantomSlot) slot).canAdjust()) { + return; + } + int stackSize = mouseButton == 0 ? stackHeld.stackSize : 1; + if (stackSize > slot.getSlotStackLimit()) { + stackSize = slot.getSlotStackLimit(); + } + ItemStack phantomStack = stackHeld.copy(); + phantomStack.stackSize = stackSize; + + slot.putStack(phantomStack); + } + + @Override + public void addCraftingToCrafters(ICrafting par1ICrafting) { + super.addCraftingToCrafters(par1ICrafting); + par1ICrafting.sendProgressBarUpdate(this, 0, this.assembler.currentSlot); + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + + for(int i = 0; i < this.crafters.size(); ++i) { + ICrafting icrafting = (ICrafting) this.crafters.get(i); + + if(this.lastSlot != this.assembler.currentSlot) { + icrafting.sendProgressBarUpdate(this, 0, this.assembler.currentSlot); + } + } + + this.lastSlot = this.assembler.currentSlot; + } + + @Override + public void updateProgressBar(int par1, int par2) { + if(par1 == 0) { + this.assembler.currentSlot = par2; + } + } + +} diff --git a/src/main/java/net/quetzi/bluepower/init/BPBlocks.java b/src/main/java/net/quetzi/bluepower/init/BPBlocks.java index 3b90196..7901b30 100644 --- a/src/main/java/net/quetzi/bluepower/init/BPBlocks.java +++ b/src/main/java/net/quetzi/bluepower/init/BPBlocks.java @@ -25,7 +25,6 @@ import net.quetzi.bluepower.blocks.computer.BlockIOExpander; import net.quetzi.bluepower.blocks.computer.BlockMonitor; import net.quetzi.bluepower.blocks.machines.*; -import net.quetzi.bluepower.blocks.machines.BlockKineticGenerator; import net.quetzi.bluepower.blocks.worldgen.BlockCrackedBasalt; import net.quetzi.bluepower.blocks.worldgen.BlockCrop; import net.quetzi.bluepower.blocks.worldgen.BlockCustomFlower; @@ -88,6 +87,7 @@ public class BPBlocks { public static Block project_table; public static Block ejector; public static Block relay; + public static Block assembler; public static Block cpu; public static Block monitor; @@ -151,7 +151,8 @@ public static void init() { transposer = new BlockTransposer(); ejector = new BlockEjector(); relay = new BlockRelay(); - + assembler = new BlockAssembler(); + cpu = new BlockCPU(); monitor = new BlockMonitor(); disk_drive = new BlockDiskDrive(); @@ -225,6 +226,7 @@ private static void registerBlocks() { GameRegistry.registerBlock(transposer, Refs.TRANSPOSER_NAME); GameRegistry.registerBlock(ejector, Refs.EJECTOR_NAME); GameRegistry.registerBlock(relay, Refs.RELAY_NAME); + GameRegistry.registerBlock(assembler, Refs.ASSEMBLER_NAME); GameRegistry.registerBlock(cpu, Refs.BLOCKCPU_NAME); GameRegistry.registerBlock(monitor, Refs.BLOCKMONITOR_NAME); @@ -250,4 +252,4 @@ private static void initModDependantBlocks() { GameRegistry.registerBlock(sortron, Refs.BLOCKSORTRON_NAME); } } -} +} \ No newline at end of file diff --git a/src/main/java/net/quetzi/bluepower/references/GuiIDs.java b/src/main/java/net/quetzi/bluepower/references/GuiIDs.java index 892b1fd..2d535b9 100644 --- a/src/main/java/net/quetzi/bluepower/references/GuiIDs.java +++ b/src/main/java/net/quetzi/bluepower/references/GuiIDs.java @@ -18,19 +18,20 @@ package net.quetzi.bluepower.references; public enum GuiIDs { - INVALID, - ALLOY_FURNACE, - BUFFER, - SORTING_MACHINE, - SEEDBAG, - CANVAS_BAG, - CPU, - MONITOR, - DISK_DRIVE, - IO_EXPANDER, - REDBUS_ID, - KINETICGENERATOR_ID, - DEPLOYER_ID, - RELAY_ID, - EJECTOR_ID; + INVALID, + ALLOY_FURNACE, + BUFFER, + SORTING_MACHINE, + SEEDBAG, + CANVAS_BAG, + CPU, + MONITOR, + DISK_DRIVE, + IO_EXPANDER, + REDBUS_ID, + KINETICGENERATOR_ID, + DEPLOYER_ID, + RELAY_ID, + EJECTOR_ID, + ASSEMBLER_ID; } diff --git a/src/main/java/net/quetzi/bluepower/references/Refs.java b/src/main/java/net/quetzi/bluepower/references/Refs.java index 2d7b0de..b2f7e80 100644 --- a/src/main/java/net/quetzi/bluepower/references/Refs.java +++ b/src/main/java/net/quetzi/bluepower/references/Refs.java @@ -191,6 +191,7 @@ public class Refs { public static final String IRONWIRE_NAME = "iron_wire"; public static final String WOOLCARD_NAME = "wool_card"; public static final String DIAMONDDRAWPLATE_NAME = "diamond_drawplate"; + public static final String ASSEMBLER_NAME = "assembler"; public static final String PROJECTTABLE_NAME = "project_table"; diff --git a/src/main/java/net/quetzi/bluepower/tileentities/TileEntities.java b/src/main/java/net/quetzi/bluepower/tileentities/TileEntities.java index 2cc5e09..f91457e 100644 --- a/src/main/java/net/quetzi/bluepower/tileentities/TileEntities.java +++ b/src/main/java/net/quetzi/bluepower/tileentities/TileEntities.java @@ -18,6 +18,7 @@ package net.quetzi.bluepower.tileentities; import net.quetzi.bluepower.tileentities.tier1.*; +import net.quetzi.bluepower.tileentities.tier2.TileAssembler; import net.quetzi.bluepower.tileentities.tier2.TileSortingMachine; import net.quetzi.bluepower.tileentities.tier3.TileCPU; import net.quetzi.bluepower.tileentities.tier3.TileDiskDrive; @@ -27,12 +28,12 @@ import cpw.mods.fml.common.registry.GameRegistry; public class TileEntities { - + /** * Method to register the TE's to the game. If a TE is not registered, it _will_ cause issues! */ public static void init() { - + GameRegistry.registerTileEntity(TileAlloyFurnace.class, "tileAlloyFurnace"); GameRegistry.registerTileEntity(TileBlockBreaker.class, "tileBlockBreaker"); GameRegistry.registerTileEntity(TileIgniter.class, "tileIgniter"); @@ -51,5 +52,6 @@ public static void init() { GameRegistry.registerTileEntity(TileEjector.class, "ejector"); GameRegistry.registerTileEntity(TileRelay.class, "relay"); GameRegistry.registerTileEntity(TileLamp.class, "tileLamp"); + GameRegistry.registerTileEntity(TileAssembler.class, "assembler"); } } diff --git a/src/main/java/net/quetzi/bluepower/tileentities/tier2/TileAssembler.java b/src/main/java/net/quetzi/bluepower/tileentities/tier2/TileAssembler.java new file mode 100644 index 0000000..3d61fbb --- /dev/null +++ b/src/main/java/net/quetzi/bluepower/tileentities/tier2/TileAssembler.java @@ -0,0 +1,216 @@ +package net.quetzi.bluepower.tileentities.tier2; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.FakePlayerFactory; +import net.minecraftforge.common.util.ForgeDirection; +import net.quetzi.bluepower.BluePower; +import net.quetzi.bluepower.tileentities.TileBase; + +public class TileAssembler extends TileBase implements ISidedInventory { + + public ItemStack[] inventory = new ItemStack[34]; + public int currentSlot = 0; + + @Override + protected void redstoneChanged(boolean newValue) { + super.redstoneChanged(newValue); + if(newValue) { + //TODO : Change State + this.useItem(); + } + } + + private void useItem() { + ForgeDirection orientation = ForgeDirection.getOrientation(this.getBlockMetadata()); + if(this.worldObj.isAirBlock(xCoord + orientation.offsetX, yCoord + orientation.offsetY, zCoord + orientation.offsetZ)) { + if(inventory[currentSlot] != null) { + ItemStack target = inventory[currentSlot]; + int itemTargetSlot = 0; + for(int i = 16;i < this.inventory.length;i++) { + if(this.inventory[i] != null) { + if(this.inventory[i].getItem() == target.getItem() && this.inventory[i].getItemDamage() == target.getItemDamage()) { + itemTargetSlot = i; + break; + } + } + } + + if(itemTargetSlot == 0) { + return; + } + + if(target.getItem() instanceof ItemBlock) { + if(!worldObj.isRemote) { + ((ItemBlock) this.inventory[itemTargetSlot].getItem()).placeBlockAt(this.inventory[itemTargetSlot], BluePower.proxy.getFakePlayer(worldObj), worldObj, xCoord + orientation.offsetX, yCoord + orientation.offsetY, zCoord + orientation.offsetZ, 0, 0, 0, 0, this.inventory[itemTargetSlot].getItemDamage()); + } + + //TODO : Use Items + + + this.decrStackSize(itemTargetSlot, 1); + if(this.currentSlot >= 15) { + this.currentSlot = 0; + } else { + this.currentSlot++; + } + + } + } else { + if(this.currentSlot >= 15) { + this.currentSlot = 0; + } else { + this.currentSlot++; + } + } + } + } + + @Override + public int getSizeInventory() { + return this.inventory.length; + } + + @Override + public ItemStack getStackInSlot(int var1) { + return this.inventory[var1]; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + ItemStack stack = getStackInSlot(i); + + if (stack != null) { + if (stack.stackSize <= j) { + setInventorySlotContents(i, null); + } + else { + stack = stack.splitStack(j); + + if (stack.stackSize == 0) { + setInventorySlotContents(i, null); + } + } + } + + return stack; + } + + @Override + public ItemStack getStackInSlotOnClosing(int var1) { + return this.getStackInSlot(var1); + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemstack) { + this.inventory[i] = itemstack; + + if ((itemstack != null) && (itemstack.stackSize > getInventoryStackLimit())) { + itemstack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public void readFromNBT(NBTTagCompound tCompound) { + super.readFromNBT(tCompound); + this.currentSlot = tCompound.getInteger("currentSlot"); + for (int i = 0; i < this.inventory.length; i++) { + NBTTagCompound tc = tCompound.getCompoundTag("inventory" + i); + inventory[i] = ItemStack.loadItemStackFromNBT(tc); + } + } + + @Override + public void writeToNBT(NBTTagCompound tCompound) { + super.writeToNBT(tCompound); + tCompound.setInteger("currentSlot", this.currentSlot); + for (int i = 0; i < this.inventory.length; i++) { + if (inventory[i] != null) { + NBTTagCompound tc = new NBTTagCompound(); + inventory[i].writeToNBT(tc); + tCompound.setTag("inventory" + i, tc); + } + } + } + + @Override + public String getInventoryName() { + return "tile.assembler.name"; + } + + @Override + public boolean hasCustomInventoryName() { + return true; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer var1) { + return true; + } + + @Override + public void openInventory() { + + } + + @Override + public void closeInventory() { + + } + + @Override + public List getDrops() { + List stacks = super.getDrops(); + + for(int i = 16;i < this.inventory.length;i++) { + if(this.inventory[i] != null) { + stacks.add(this.inventory[i]); + } + } + + return stacks; + } + + @Override + public boolean isItemValidForSlot(int var1, ItemStack var2) { + return true; + } + + @Override + public int[] getAccessibleSlotsFromSide(int var1) { + return new int[] {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}; + } + + @Override + public boolean canInsertItem(int slot, ItemStack itemStack, int side) { + + for (int i : this.getAccessibleSlotsFromSide(side)) { + if (slot == i) { + return true; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slot, ItemStack itemStack, int side) { + + for (int i : this.getAccessibleSlotsFromSide(side)) { + if (slot == i) { + return true; + } + } + return false; + } + +} From a8bef741b9328f7a30ab0d232725cb40a4e251cd Mon Sep 17 00:00:00 2001 From: AlexanderMaster Date: Sun, 22 Jun 2014 18:09:28 +0200 Subject: [PATCH 2/2] Starting to work on the assembler --- src/main/java/net/quetzi/bluepower/init/BPBlocks.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/quetzi/bluepower/init/BPBlocks.java b/src/main/java/net/quetzi/bluepower/init/BPBlocks.java index 7901b30..e165b68 100644 --- a/src/main/java/net/quetzi/bluepower/init/BPBlocks.java +++ b/src/main/java/net/quetzi/bluepower/init/BPBlocks.java @@ -29,6 +29,7 @@ import net.quetzi.bluepower.blocks.worldgen.BlockCrop; import net.quetzi.bluepower.blocks.worldgen.BlockCustomFlower; import net.quetzi.bluepower.blocks.worldgen.BlockStoneOre; +import net.quetzi.bluepower.blocks.machines.BlockKineticGenerator; import net.quetzi.bluepower.blocks.worldgen.BlockStoneOreConnected; import net.quetzi.bluepower.references.Dependencies; import net.quetzi.bluepower.references.Refs;