25 juil. 2015, 16:34

Ah ouais, désolé xP.

GuiHandler:

​package diabolicatrix.base.gui;

import cpw.mods.fml.common.network.IGuiHandler;
import diabolicatrix.base.container.ContainerTestChest;
import diabolicatrix.base.tileentity.TileEntityBlockChest;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
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) {
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityBlockChest)
{
return new ContainerTestChest((TileEntityBlockChest)tile, player.inventory);
}
return null;
}

@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityBlockChest)
{
return new GuiTestChest((TileEntityBlockChest)tile, player.inventory);
}
return null;
}

}

Gui:

​package diabolicatrix.base.gui;

import org.lwjgl.opengl.GL11;

import diabolicatrix.base.container.ContainerAlloyFurnace;
import diabolicatrix.base.tileentity.TileEntityAlloyFurnace;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.util.ResourceLocation;

public class GuiAlloyFurnace extends GuiContainer {

private static final ResourceLocation texture = new ResourceLocation("t4:textures/gui/container/guialloyfurnace.png");
   private TileEntityAlloyFurnace tileAlloyFurnace;
   private IInventory playerInv;

public GuiAlloyFurnace(TileEntityAlloyFurnace tile, InventoryPlayer inventory) 
{
super(new ContainerAlloyFurnace(tile, inventory));
       this.tileAlloyFurnace = tile;
       this.playerInv = inventory;
       this.allowUserInput = false;
       this.ySize = 256;
       this.xSize = 256;
}

@Override
protected void drawGuiContainerBackgroundLayer(float partialRenderTick, int x, int y) 
{

GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
       this.mc.getTextureManager().bindTexture(texture);
       int k = (this.width - this.xSize) / 2;
       int l = (this.height - this.ySize) / 2;
       this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
       this.drawTexturedModalRect(0, 0, 176, 14, 100 + 1, 16);

}

protected void drawGuiContainerForegroundLayer(int x, int y)
   {
       this.fontRendererObj.drawString(this.playerInv.hasCustomInventoryName() ? this.playerInv.getInventoryName() : I18n.format(this.playerInv.getInventoryName()), 10, this.ySize - 98, 4210752);
   }

}

Container:

​package diabolicatrix.base.container;

import diabolicatrix.base.SlotResult;
import diabolicatrix.base.tileentity.TileEntityAlloyFurnace;
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;

public class ContainerAlloyFurnace extends Container {

private TileEntityAlloyFurnace tileAlloyFurnace;

public ContainerAlloyFurnace(TileEntityAlloyFurnace tile, InventoryPlayer inventory)
{

        this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 0, 49, 75));
        this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 1, 89, 75));
        this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 2, 129, 75));
        this.addSlotToContainer(new SlotResult(this.tileAlloyFurnace, 3, 89, 135));
        this.bindPlayerInventory(inventory);
}

@Override
public boolean canInteractWith(EntityPlayer player) {
return this.tileAlloyFurnace.isUseableByPlayer(player);
}

private void bindPlayerInventory(InventoryPlayer inventory)
{
int i;
for (i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 17 + j * 18, 171 + i * 18));
            }
        }

        for (i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(inventory, i, 17 + i * 18, 229));
        }
}

public ItemStack transferStackInSlot(EntityPlayer player, int quantity)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(quantity);

        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();

            if (quantity < this.tileAlloyFurnace.getSizeInventory())
            {
                if (!this.mergeItemStack(itemstack1, this.tileAlloyFurnace.getSizeInventory(), this.inventorySlots.size(), true))
                {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 0, this.tileAlloyFurnace.getSizeInventory(), false))
            {
                return null;
            }

            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }
        }

        return itemstack;
    }

public void onContainerClosed(EntityPlayer player)
    {
        super.onContainerClosed(player);
        this.tileAlloyFurnace.closeInventory();
    }
}

Block:

​package diabolicatrix.base.block;

