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 6bea14f..120e037 100644 --- a/src/main/java/nmd/primal/energy/block/lathe/FlintLathe.java +++ b/src/main/java/nmd/primal/energy/block/lathe/FlintLathe.java @@ -14,7 +14,7 @@ public class FlintLathe extends LatheBase{ @Override public TileEntity createNewTileEntity(World world, int i) { - return new TileEntLatheBase("TileEntFlintLathe"); + return new TileEntLatheBase(); } 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 afb126f..140dbe2 100644 --- a/src/main/java/nmd/primal/energy/block/lathe/LatheBase.java +++ b/src/main/java/nmd/primal/energy/block/lathe/LatheBase.java @@ -1,11 +1,17 @@ package nmd.primal.energy.block.lathe; +import java.util.Random; + +import net.minecraft.block.Block; 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.init.Blocks; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import nmd.primal.energy.common.ModInfo; import nmd.primal.energy.item.ModItems; @@ -15,6 +21,8 @@ import nmd.primal.energy.util.CustomTab; public abstract class LatheBase extends BlockContainer implements ITileEntityProvider{ + private final Random random = new Random(); + protected LatheBase(String unlocalizedName, Material material) { super(material); this.setBlockName(unlocalizedName); @@ -29,37 +37,48 @@ public abstract class LatheBase extends BlockContainer implements ITileEntityPro 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){ + TileEntLatheBase tileEnt = (TileEntLatheBase) world.getTileEntity(x, y, z); if(player.inventory.getCurrentItem()!=null){ if(player.inventory.getCurrentItem().getItem()!=ModItems.schiselItem){ if (tileEnt.getStackInSlot(0)==null){ tileEnt.setInventorySlotContents(0, player.inventory.getCurrentItem()); player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + tileEnt.markForUpdate(); + tileEnt.markDirty(); + return true; } 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); + if(player.inventory.getCurrentItem().getItem()!=ModItems.schiselItem){ + 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); + tileEnt.markForUpdate(); + tileEnt.markDirty(); + return true; + } } } } } - 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); + tileEnt.markForUpdate(); + tileEnt.markDirty(); + return true; } - return true; + } if (!player.isSneaking()) { if((player.inventory.getCurrentItem()==null)){ @@ -68,16 +87,70 @@ public abstract class LatheBase extends BlockContainer implements ITileEntityPro pStack.stackSize = 1; world.spawnEntityInWorld(new EntityItem(world, player.posX, player.posY, player.posZ, pStack)); tileEnt.decrStackSize(0, 1); + tileEnt.markForUpdate(); + tileEnt.markDirty(); + return true; + } + } + + } + if(player.inventory.getCurrentItem()!=null){ + if(player.inventory.getCurrentItem().getItem()==ModItems.schiselItem){ + if(tileEnt.getStackInSlot(0)!=null){ + if(tileEnt.getStackInSlot(0).getItem().equals(Item.getItemFromBlock(Blocks.wooden_slab))){ + tileEnt.workCount++; + player.inventory.getCurrentItem().damageItem(1, player); + //System.out.println(tileEnt.workCount); + return true; + } } } - return true; } } - tileEnt.markForUpdate(); - tileEnt.markDirty(); + return false; } + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + TileEntLatheBase tileEnt = (TileEntLatheBase) world.getTileEntity(x, y, z); + + if (tileEnt != null) { + for (int i = 0; i < tileEnt.getSizeInventory(); ++i) { + ItemStack itemstack = tileEnt.getStackInSlot(i); + + if (itemstack != null) { + float f = this.random.nextFloat() * 0.6F + 0.1F; + float f1 = this.random.nextFloat() * 0.6F + 0.1F; + float f2 = this.random.nextFloat() * 0.6F + 0.1F; + + while (itemstack.stackSize > 0) { + int j = this.random.nextInt(21) + 10; + + if (j > itemstack.stackSize) { + j = itemstack.stackSize; + } + + itemstack.stackSize -= j; + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j, itemstack.getItemDamage())); + + if (itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound(((NBTTagCompound) itemstack.getTagCompound().copy())); + } + + float f3 = 0.025F; + entityitem.motionX = (float) this.random.nextGaussian() * f3; + entityitem.motionY = (float) this.random.nextGaussian() * f3 + 0.1F; + entityitem.motionZ = (float) this.random.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } + world.func_147453_f(x, y, z, block); + } + + super.breakBlock(world, x, y, z, block, meta); + } + @Override public int getRenderType() { return RenderID.latheID; diff --git a/src/main/java/nmd/primal/energy/item/SChiselItem.java b/src/main/java/nmd/primal/energy/item/SChiselItem.java index f7a29b0..be29cbe 100644 --- a/src/main/java/nmd/primal/energy/item/SChiselItem.java +++ b/src/main/java/nmd/primal/energy/item/SChiselItem.java @@ -1,14 +1,18 @@ package nmd.primal.energy.item; +import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import nmd.primal.energy.block.ModBlocks; import nmd.primal.energy.common.ModInfo; +import nmd.primal.energy.tileents.TileEntLatheBase; import nmd.primal.energy.util.CustomTab; import cpw.mods.fml.common.registry.GameRegistry; @@ -29,23 +33,63 @@ public class SChiselItem extends Item{ item = this; GameRegistry.registerItem(this, name); } - - public void onUsingTick(ItemStack stack, EntityPlayer player, int count){ - - } - + + /*public void onUpdate(ItemStack stack, World world, Entity ent, int slot, boolean active) { + + if(active == true){ + EntityPlayer player = (EntityPlayer) ent; + + if(player.isUsingItem()==true){ + int dir = (MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3); + if(dir==0){ + world.getBlock((int)Math.floor(player.posX), (int)Math.floor(player.posY), (int)Math.floor(player.posZ)+1); + System.out.println(world.getBlock((int)Math.floor(player.posX), (int)Math.floor(player.posY), (int)Math.floor(player.posZ)+1)); + System.out.println(((int)Math.floor(player.posX)) +" "+ ((int)Math.floor(player.posY)) +" "+ ((int)Math.floor(player.posZ)+1)); + } + if(dir==1){ + + } + if(dir==2){ + + } + if(dir==3){ + + } + } + } + + }*/ + + /*@Override + public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int count) { + System.out.println("Stopped Using "+ count); + }*/ + @Override - public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int count) { - System.out.println("Stopped Using "+ count); - } + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int d, float u, float i, float j) + { + + /*if(!world.isRemote){ + System.out.println("Using"); + if(world.getBlock(x, y, z).equals(ModBlocks.flintLathe)){ + TileEntLatheBase tileLathe = (TileEntLatheBase) world.getTileEntity(x, y, z); + //if(tileLathe.getStackInSlot(0).getItem().equals(Item.getItemFromBlock(Blocks.wooden_slab))){ + //tileLathe.workCount++; + tileLathe.markForUpdate(); + System.out.println(tileLathe.workCount); + //} + } + }*/ + return true; + } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { //System.out.println("In Use"); - player.setItemInUse(stack, 72000); + if(!world.isRemote){ - + //player.setItemInUse(stack, 72000); } return stack; } 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 7701150..b089a92 100644 --- a/src/main/java/nmd/primal/energy/render/block/RenderLathe.java +++ b/src/main/java/nmd/primal/energy/render/block/RenderLathe.java @@ -8,6 +8,8 @@ import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.item.EntityItem; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -56,18 +58,25 @@ public class RenderLathe extends TileEntitySpecialRenderer { this.entItem.hoverStart = 0.0F; RenderItem.renderInFrame = true; GL11.glScalef(1.0f, 1.0f, 1.0f); - GL11.glRotatef(90f, 0.0F, 1.0F, 0.0F); + if(tile.getStackInSlot(0).getItem().equals(Item.getItemFromBlock(Blocks.wooden_slab))){ + GL11.glRotatef(90f, 1.0F, 0.0F, 0.0F); + } + if(tile.isPowered == true){ + if(tile.getStackInSlot(0).getItem().equals(Item.getItemFromBlock(Blocks.wooden_slab))){ + GL11.glRotatef(i, 0.0F, 1.0F, 0.0F); + }else{ + GL11.glRotatef(i, 0.0F, 0.0F, 1.0F); + } - GL11.glRotatef(i, 1.0F, 0.0F, 0.0F); - RenderManager.instance.renderEntityWithPosYaw(entItem, 0.0D, -0.15D, 0.0D, 0.0F, 0.0F); + RenderManager.instance.renderEntityWithPosYaw(entItem, 0.0D, -0.223D, 0.0D, 0.0F, 0.0F); a++; if(a==1){ - i=i+14; + i=i-14; a=0; } - if(i==360){ + if(i>=360||i<=-360){ i=0; } } diff --git a/src/main/java/nmd/primal/energy/tileents/TileBase.java b/src/main/java/nmd/primal/energy/tileents/TileBase.java index 1f63b87..7576685 100644 --- a/src/main/java/nmd/primal/energy/tileents/TileBase.java +++ b/src/main/java/nmd/primal/energy/tileents/TileBase.java @@ -20,28 +20,6 @@ public class TileBase extends TileEntity{ worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); } - @Override - public void updateEntity() { - World world = this.getWorldObj(); - int x = this.xCoord; - int y = this.yCoord; - int z = this.zCoord; - if (worldObj.isRemote) return; - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) - { - super.readFromNBT(tagCompound); - - } - - @Override - public void writeToNBT(NBTTagCompound tagCompound) - { - super.writeToNBT(tagCompound); - } - @Override public Packet getDescriptionPacket() { NBTTagCompound nbt = new NBTTagCompound(); diff --git a/src/main/java/nmd/primal/energy/tileents/TileEntLatheBase.java b/src/main/java/nmd/primal/energy/tileents/TileEntLatheBase.java index 1a678ba..4c93f88 100644 --- a/src/main/java/nmd/primal/energy/tileents/TileEntLatheBase.java +++ b/src/main/java/nmd/primal/energy/tileents/TileEntLatheBase.java @@ -1,20 +1,29 @@ package nmd.primal.energy.tileents; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.entity.Entity; 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; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.IExtendedEntityProperties; +import nmd.primal.energy.item.ModItems; -public class TileEntLatheBase extends TileBase implements IInventory { +public class TileEntLatheBase extends TileEntity implements IInventory { private ItemStack[] inv; private int i; - public boolean isPowered; + public boolean isPowered = true; + public int workCount; + protected String specName = "TileEntLatheBase"; - public TileEntLatheBase(String name) { - super(name); + public TileEntLatheBase() { this.inv = new ItemStack[1]; } @@ -27,6 +36,23 @@ public class TileEntLatheBase extends TileBase implements IInventory { public ItemStack getStackInSlot(int slot) { return this.inv[slot]; } + + public void markForUpdate(){ + worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, -998, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } @Override public void updateEntity() { @@ -37,11 +63,19 @@ public class TileEntLatheBase extends TileBase implements IInventory { if(this.isPowered==true){ i++; if(i>16){ - this.isPowered=false; + //this.isPowered=false; i=0; + if(this.workCount>=20){ + this.setInventorySlotContents(0, new ItemStack(ModItems.swheelItem, 1)); + this.workCount=0; + this.markForUpdate(); + this.markDirty(); + } } + } if (worldObj.isRemote) return; + if (!worldObj.isRemote) return; //System.out.println(this.isPowered + " " + i); } @@ -116,7 +150,7 @@ public class TileEntLatheBase extends TileBase implements IInventory { @Override public int getInventoryStackLimit() { - return 64; + return 1; } @Override @@ -155,6 +189,7 @@ public class TileEntLatheBase extends TileBase implements IInventory { this.specName = tagCompound.getString("CustomName"); } this.isPowered = tagCompound.getBoolean("ISPOWERED"); + this.workCount = tagCompound.getInteger("WORKCOUNT"); } @Override @@ -172,6 +207,7 @@ public class TileEntLatheBase extends TileBase implements IInventory { } tagCompound.setTag("Inventory", itemList); tagCompound.setBoolean("ISPOWERED", this.isPowered); + tagCompound.setInteger("WORKCOUNT", this.workCount); }