Jump to content

Recommended Posts

Posted

Hello, I recently decided to create a sort of furnace for my mod named Ore Crusher. Every thing works very well except when I leave the save I am on, the items from the bottom and the output goes back into where the blocks smelt and I lose every thing that was into this slot. I hope it's clear.. But here is my classes: 

OreCrusher

package ca.thecow.morecontent.blocks;

import java.util.Random;

import ca.thecow.morecontent.MoreContent;
import ca.thecow.morecontent.Ref;
import ca.thecow.morecontent.init.Blocks;
import ca.thecow.morecontent.tile_entity.TileEntityOreCrusher;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class OreCrusher extends BlockContainer{
	
	@SideOnly(Side.CLIENT)
	private IIcon top;
	@SideOnly(Side.CLIENT)
	private IIcon front;
	
	private static boolean isBurning;
	private final boolean isBurning2;
	private final Random random = new Random();

	public OreCrusher(boolean isActive) {
		super(Material.rock);
		isBurning2 = isActive;
	}
	
	@SideOnly(Side.CLIENT)
	public void registerBlockIcons(IIconRegister iconregister){
		this.blockIcon = iconregister.registerIcon(Ref.MOD_ID + ":ore_crusher_side");
		this.front = iconregister.registerIcon(this.isBurning2 ? Ref.MOD_ID + ":ore_crusher_active" : Ref.MOD_ID + ":ore_crusher_inactive");
		this.top = iconregister.registerIcon(Ref.MOD_ID + ":ore_crusher_top");
	}
	
	public IIcon getIcon(int side, int meta){
		return meta == 0 && side == 3 ? this.front : (side == 1 ? this.top : (side == 0 ? this.top : (side == meta ? this.front : this.blockIcon)));
	}
	
	@Override
	public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){
		player.openGui(MoreContent.modInstance, 0, world, x, y, z);
		return true;
		
	}
	
	public Item getItemDropped(int par1, Random random, int par3){
		return Item.getItemFromBlock(Blocks.ore_crusher);
	}
	
	public Item getItem(World world, int par2, int par3, int par4){
		return Item.getItemFromBlock(Blocks.ore_crusher);
	}
	
	@SideOnly(Side.CLIENT)
	public void onBlockAdded(World world, int x, int y, int z){
		super.onBlockAdded(world, x, y, z);
		this.direction(world, x, y, z);
	}
	
	private void direction(World world, int x, int y, int z){
		if(!world.isRemote){
			Block direction1 = world.getBlock(x, y, z - 1);
			Block direction2 = world.getBlock(x, y, z + 1);
			Block direction3 = world.getBlock(x - 1, y, z);
			Block direction4 = world.getBlock(x + 1, y, z);
			byte byte0 = 3;
			
			if(direction1.func_149730_j() && direction1.func_149730_j()){
				byte0 = 3;
			}
			if(direction2.func_149730_j() && direction2.func_149730_j()){
				byte0 = 2;
			}
			if(direction3.func_149730_j() && direction3.func_149730_j()){
				byte0 = 5;
			}
			if(direction4.func_149730_j() && direction4.func_149730_j()){
				byte0 = 4;
			}
			
			world.setBlockMetadataWithNotify(x, y, z, byte0, 2);
		}
	}
	
	public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemstack){
		int direction = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
		
		if(direction == 0){
			world.setBlockMetadataWithNotify(x, y, z, 2, 2);
		}
		if(direction == 1){
			world.setBlockMetadataWithNotify(x, y, z, 5, 2);
		}
		if(direction == 2){
			world.setBlockMetadataWithNotify(x, y, z, 3, 2);
		}
		if(direction == 3){
			world.setBlockMetadataWithNotify(x, y, z, 4, 2);
		}
		
		if(itemstack.hasDisplayName()){
			((TileEntityOreCrusher) world.getTileEntity(x, y, z)).oreCrusherName(itemstack.getDisplayName());
		}
	}
	
	public static void updateBlockState(boolean burning, World world, int x, int y, int z){
		int direction = world.getBlockMetadata(x, y, z);
		TileEntity tileentity = world.getTileEntity(x, y, z);
		isBurning = true;
		
		if(burning){
			world.setBlock(x, y, z, Blocks.ore_crusher_active);
		}else{
			world.setBlock(x, y, z, Blocks.ore_crusher);
		}
		
		isBurning = false;
		world.setBlockMetadataWithNotify(x, y, z, direction, 2);
		
		if(tileentity != null){
			tileentity.validate();
			world.setTileEntity(x, y, z, tileentity);
		}
	}
	
	public void breakBlock(World world, int x, int y, int z, Block block, int meta){
		if(!isBurning){
			TileEntityOreCrusher tileentityorecrusher = (TileEntityOreCrusher) world.getTileEntity(x, y, z);
			if(tileentityorecrusher != null){
				for(int i = 0; i < tileentityorecrusher.getSizeInventory(); ++i){
					ItemStack itemstack = tileentityorecrusher.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, (double) ((float) x + f), (double) ((float) y + f1), (double) ((float) 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 = (double) ((float) this.random.nextGaussian() * f3);
							entityitem.motionY = (double) ((float) this.random.nextGaussian() * f3 + 0.1F);
							entityitem.motionZ = (double) ((float) this.random.nextGaussian() * f3);
							world.spawnEntityInWorld(entityitem);
						}
					}
				}
				world.func_147453_f(x, y, z, block);
			}
		}
		super.breakBlock(world, x, y, z, block, meta);
	}
	
	@SideOnly(Side.CLIENT)
	public void randomDisplayTick(World world, int x, int y, int z, Random random){
		if(this.isBurning2){
			int direction = world.getBlockMetadata(x, y, z);
			float xx = (float) x + 0.5F, yy = (float) y + random.nextFloat() * 6.0F / 16.0F, zz = (float) z + 0.5F, xx2 = random.nextFloat() * 0.3F, zz2 = 0.5F;
			
			if(direction == 4){
				world.spawnParticle("smoke", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
				world.spawnParticle("flame", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
			}else if(direction == 5){
				world.spawnParticle("smoke", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
				world.spawnParticle("flame", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
			}else if(direction == 3){
				world.spawnParticle("smoke", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
				world.spawnParticle("flame", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
			}else if(direction == 2){
				world.spawnParticle("smoke", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
				world.spawnParticle("flame", (double) (xx - zz2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
			}
		}
	}

	@Override
	public TileEntity createNewTileEntity(World world, int par2) {
		return new TileEntityOreCrusher();
	}


}

 

ContainerOreCrusher

package ca.thecow.morecontent.inventory;

import ca.thecow.morecontent.tile_entity.TileEntityOreCrusher;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
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.inventory.SlotFurnace;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;

public class ContainerOreCrusher extends Container{
	
	private TileEntityOreCrusher tileOreCrusher;
	private int lastCookTime;
	private int lastBurnTime;
	private int lastItemBurnTime;
	
	public ContainerOreCrusher(InventoryPlayer player, TileEntityOreCrusher tileEntityOreCrusher){
		this.tileOreCrusher = tileEntityOreCrusher;
		this.addSlotToContainer(new Slot(tileEntityOreCrusher, 0, 56, 17));
		this.addSlotToContainer(new Slot(tileEntityOreCrusher, 1, 56, 53));
		this.addSlotToContainer(new SlotFurnace(player.player, tileEntityOreCrusher, 2, 116, 35));
		int i;
		
		for(i = 0; i < 3; ++i){
			for(int j = 0; j < 9; ++j){
				this.addSlotToContainer(new Slot(player, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
			}
		}
		
		for(i = 0; i < 9; ++i){
			this.addSlotToContainer(new Slot(player, i, 8 + i * 18, 142));
		}
		
	}
	
	public void addCraftingToCrafters(ICrafting craft){
		super.addCraftingToCrafters(craft);
		craft.sendProgressBarUpdate(this, 0, this.tileOreCrusher.oreCrusherCookTime);
		craft.sendProgressBarUpdate(this, 1, this.tileOreCrusher.oreCrusherBurnTime);
		craft.sendProgressBarUpdate(this, 2, this.tileOreCrusher.currentBurnTime);
	}
	
	public void detectAndSendChanges(){
		super.detectAndSendChanges();
		for(int i = 0; i < this.crafters.size(); ++i){
			ICrafting craft = (ICrafting) this.crafters.get(i);
			
			if(this.lastCookTime != this.tileOreCrusher.oreCrusherCookTime){
				craft.sendProgressBarUpdate(this, 0, this.tileOreCrusher.oreCrusherCookTime);
			}
			if(this.lastBurnTime != this.tileOreCrusher.oreCrusherBurnTime){
				craft.sendProgressBarUpdate(this, 1, this.tileOreCrusher.oreCrusherBurnTime);
			}
			if(this.lastItemBurnTime != this.tileOreCrusher.currentBurnTime){
				craft.sendProgressBarUpdate(this, 2, this.tileOreCrusher.currentBurnTime);
			}
		}
		
		this.lastBurnTime = this.tileOreCrusher.oreCrusherBurnTime;
		this.lastItemBurnTime = this.tileOreCrusher.currentBurnTime;
		this.lastCookTime = this.tileOreCrusher.oreCrusherCookTime;
	}
	
	@SideOnly(Side.CLIENT)
	public void updateProgressBar(int par1, int par2){
		if(par1 == 0){
			this.tileOreCrusher.oreCrusherCookTime = par2;
		}
		if(par1 == 1){
			this.tileOreCrusher.oreCrusherBurnTime = par2;
		}
		if(par1 == 2){
			this.tileOreCrusher.currentBurnTime = par2;
		}
	}
	
	@Override
	public boolean canInteractWith(EntityPlayer player) {
		return this.tileOreCrusher.isUseableByPlayer(player);
	}
	
	public ItemStack transferStackInSlot(EntityPlayer player, int par2){
		ItemStack itemStack = null;
		Slot slot = (Slot) this.inventorySlots.get(par2);
		
		if(slot != null && slot.getHasStack()){
			ItemStack itemStack1 = slot.getStack();
			itemStack = itemStack1.copy();
			
			if(par2 == 2){
				if(!this.mergeItemStack(itemStack1, 3, 39, true)){
					return null;
				}
				slot.onSlotChange(itemStack1, itemStack);
			}else if(par2 != 1 && par2 != 0){
				if(FurnaceRecipes.smelting().getSmeltingResult(itemStack1) != null){
					if(!this.mergeItemStack(itemStack1, 0, 1, false)){
						return null;
					}
				}else if(TileEntityOreCrusher.isItemFuel(itemStack1)){
					if(!this.mergeItemStack(itemStack1, 1, 2, false)){
						return null;
					}
				}else if(par2 >= 3 && par2 < 30){
					if(!this.mergeItemStack(itemStack1, 30, 39, false)){
						return null;
					}
				}else if(par2 >= 30 && par2 < 39 && !this.mergeItemStack(itemStack1, 3, 30, false)){
					return null;
				}
			}else if(!this.mergeItemStack(itemStack1, 3, 39, false)){
				return null;
			}
			if(itemStack1.stackSize == 0){
				slot.putStack((ItemStack) null);
			}else{
				slot.onSlotChanged();
			}
			if(itemStack1.stackSize == itemStack.stackSize){
				return null;
			}
			slot.onPickupFromSlot(player, itemStack1);
		}
		return itemStack;
	}

}

 

GuiOreCrusher

package ca.thecow.morecontent.gui;

import org.lwjgl.opengl.GL11;

import ca.thecow.morecontent.Ref;
import ca.thecow.morecontent.inventory.ContainerOreCrusher;
import ca.thecow.morecontent.tile_entity.TileEntityOreCrusher;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;

@SideOnly(Side.CLIENT)
public class GuiOreCrusher extends GuiContainer{
	
	private static final ResourceLocation oreCrusherGuiTextures = new ResourceLocation(Ref.MOD_ID + ":textures/gui/container/orecrusher.png");
	private TileEntityOreCrusher tileOreCrusher;

	public GuiOreCrusher(InventoryPlayer invPlayer, TileEntityOreCrusher tile) {
		super(new ContainerOreCrusher(invPlayer, tile));
		this.tileOreCrusher = tile;
	}
	
	protected void drawGuiContainerForegroundLayer(int par1, int par2){
		String string = this.tileOreCrusher.hasCustomInventoryName() ? this.tileOreCrusher.getInventoryName() : I18n.format(this.tileOreCrusher.getInventoryName(), new Object[0]);
		this.fontRendererObj.drawString(string, this.xSize / 2 - this.fontRendererObj.getStringWidth(string), 6, 4210752);
		this.fontRendererObj.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 96 + 2, 4210752);
	}

	@Override
	protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
		GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
		this.mc.getTextureManager().bindTexture(oreCrusherGuiTextures);
		int k = (this.width - this.xSize) / 2;
		int l = (this.height - this.ySize) / 2;
		this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
		int il;
		if(this.tileOreCrusher.isBurning()){
			il = this.tileOreCrusher.getBurnTimeRemainingScaled(12);
			this.drawTexturedModalRect(k + 56, l + 36 + 12 - il, 176, 12 - il, 14, il + 1);
		}
		
		il = this.tileOreCrusher.getCookProgressScaled(24);
		this.drawTexturedModalRect(k + 79, l + 34, 176, 14, il + 1, 16);
	}

}

 

TileEntityOreCrusher

package ca.thecow.morecontent.tile_entity;

import ca.thecow.morecontent.blocks.OreCrusher;
import ca.thecow.morecontent.init.Items;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;

public class TileEntityOreCrusher extends TileEntity implements ISidedInventory{
	
	private static final int[] slotsTop = new int[]{ 0 };
	private static final int[] slotsBottom = new int[]{ 2, 1 };
	private static final int[] slotsSides = new int[]{ 1 };
	
	private ItemStack[] oreCrusherItemStacks = new ItemStack[3];
	
	public int oreCrusherBurnTime;
	public int currentBurnTime;
	public int oreCrusherCookTime;
	public int furnaceSpeed = 300;
	
	private String oreCrusherName;
	
	public void oreCrusherName(String string){
		this.oreCrusherName = string;
	}

	@Override
	public int getSizeInventory() {
		return this.oreCrusherItemStacks.length;
	}

	@Override
	public ItemStack getStackInSlot(int slot) {
		return this.oreCrusherItemStacks[slot];
	}

	@Override
	public ItemStack decrStackSize(int var1, int var2) {
		if(this.oreCrusherItemStacks[var1] != null){
			ItemStack itemStack;
			if(this.oreCrusherItemStacks[var1].stackSize <= var2){
				itemStack = this.oreCrusherItemStacks[var1];
				this.oreCrusherItemStacks[var1] = null;
				return itemStack;
			}else{
				itemStack = this.oreCrusherItemStacks[var1].splitStack(var2);
				
				if(this.oreCrusherItemStacks[var1].stackSize == 0){
					this.oreCrusherItemStacks[var1] = null;
				}
				return itemStack;
			}
		}else{
			return null;
		}
	}

	@Override
	public ItemStack getStackInSlotOnClosing(int slot) {
		if(this.oreCrusherItemStacks[slot] != null){
			ItemStack itemStack = this.oreCrusherItemStacks[slot];
			this.oreCrusherItemStacks[slot] = null;
			return itemStack;
		}else{
			return null;
		}
	}

	@Override
	public void setInventorySlotContents(int slot, ItemStack itemStack) {
		this.oreCrusherItemStacks[slot] = itemStack;
		
		if(itemStack != null && itemStack.stackSize > this.getInventoryStackLimit()){
			itemStack.stackSize = this.getInventoryStackLimit();
			
		}
		
	}

	@Override
	public String getInventoryName() {
		return this.hasCustomInventoryName() ? this.oreCrusherName : "Ore Crusher";
	}

	@Override
	public boolean hasCustomInventoryName() {
		return this.oreCrusherName != null && this.oreCrusherName.length() > 0;
	}

	@Override
	public int getInventoryStackLimit() {
		return 64;
	}
	
	public void readFromNBT(NBTTagCompound tagCompound){
		super.readFromNBT(tagCompound);
		NBTTagList tagList = tagCompound.getTagList("Items", 10);
		this.oreCrusherItemStacks = new ItemStack[this.getSizeInventory()];
		
		for(int i = 0; i < tagList.tagCount(); i++){
			NBTTagCompound tagCompound1 = tagList.getCompoundTagAt(i);
			byte byte0 = tagCompound1.getByte("Slot");
			
			if(byte0 >= 0 && byte0 < this.oreCrusherItemStacks.length){
				this.oreCrusherItemStacks[byte0] = ItemStack.loadItemStackFromNBT(tagCompound1);
			}
		}
		
		this.oreCrusherBurnTime = (int)tagCompound.getShort("BurnTime");
		this.oreCrusherCookTime = (int)tagCompound.getShort("CookTime");
		this.currentBurnTime = getItemBurnTime(this.oreCrusherItemStacks[1]);
		
		if(tagCompound.hasKey("CustomName", 8)){
			this.oreCrusherName = tagCompound.getString("CustomName");
		}
	}
	
	public void writeToNBT(NBTTagCompound tagCompound){
		super.writeToNBT(tagCompound);
		
		tagCompound.setShort("BurnTime", (short) this.oreCrusherBurnTime);
		tagCompound.setShort("CookTime", (short) this.oreCrusherCookTime);
		NBTTagList tagList = new NBTTagList();
		
		for(int i = 0; i < this.oreCrusherItemStacks.length; ++i){
			if(this.oreCrusherItemStacks[i] != null){
				NBTTagCompound tagCompound1 = new NBTTagCompound();
				tagCompound1.setByte("slot", (byte) i);
				this.oreCrusherItemStacks[i].writeToNBT(tagCompound1);
				tagList.appendTag(tagCompound1);
			}
		}
		
		tagCompound.setTag("Items", tagList);
		
		if(this.hasCustomInventoryName()){
			tagCompound.setString("CustomName", this.oreCrusherName);
		}
	}
	
	@SideOnly(Side.CLIENT)
	public int getCookProgressScaled(int par1){
		return this.oreCrusherCookTime * par1 / this.furnaceSpeed;
	}
	
	@SideOnly(Side.CLIENT)
	public int getBurnTimeRemainingScaled(int par1){
		if(this.currentBurnTime == 0){
			this.currentBurnTime = 200;
		}
		return this.oreCrusherBurnTime * par1 / this.currentBurnTime;
	}
	
	public boolean isBurning(){
		return this.oreCrusherBurnTime > 0;
	}
	
	public void updateEntity(){
		boolean flag = this.oreCrusherBurnTime > 0;
		boolean flag1 = false;
		
		if(this.oreCrusherBurnTime > 0){
			--this.oreCrusherBurnTime;
		}
		
		if(!this.worldObj.isRemote){
			if(this.oreCrusherBurnTime != 0 || this.oreCrusherItemStacks[1] != null && this.oreCrusherItemStacks[0] != null){
			if(this.oreCrusherBurnTime == 0 && this.canSmelt()){
				this.currentBurnTime = this.oreCrusherBurnTime = getItemBurnTime(this.oreCrusherItemStacks[1]);
				
				if(this.oreCrusherBurnTime > 0){
					flag1 = true;
					if(this.oreCrusherItemStacks[1] != null){
						--this.oreCrusherItemStacks[1].stackSize;
						
						if(this.oreCrusherItemStacks[1].stackSize == 0){
							this.oreCrusherItemStacks[1] = oreCrusherItemStacks[1].getItem().getContainerItem(this.oreCrusherItemStacks[1]);
						}
					}
				}
			}
			
			if(this.isBurning() && this.canSmelt()){
				++this.oreCrusherCookTime;
				if(this.oreCrusherCookTime == 200){
					this.oreCrusherCookTime = 0;
					this.smeltItem();
					flag1 = true;
				}
			}else{
				this.oreCrusherCookTime = 0;
			}
		}
		
		if(flag != this.oreCrusherBurnTime > 0){
			flag1 = true;
			OreCrusher.updateBlockState(this.oreCrusherBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
		}
		
		if(flag1){
			this.markDirty();
		}
		}
	}
	
	private boolean canSmelt(){
		if(this.oreCrusherItemStacks[0] == null){
			return false;
		}else{
			ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.oreCrusherItemStacks[0]);
			if(itemStack == null) return false;
			if(this.oreCrusherItemStacks[2] == null) return true;
			if(!this.oreCrusherItemStacks[2].isItemEqual(itemStack)) return false;
			int result = oreCrusherItemStacks[2].stackSize + itemStack.stackSize;
			return result <= getInventoryStackLimit() && result <= this.oreCrusherItemStacks[2].getMaxStackSize();
		}
	}
	
	public void smeltItem(){
		if(this.canSmelt()){
			ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.oreCrusherItemStacks[0]);
			
			if(this.oreCrusherItemStacks[2] == null){
				this.oreCrusherItemStacks[2] = itemStack.copy();
			}else if(this.oreCrusherItemStacks[2].getItem() == itemStack.getItem()){
				this.oreCrusherItemStacks[2].stackSize += itemStack.stackSize;
			}
			
			--this.oreCrusherItemStacks[0].stackSize;
			
			if(this.oreCrusherItemStacks[0].stackSize <= 0){
				this.oreCrusherItemStacks[0] = null;
			}
		}
	}
	
	public static int getItemBurnTime(ItemStack itemStack){
		if(itemStack == null){
			return 0;
		}else{
			Item item = itemStack.getItem();
			
			if(item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air){
				Block block = Block.getBlockFromItem(item);
				
				if(block == ca.thecow.morecontent.init.Blocks.copper_block){
					return 14400;
				}
			}
			
			if(item == Items.copper_ingot){
				return 1600;
			}
			
			return 0;
		}
	}
	
	public static boolean isItemFuel(ItemStack itemStack){
		return getItemBurnTime(itemStack) > 0;
	}

	@Override
	public boolean isUseableByPlayer(EntityPlayer player) {
		return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double) this.xCoord + 0.5D, (double) this.yCoord + 0.5D, (double) this.zCoord + 0.5D) <= 64.0D;
	}

	@Override
	public void openInventory() {
		
	}

	@Override
	public void closeInventory() {
		
	}

	@Override
	public boolean isItemValidForSlot(int par1, ItemStack itemStack) {
		return par1 == 2 ? false : (par1 == 1 ? isItemFuel(itemStack) : true);
	}

	@Override
	public int[] getAccessibleSlotsFromSide(int par1) {
		return par1 == 0 ? slotsBottom : (par1 == 1) ? slotsTop : slotsSides;
	}

	@Override
	public boolean canInsertItem(int par1, ItemStack itemStack, int par3) {
		// TODO Auto-generated method stub
		return this.isItemValidForSlot(par1, itemStack);
	}

	@Override
	public boolean canExtractItem(int par1, ItemStack itemStack, int par3) {
		// TODO Auto-generated method stub
		return par3 != 0 || par1 != 1 || itemStack.getItem() == net.minecraft.init.Items.bucket;
	}

}

 

GuiHandler

package ca.thecow.morecontent.handler;

import ca.thecow.morecontent.gui.GuiOreCrusher;
import ca.thecow.morecontent.inventory.ContainerOreCrusher;
import ca.thecow.morecontent.tile_entity.TileEntityOreCrusher;
import cpw.mods.fml.common.network.IGuiHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;

public class GuiHandler implements IGuiHandler{

	@Override
	public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
		if(ID == 0){
			TileEntityOreCrusher tileEntityOreCrusher = (TileEntityOreCrusher) world.getTileEntity(x, y, z);
			return new ContainerOreCrusher(player.inventory, tileEntityOreCrusher);
		}
		return null;
	}

	@Override
	public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
		if(ID == 0){
			TileEntityOreCrusher tileEntityOreCrusher = (TileEntityOreCrusher) world.getTileEntity(x, y, z);
			return new GuiOreCrusher(player.inventory, tileEntityOreCrusher);
		}
		return null;
	}

}

 

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.