Lathe Working

This commit is contained in:
KitsuShadow
2015-08-24 20:32:12 -04:00
parent 32ebd7a69e
commit 1af78e907b
6 changed files with 198 additions and 58 deletions

View File

@@ -14,7 +14,7 @@ public class FlintLathe extends LatheBase{
@Override
public TileEntity createNewTileEntity(World world, int i) {
return new TileEntLatheBase("TileEntFlintLathe");
return new TileEntLatheBase();
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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();

View File

@@ -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);
}