diff --git a/src/main/java/nmd/primal/energy/block/lathe/FlintLathe.java b/src/main/java/nmd/primal/energy/block/lathe/FlintLathe.java index dcca755..6bea14f 100644 --- a/src/main/java/nmd/primal/energy/block/lathe/FlintLathe.java +++ b/src/main/java/nmd/primal/energy/block/lathe/FlintLathe.java @@ -3,9 +3,7 @@ package nmd.primal.energy.block.lathe; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -import nmd.primal.energy.render.RenderID; -import nmd.primal.energy.tileents.TileEntCrank; -import nmd.primal.energy.tileents.TileEntFlintLathe; +import nmd.primal.energy.tileents.TileEntLatheBase; public class FlintLathe extends LatheBase{ @@ -16,7 +14,7 @@ public class FlintLathe extends LatheBase{ @Override public TileEntity createNewTileEntity(World world, int i) { - return new TileEntFlintLathe("TileEntFlintLathe"); + return new TileEntLatheBase("TileEntFlintLathe"); } diff --git a/src/main/java/nmd/primal/energy/block/lathe/LatheBase.java b/src/main/java/nmd/primal/energy/block/lathe/LatheBase.java index b8299a4..ffd02e9 100644 --- a/src/main/java/nmd/primal/energy/block/lathe/LatheBase.java +++ b/src/main/java/nmd/primal/energy/block/lathe/LatheBase.java @@ -3,8 +3,13 @@ package nmd.primal.energy.block.lathe; import net.minecraft.block.BlockContainer; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; import nmd.primal.energy.common.ModInfo; import nmd.primal.energy.render.RenderID; +import nmd.primal.energy.tileents.TileEntLatheBase; import nmd.primal.energy.util.CustomTab; public abstract class LatheBase extends BlockContainer implements ITileEntityProvider{ @@ -21,6 +26,55 @@ public abstract class LatheBase extends BlockContainer implements ITileEntityPro 0.9F, 0.75F, 0.9F); } + public boolean onBlockActivated (World world, int x, int y, int z, EntityPlayer player, int q, float a, float b, float c) { + + TileEntLatheBase tileEnt = (TileEntLatheBase) world.getTileEntity(x, y, z); + if(!world.isRemote){ + if(player.inventory.getCurrentItem()!=null){ + if (tileEnt.getStackInSlot(0)==null){ + tileEnt.setInventorySlotContents(0, player.inventory.getCurrentItem()); + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + } + if (tileEnt.getStackInSlot(0)!=null){ + if(player.inventory.getCurrentItem()!=null){ + ItemStack pStack = player.inventory.getCurrentItem().copy(); + ItemStack sStack = tileEnt.getStackInSlot(0).copy(); + ItemStack sStackTemp = tileEnt.getStackInSlot(0).copy(); + if(tileEnt.getStackInSlot(0).stackSize < 64){ + sStackTemp.stackSize++; + if ((sStack.getItem().equals(pStack.getItem())) && (sStack.getItemDamage() == pStack.getItemDamage()) ){ + tileEnt.setInventorySlotContents(0, sStackTemp); + player.inventory.decrStackSize(player.inventory.currentItem, 1); + } + } + } + } + return true; + } + if (player.isSneaking() && player.inventory.getCurrentItem()==null) { + if(tileEnt.getStackInSlot(0)!=null){ + player.inventory.setInventorySlotContents(player.inventory.currentItem, tileEnt.getStackInSlot(0)); + tileEnt.setInventorySlotContents(0, null); + } + return true; + } + if (!player.isSneaking()) { + if((player.inventory.getCurrentItem()==null)){ + if(tileEnt.getStackInSlot(0)!=null){ + ItemStack pStack = tileEnt.getStackInSlot(0).copy(); + pStack.stackSize = 1; + world.spawnEntityInWorld(new EntityItem(world, player.posX, player.posY, player.posZ, pStack)); + tileEnt.decrStackSize(0, 1); + } + } + return true; + } + } + tileEnt.markForUpdate(); + tileEnt.markDirty(); + return true; + } + @Override public int getRenderType() { return RenderID.latheID; diff --git a/src/main/java/nmd/primal/energy/container/ContainerLathe.java b/src/main/java/nmd/primal/energy/container/ContainerLathe.java new file mode 100644 index 0000000..004c1b7 --- /dev/null +++ b/src/main/java/nmd/primal/energy/container/ContainerLathe.java @@ -0,0 +1,62 @@ +package nmd.primal.energy.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import nmd.primal.energy.tileents.TileEntLatheBase; + +public class ContainerLathe extends Container{ + + protected TileEntLatheBase tile; + + public boolean canInteractWith(EntityPlayer player) { + return tile.isUseableByPlayer(player); + } + + public ContainerLathe (InventoryPlayer inventoryPlayer, TileEntLatheBase te){ + tile = te; + addSlotToContainer(new Slot(tile, 0, 80, 34)); + addSlotToContainer(new Slot(tile, 1, 80, 34)); + bindPlayerInventory(inventoryPlayer); + } + + protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 9; j++) { + addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, + 8 + j * 18, 84 + i * 18)); + } + } + for (int i = 0; i < 9; i++) { + addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot) { + ItemStack stack = null; + Slot slotObject = (Slot) inventorySlots.get(slot); + if (slotObject != null && slotObject.getHasStack()) { + ItemStack stackInSlot = slotObject.getStack(); + stack = stackInSlot.copy(); + if (slot < 9) { + if (!this.mergeItemStack(stackInSlot, 9, this.inventorySlots.size(), true)) { + return null; + } + } + else if (!this.mergeItemStack(stackInSlot, 0, 9, false)) { + return null; + } + if (stackInSlot.stackSize == 0) { + slotObject.putStack((ItemStack)null); + } else { + slotObject.onSlotChanged(); + } + } + return stack; + } + +} \ No newline at end of file diff --git a/src/main/java/nmd/primal/energy/render/RenderRegistry.java b/src/main/java/nmd/primal/energy/render/RenderRegistry.java index ec668f6..0a34217 100644 --- a/src/main/java/nmd/primal/energy/render/RenderRegistry.java +++ b/src/main/java/nmd/primal/energy/render/RenderRegistry.java @@ -4,7 +4,7 @@ import cpw.mods.fml.client.registry.ClientRegistry; import nmd.primal.energy.render.block.RenderCrank; import nmd.primal.energy.render.block.RenderLathe; import nmd.primal.energy.tileents.TileEntCrank; -import nmd.primal.energy.tileents.TileEntFlintLathe; +import nmd.primal.energy.tileents.TileEntLatheBase; public class RenderRegistry { @@ -12,7 +12,7 @@ public class RenderRegistry { //MinecraftForgeClient.registerItemRenderer(ModItems.woodenShield, new ItemRenderWoodenShield()); //MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.emptySoftCrucible), new ItemRendererSECrucible()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntCrank.class, new RenderCrank()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntFlintLathe.class, new RenderLathe()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntLatheBase.class, new RenderLathe()); } } \ No newline at end of file diff --git a/src/main/java/nmd/primal/energy/render/block/RenderLathe.java b/src/main/java/nmd/primal/energy/render/block/RenderLathe.java index 55b1169..b3bc773 100644 --- a/src/main/java/nmd/primal/energy/render/block/RenderLathe.java +++ b/src/main/java/nmd/primal/energy/render/block/RenderLathe.java @@ -11,8 +11,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.IModelCustom; import nmd.primal.energy.block.ModBlocks; -import nmd.primal.energy.tileents.TileEntCrank; -import nmd.primal.energy.tileents.TileEntFlintLathe; +import nmd.primal.energy.tileents.TileEntLatheBase; public class RenderLathe extends TileEntitySpecialRenderer { @@ -28,13 +27,13 @@ public class RenderLathe extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslatef((float) x, (float) y, (float) z); - TileEntFlintLathe tile = (TileEntFlintLathe) tileEnt; + TileEntLatheBase tile = (TileEntLatheBase) tileEnt; renderBlock(tile, tileEnt.getWorldObj(), tileEnt.xCoord,tileEnt.yCoord, tileEnt.zCoord, ModBlocks.flintLathe); GL11.glPopMatrix(); } - public void renderBlock(TileEntFlintLathe tl, World world, int x, int y,int z, Block block) { + public void renderBlock(TileEntLatheBase tl, World world, int x, int y,int z, Block block) { GL11.glPushMatrix(); diff --git a/src/main/java/nmd/primal/energy/tileents/TileBase.java b/src/main/java/nmd/primal/energy/tileents/TileBase.java index 30444fa..011edf0 100644 --- a/src/main/java/nmd/primal/energy/tileents/TileBase.java +++ b/src/main/java/nmd/primal/energy/tileents/TileBase.java @@ -10,7 +10,7 @@ import net.minecraft.world.World; public class TileBase extends TileEntity{ - private String specName; + protected String specName; public boolean isPowered; public TileBase(String name){ diff --git a/src/main/java/nmd/primal/energy/tileents/TileEntFlintLathe.java b/src/main/java/nmd/primal/energy/tileents/TileEntFlintLathe.java deleted file mode 100644 index 4bda633..0000000 --- a/src/main/java/nmd/primal/energy/tileents/TileEntFlintLathe.java +++ /dev/null @@ -1,86 +0,0 @@ -package nmd.primal.energy.tileents; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; - -public class TileEntFlintLathe extends TileBase implements IInventory { - - public TileEntFlintLathe(String name) { - super(name); - // TODO Auto-generated constructor stub - } - - @Override - public int getSizeInventory() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public ItemStack getStackInSlot(int slot) { - // TODO Auto-generated method stub - return null; - } - - @Override - public ItemStack decrStackSize(int slot, int amount) { - // TODO Auto-generated method stub - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(int p_70304_1_) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) { - // TODO Auto-generated method stub - - } - - @Override - public String getInventoryName() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean hasCustomInventoryName() { - // TODO Auto-generated method stub - return false; - } - - @Override - public int getInventoryStackLimit() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer p_70300_1_) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void openInventory() { - // TODO Auto-generated method stub - - } - - @Override - public void closeInventory() { - // TODO Auto-generated method stub - - } - - @Override - public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) { - // TODO Auto-generated method stub - return false; - } - -} diff --git a/src/main/java/nmd/primal/energy/tileents/TileEntLatheBase.java b/src/main/java/nmd/primal/energy/tileents/TileEntLatheBase.java new file mode 100644 index 0000000..e242693 --- /dev/null +++ b/src/main/java/nmd/primal/energy/tileents/TileEntLatheBase.java @@ -0,0 +1,158 @@ +package nmd.primal.energy.tileents; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +public class TileEntLatheBase extends TileBase implements IInventory { + + private ItemStack[] inv; + + public TileEntLatheBase(String name) { + super(name); + this.inv = new ItemStack[2]; + } + + @Override + public int getSizeInventory() { + return this.inv.length; + } + + @Override + public ItemStack getStackInSlot(int slot) { + return this.inv[slot]; + } + + @Override + public ItemStack decrStackSize(int slot, int amount) { + if (this.inv[slot] != null) + { + ItemStack itemstack; + + if (this.inv[slot].stackSize <= amount) + { + itemstack = this.inv[slot]; + this.inv[slot] = null; + this.markForUpdate(); + this.markDirty(); + return itemstack; + } + itemstack = this.inv[slot].splitStack(amount); + + if (this.inv[slot].stackSize == 0) + { + this.inv[slot] = null; + } + this.markForUpdate(); + this.markDirty(); + return itemstack; + } + this.markForUpdate(); + this.markDirty(); + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) { + if (this.inv[slot] != null) + { + ItemStack itemstack = this.inv[slot]; + this.inv[slot] = null; + this.markForUpdate(); + this.markDirty(); + return itemstack; + } + else + { + this.markForUpdate(); + this.markDirty(); + return null; + } + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + this.inv[slot] = stack; + + if (stack != null && stack.stackSize > this.getInventoryStackLimit()) + { + stack.stackSize = this.getInventoryStackLimit(); + } + this.markForUpdate(); + this.markDirty(); + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.specName : this.specName; + } + + @Override + public boolean hasCustomInventoryName() { + return this.specName != null && this.specName.length() > 0; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq(this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D) <= 64.0D; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + /*NEEDS TO CHECK AGAINST A SET OF DATA HOLDING LATHE TOOLS AND LATHE INPUTS + * */ + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) + { + super.readFromNBT(tagCompound); + NBTTagList tagList = tagCompound.getTagList("Inventory", 10); + this.inv = new ItemStack[this.getSizeInventory()]; + for (int i = 0; i < tagList.tagCount(); i++) { + NBTTagCompound tag = tagList.getCompoundTagAt(i); + byte slot = tag.getByte("Slot"); + if (slot >= 0 && slot < this.inv.length) { + this.inv[slot] = ItemStack.loadItemStackFromNBT(tag); + } + } + if (tagCompound.hasKey("CustomName", 8)) { + this.specName = tagCompound.getString("CustomName"); + } + this.isPowered = tagCompound.getBoolean("ISPOWERED"); + } + + @Override + public void writeToNBT(NBTTagCompound tagCompound) + { + super.writeToNBT(tagCompound); + NBTTagList itemList = new NBTTagList(); + for (int i = 0; i < inv.length; i++) { + if (inv[i] != null) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setByte("Slot", (byte) i); + this.inv[i].writeToNBT(tag); + itemList.appendTag(tag); + } + } + tagCompound.setTag("Inventory", itemList); + tagCompound.setBoolean("ISPOWERED", this.isPowered); + } + + +} diff --git a/src/main/java/nmd/primal/energy/tileents/TileRegistry.java b/src/main/java/nmd/primal/energy/tileents/TileRegistry.java index efea4eb..b206c03 100644 --- a/src/main/java/nmd/primal/energy/tileents/TileRegistry.java +++ b/src/main/java/nmd/primal/energy/tileents/TileRegistry.java @@ -7,6 +7,6 @@ public class TileRegistry { public static final void init() { GameRegistry.registerTileEntity(TileEntCrank.class, "TileEntCrank"); - GameRegistry.registerTileEntity(TileEntFlintLathe.class, "TileEntFlintLathe"); + GameRegistry.registerTileEntity(TileEntLatheBase.class, "TileEntLatheBase"); } }