- 1,015
- 9
- 102
Создал контейнер из 5 слотов, но при его открытии он открывается, но сразу же закрывается. Открываю его предметом с пом. onItemRightClick
TileEntity (Он кривой, но работать должен):
GUI:
Container:
GuiHandler (зарегистрировал):
TileEntity (Он кривой, но работать должен):
Код:
package com.minebot.statics.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IChatComponent;
public class TileEntityMagnet extends TileEntity implements IInventory
{
private ItemStack[] inv;
public TileEntityMagnet(){ inv = new ItemStack[9]; }
@Override
public String getName() {
return "gui.tileentitymagnet";
}
@Override
public boolean hasCustomName() {
return true;
}
@Override
public IChatComponent getDisplayName() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getSizeInventory() {
return inv.length;
}
@Override
public ItemStack getStackInSlot(int index) {
return inv[index];
}
@Override
public ItemStack decrStackSize(int slot, int amt) {
ItemStack stack = getStackInSlot(slot);
if (stack != null) {
if (stack.stackSize <= amt) {
setInventorySlotContents(slot, null);
} else {
stack = stack.splitStack(amt);
if (stack.stackSize == 0) {
setInventorySlotContents(slot, null);
}
}
}
return stack;
}
@Override
public ItemStack removeStackFromSlot(int index) {
// TODO Auto-generated method stub
return null;
}
@Override
public void setInventorySlotContents(int index, ItemStack stack) {
inv[index] = stack;
if (stack != null && stack.stackSize > getInventoryStackLimit()) {
stack.stackSize = getInventoryStackLimit();
}
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
// TODO Auto-generated method stub
return false;
}
@Override
public void openInventory(EntityPlayer player) {
// TODO Auto-generated method stub
}
@Override
public void closeInventory(EntityPlayer player) {
// TODO Auto-generated method stub
}
@Override
public boolean isItemValidForSlot(int index, ItemStack stack) {
// TODO Auto-generated method stub
return false;
}
@Override
public int getField(int id) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void setField(int id, int value) {
// TODO Auto-generated method stub
}
@Override
public int getFieldCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void clear() {
// TODO Auto-generated method stub
}
}
GUI:
Код:
package com.minebot.statics.gui;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.IInventory;
import net.minecraft.util.ResourceLocation;
public class GUIMagnet extends GuiContainer {
public GUIMagnet(IInventory playerInv, TileEntityMagnet te) {
super(new ContainerMagnet(playerInv, te));
this.xSize = 176;
this.ySize = 166;
}
@Override
protected void drawGuiContainerBackgroundLayer(float par1, int par2,
int par3) {
System.out.println("Прорисовка GUI");
//draw your Gui here, only thing you need to change is the path
ResourceLocation texture = new ResourceLocation("/gui/trap.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.renderEngine.bindTexture(texture);
int x = (width - xSize) / 2;
int y = (height - ySize) / 2;
this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
}
}
Container:
Код:
package com.minebot.statics.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerMagnet extends Container
{
private TileEntityMagnet te;
public ContainerMagnet(IInventory playerInv, TileEntityMagnet te) {
this.te = te;
// Tile Entity, Slot 0-5, Slot IDs 0-5
for(int i = 0; i <= 5; i++)
{
int x = 45 + i * 18;
int y = 17;
addSlotToContainer(new Slot((IInventory) te, i, x, y));
}
// Player Inventory, Slot 9-35, Slot IDs 9-35
for (int y = 0; y < 3; ++y) {
for (int x = 0; x < 9; ++x) {
this.addSlotToContainer(new Slot(playerInv, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));
}
}
// Player Inventory, Slot 0-8, Slot IDs 36-44
for (int x = 0; x < 9; ++x) {
this.addSlotToContainer(new Slot(playerInv, x, 8 + x * 18, 142));
}
}
@Override
public boolean canInteractWith(EntityPlayer playerIn) {
return te.isUseableByPlayer(playerIn);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer playerIn, int fromSlot)
{
ItemStack previous = null;
Slot slot = (Slot) this.inventorySlots.get(fromSlot);
if (slot != null && slot.getHasStack()) {
ItemStack current = slot.getStack();
previous = current.copy();
if (fromSlot < 6) {
if (!this.mergeItemStack(current, 6, 45, true))
return null;
} else {
if (!this.mergeItemStack(current, 0, 6, false))
return null;
}
if (current.stackSize == 0)
slot.putStack((ItemStack) null);
else
slot.onSlotChanged();
if (current.stackSize == previous.stackSize)
return null;
slot.onPickupFromSlot(playerIn, current);
}
return previous;
}
}
GuiHandler (зарегистрировал):
Код:
package com.minebot.statics.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.IGuiHandler;
public class GuiHandler implements IGuiHandler{
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world,
int x, int y, int z) {
if(ID == 0){ return new ContainerMagnet(player.inventory, new TileEntityMagnet()); }
return null;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world,
int x, int y, int z) {
if(ID == 0){ return new GUIMagnet(player.inventory, new TileEntityMagnet()); }
return null;
}
}