import java.util.List;
import java.util.Random;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import diabolicatrix.base.tileentity.TileEntityAlloyFurnace;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class BlockAlloyFurnace extends Block {

private IIcon top, bottom, behind, front, right, left, fronto;
public static String[] subBlock = new String[] { "block1", "block2"};
public IIcon[] iconArray = new IIcon[subBlock.length];

public BlockAlloyFurnace(Material material) {
super(material);
}

@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iiconregister) {
this.blockIcon = iiconregister.registerIcon("t4:furnace_top");
this.top = iiconregister.registerIcon("t4:furnace_top");
this.bottom = iiconregister.registerIcon("t4:furnace_top");
this.behind = iiconregister.registerIcon("t4:furnace_side");
this.front = iiconregister.registerIcon("t4:furnace_front");
this.fronto = iiconregister.registerIcon("t4:furnace_fronto");
this.left = iiconregister.registerIcon("t4:furnace_side");
this.right = iiconregister.registerIcon("t4:furnace_side");

}

public int damageDropped(int metadata) {
return metadata;
}

    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
    {
    TileEntity tile = world.getTileEntity(x, y, z);

        if(tile instanceof TileEntityAlloyFurnace){
        int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
        ((TileEntityAlloyFurnace)tile).setDirection((byte)direction);
        }
    }

    @SideOnly(Side.CLIENT)
    public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
    {
    int metadata = world.getBlockMetadata(x, y, z);
    if (metadata == 1){

if (side == 0 || side == 1) {
return this.bottom;
}
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityAlloyFurnace){
byte direction = ((TileEntityAlloyFurnace)tile).getDirection();
return side == 3 && direction == 0 ? this.fronto : (side == 4 && direction == 1 ? this.fronto : (side == 2 && direction == 2 ? this.fronto : (side == 5 && direction == 3 ? this.fronto : this.top)));
}
    }
    else if (metadata == 0){

if (side == 0 || side == 1) {
return this.bottom;
}
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof TileEntityAlloyFurnace){
byte direction = ((TileEntityAlloyFurnace)tile).getDirection();
return side == 3 && direction == 0 ? this.front : (side == 4 && direction == 1 ? this.front : (side == 2 && direction == 2 ? this.front : (side == 5 && direction == 3 ? this.front : this.top)));
}
    }
        return this.getIcon(side, world.getBlockMetadata(x, y, z));
    }

@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata) {
if (metadata == 1) {
if (side == 0) {
return this.bottom;
} else if (side == 1) {
return this.top;
} else if (side == 2) {
return this.behind;
} else if (side == 3) {
return this.fronto;
} else if (side == 4) {
return this.left;
} else if (side == 5) {
return this.right;
}
}
else {
if (side == 0) {
return this.bottom;
} else if (side == 1) {
return this.top;
} else if (side == 2) {
return this.behind;
} else if (side == 3) {
return this.front;
} else if (side == 4) {
return this.left;
} else if (side == 5) {
return this.right;
}
}
return this.blockIcon;

}

@Override
public boolean hasTileEntity(int metadata) {
return true;
}

@Override
public TileEntity createTileEntity(World world, int metadata) {
return new TileEntityAlloyFurnace();
}

