- 49
- 3
- 3
Я решил сделать что-то на подобии личного склада вызываемого при нажатии кнопки в игровом меню. И теперь встал вопрос, как сделать склад индивидуальным и чтобы предметы сохранялись там?
Надеюсь на понимание и помощь
Надеюсь на понимание и помощь
Java:
public class ContainerPersonal extends Container {
public final IInventory inventory;
public EntityPlayer player;
public ContainerPersonal(EntityPlayer player, InventoryPlayer inventoryPlayer, IInventory inventory) {
this.inventory = inventory;
this.player = player;
int j;
int k;
for (j = 0; j < 3; ++j)
{
for (k = 0; k < 9; ++k)
{
this.addSlotToContainer(new Slot(inventory, k + j * 9, 8 + k * 18, 18 + j * 18));
}
}
this.bindPlayerInventory(inventoryPlayer);
}
protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) {
int i;
for(i = 0; i < 3; ++i) {
for(int j = 0; j < 9; ++j) {
this.addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
}
}
for(i = 0; i < 9; ++i) {
this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142));
}
}
public boolean canInteractWith(EntityPlayer var1) {
return true;
}
}
Java:
public class GuiPersonal extends GuiContainer {
public EntityPlayer player;
private static IInventory inventory;
public ContainerPersonal container;
public GuiPersonal(InventoryPlayer inv) {
super(new ContainerPersonal(inv.player, inv, new InventoryPesronal(inv.player.getHeldItem())));
this.container = (ContainerPersonal)super.inventorySlots;
this.inventory = this.container.inventory;
}
protected void drawGuiContainerForegroundLayer(int param1, int param2) {
super.fontRenderer.drawString("Личный склад", 61, 71, 42107);
}
protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
GL11.glPushMatrix();
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("flame", "textures/personal.png"));
this.drawTexturedModalRect(super.guiLeft - 1, super.guiTop + 0, 0, 0, super.xSize + 21, super.ySize);
GL11.glPopMatrix();
}
}
Java:
public class InventoryPesronal implements IInventory {
private String name = "Inventory Item Personal";
private final ItemStack stack;
public static final int INV_SIZE = 1;
ItemStack[] inventory = new ItemStack[32];
public InventoryPesronal(ItemStack var1) {
this.stack = var1;
if(!this.stack.hasTagCompound()) {
this.stack.setTagCompound(new NBTTagCompound());
}
this.readFromNBT(this.stack.getTagCompound());
}
public int getSizeInventory() {
return this.inventory.length;
}
public ItemStack getStackInSlot(int var1) {
return this.inventory[var1];
}
public ItemStack decrStackSize(int var1, int var2) {
ItemStack var3 = this.getStackInSlot(var1);
if(var3 != null) {
if(var3.stackSize > var2) {
var3 = var3.splitStack(var2);
this.onInventoryChanged();
} else {
this.setInventorySlotContents(var1, (ItemStack)null);
}
}
return var3;
}
public ItemStack getStackInSlotOnClosing(int var1) {
ItemStack var2 = this.getStackInSlot(var1);
this.setInventorySlotContents(var1, (ItemStack)null);
return var2;
}
public void setInventorySlotContents(int var1, ItemStack var2) {
this.inventory[var1] = var2;
if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) {
var2.stackSize = this.getInventoryStackLimit();
}
this.onInventoryChanged();
}
public String getInvName() {
return this.name;
}
public boolean isInvNameLocalized() {
return this.name.length() > 0;
}
public int getInventoryStackLimit() {
return 64;
}
public void onInventoryChanged() {
for(int var1 = 0; var1 < this.getSizeInventory(); ++var1) {
if(this.getStackInSlot(var1) != null && this.getStackInSlot(var1).stackSize == 0) {
this.setInventorySlotContents(var1, (ItemStack)null);
}
}
this.writeToNBT(this.stack.getTagCompound());
}
public boolean isUseableByPlayer(EntityPlayer var1) {
return true;
}
public void openChest() {}
public void closeChest() {}
public void readFromNBT(NBTTagCompound var1) {
NBTTagList var2 = var1.getTagList("ItemInventory");
for(int var3 = 0; var3 < var2.tagCount(); ++var3) {
NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
int var5 = var4.getInteger("Slot");
if(var5 >= 0 && var5 < this.getSizeInventory()) {
this.setInventorySlotContents(var5, ItemStack.loadItemStackFromNBT(var4));
}
}
}
public void writeToNBT(NBTTagCompound var1) {
NBTTagList var2 = new NBTTagList();
for(int var3 = 0; var3 < this.getSizeInventory(); ++var3) {
if(this.getStackInSlot(var3) != null) {
NBTTagCompound var4 = new NBTTagCompound();
var4.setInteger("Slot", var3);
this.getStackInSlot(var3).writeToNBT(var4);
var2.appendTag(var4);
}
}
var1.setTag("ItemInventory", var2);
}
public boolean isItemValidForSlot(int i, ItemStack itemstack) {
return !(itemstack.getItem() instanceof ItemCoal);
}
}