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