public void breakBlock(World world, int x, int y, int z, Block block, int metadata)
    {
        TileEntity tileentity = world.getTileEntity(x, y, z);

       if (tileentity instanceof IInventory)
       {
        IInventory inv = (IInventory)tileentity;
           for (int i1 = 0; i1 < inv.getSizeInventory(); ++i1)
           {
               ItemStack itemstack = inv.getStackInSlot(i1);

               if (itemstack != null)
               {
                   float f = world.rand.nextFloat() * 0.8F + 0.1F;
                   float f1 = world.rand.nextFloat() * 0.8F + 0.1F;
                   EntityItem entityitem;

                   for (float f2 = world.rand.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; world.spawnEntityInWorld(entityitem))
                   {
                       int j1 = world.rand.nextInt(21) + 10;

                       if (j1 > itemstack.stackSize)
                       {
                           j1 = itemstack.stackSize;
                       }

                       itemstack.stackSize -= j1;
                       entityitem = new EntityItem(world, (double)((float)x + f), (double)((float)y + f1), (double)((float)z + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
                       float f3 = 0.05F;
                       entityitem.motionX = (double)((float)world.rand.nextGaussian() * f3);
                       entityitem.motionY = (double)((float)world.rand.nextGaussian() * f3 + 0.2F);
                       entityitem.motionZ = (double)((float)world.rand.nextGaussian() * f3);

                       if (itemstack.hasTagCompound())
                       {
                           entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
                       }
                   }
               }
           }

           world.func_147453_f(x, y, z, block);
       }

        super.breakBlock(world, x, y, z, block, metadata);
    }

}

SlotResult:

​package diabolicatrix.base;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;

public class SlotResult extends Slot {

public SlotResult(IInventory inventory, int id, int x, int y) 
{
super(inventory, id, x, y);
}

@Override
public boolean isItemValid(ItemStack stack)
    {
        return false;
    }

public ItemStack decrStackSize(int amount)
    {
        return super.decrStackSize(amount);
    }

public void onPickupFromSlot(EntityPlayer player, ItemStack stack)
    {
        super.onCrafting(stack);
        super.onPickupFromSlot(player, stack);
    }

}

Recipes:

​package diabolicatrix.base.recipes;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import diabolicatrix.base.Base;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class BlockAlloyFurnaceRecipes {

private static final BlockAlloyFurnaceRecipes smeltingBase = new BlockAlloyFurnaceRecipes();
private Map smeltingList = new HashMap();

public BlockAlloyFurnaceRecipes()
{
this.addRecipe(Items.apple, Items.apple, Items.arrow, new ItemStack(Blocks.diamond_block));
}

public void addRecipe(ItemStack stack1, ItemStack stack2, ItemStack stack3, ItemStack stack4)
{
ItemStack[] stackList = new ItemStack[]{stack1, stack2, stack3};
this.smeltingList.put(stackList, stack4);
}

        public void addRecipe(Item item1, Item item2, Item item3, ItemStack stack)
{
this.addRecipe(new ItemStack(item1), new ItemStack(item2), new ItemStack(item3), stack);
}

public void addRecipe(Block block1, Item item2, Item item3, ItemStack stack)
{
this.addRecipe(Item.getItemFromBlock(block1), item2, item3, stack);
}

public void addRecipe(Block block1, Block block2, Item item3, ItemStack stack)
{
this.addRecipe(Item.getItemFromBlock(block1), Item.getItemFromBlock(block2), item3, stack);
}

public void addRecipe(Block block1, Block block2, Block block3, ItemStack stack)
{
this.addRecipe(Item.getItemFromBlock(block1), Item.getItemFromBlock(block2), Item.getItemFromBlock(block3), stack);
}

public ItemStack getSmeltingResult(ItemStack[] stack) 
{
    Iterator iterator = this.smeltingList.entrySet().iterator();
    Entry entry;

    do
    {
        if (!iterator.hasNext())
        {
            return null; 
        }
           entry = (Entry)iterator.next();
       }
       while (!this.isSameKey(stack, (ItemStack[])entry.getKey())); 

       return (ItemStack)entry.getValue();
 }

private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2)
{
boolean isSame = false; 
for(int i=0; i<=2; i++) 
{
if(stackList*.getItem() == stackList2*.getItem())
{
isSame = true; 
}
else
{
return false;
}
}
return isSame;
}

public Map getSmeltingList()
{
       return this.smeltingList;
    }

public static BlockAlloyFurnaceRecipes smelting()
{
return smeltingBase;
}

public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitx, float hity, float hitz)
{
    if (world.isRemote)
    {
        return true;
    }
    else
    {
    player.openGui(Base.instance, 1, world, x, y, z);
        return true;
    }
}
}

Et c’est tout je crois.