Здравствуйте. Недавно начал разбираться с созданием GUI. По образцу из инет сделал простенький гуй с одним слотом. Вроде все работает, только есть несколько проблем:
1) При попытке положить что либо в слот левой кнопкой мыши то, что ты кладешь исчезает. Да и вообще при нажатии на слот ЛКМ его содержимое исчезает.
2) Если класть предметы правой кнопкой, то их количество удваивается в слоте. Хотя, когда переносишь из этого слота обратно в инвентарь, то количество становится нормальным. Подскажите, где косяки. Код TileEntity частично содрал с кода у печки.
1) При попытке положить что либо в слот левой кнопкой мыши то, что ты кладешь исчезает. Да и вообще при нажатии на слот ЛКМ его содержимое исчезает.
2) Если класть предметы правой кнопкой, то их количество удваивается в слоте. Хотя, когда переносишь из этого слота обратно в инвентарь, то количество становится нормальным. Подскажите, где косяки. Код TileEntity частично содрал с кода у печки.
public class BlockTestTile extends TileEntity implements ISidedInventory,IPipeConnection{
private ItemStack[] testItemStack=new ItemStack[1];
@Override
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
return new int[0];
}
@Override
public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) {
return this.isItemValidForSlot(p_102007_1_, p_102007_2_);
}
@Override
public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) {
return false;
}
@Override
public int getSizeInventory() {
return testItemStack.length;
}
@Override
public ItemStack getStackInSlot(int index) {
if (index < 0 || index >= this.getSizeInventory())
return null;
return this.testItemStack[index];
}
@Override
public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
if (this.testItemStack[p_70298_1_] != null)
{
ItemStack itemstack;
if (this.testItemStack[p_70298_1_].stackSize <= p_70298_2_)
{
itemstack = this.testItemStack[p_70298_1_];
this.testItemStack[p_70298_1_] = null;
return itemstack;
}
else
{
itemstack = this.testItemStack[p_70298_1_].splitStack(p_70298_2_);
if (this.testItemStack[p_70298_1_].stackSize == 0)
{
this.testItemStack[p_70298_1_] = null;
}
return itemstack;
}
}
else
{
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
if (this.testItemStack[0] != null)
{
ItemStack itemstack = this.testItemStack[0];
this.testItemStack[0] = null;
return itemstack;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int index, ItemStack stack) {
if (index < 0 || index >= this.getSizeInventory())
return;
if (stack != null && stack.stackSize > this.getInventoryStackLimit())
stack.stackSize = this.getInventoryStackLimit();
if (stack != null && stack.stackSize == 0)
stack = null;
this.testItemStack[index] = stack;
this.markDirty();
//System.out.println("stack: "+Integer.toString(stack.stackSize));
//System.out.println("index: "+Integer.toString(index));
}
@Override
public String getInventoryName() {
return "TestInventory";
}
@Override
public boolean hasCustomInventoryName() {
return true;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : p_70300_1_.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 p_94041_1_, ItemStack p_94041_2_) {
return true;
}
@Override
public ConnectOverride overridePipeConnection(IPipeTile.PipeType pipeType, ForgeDirection forgeDirection) {
if(pipeType!= IPipeTile.PipeType.ITEM) {
return ConnectOverride.CONNECT;
}else {
return ConnectOverride.DISCONNECT;
}
}
}
private ItemStack[] testItemStack=new ItemStack[1];
@Override
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
return new int[0];
}
@Override
public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) {
return this.isItemValidForSlot(p_102007_1_, p_102007_2_);
}
@Override
public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) {
return false;
}
@Override
public int getSizeInventory() {
return testItemStack.length;
}
@Override
public ItemStack getStackInSlot(int index) {
if (index < 0 || index >= this.getSizeInventory())
return null;
return this.testItemStack[index];
}
@Override
public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
if (this.testItemStack[p_70298_1_] != null)
{
ItemStack itemstack;
if (this.testItemStack[p_70298_1_].stackSize <= p_70298_2_)
{
itemstack = this.testItemStack[p_70298_1_];
this.testItemStack[p_70298_1_] = null;
return itemstack;
}
else
{
itemstack = this.testItemStack[p_70298_1_].splitStack(p_70298_2_);
if (this.testItemStack[p_70298_1_].stackSize == 0)
{
this.testItemStack[p_70298_1_] = null;
}
return itemstack;
}
}
else
{
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
if (this.testItemStack[0] != null)
{
ItemStack itemstack = this.testItemStack[0];
this.testItemStack[0] = null;
return itemstack;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int index, ItemStack stack) {
if (index < 0 || index >= this.getSizeInventory())
return;
if (stack != null && stack.stackSize > this.getInventoryStackLimit())
stack.stackSize = this.getInventoryStackLimit();
if (stack != null && stack.stackSize == 0)
stack = null;
this.testItemStack[index] = stack;
this.markDirty();
//System.out.println("stack: "+Integer.toString(stack.stackSize));
//System.out.println("index: "+Integer.toString(index));
}
@Override
public String getInventoryName() {
return "TestInventory";
}
@Override
public boolean hasCustomInventoryName() {
return true;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : p_70300_1_.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 p_94041_1_, ItemStack p_94041_2_) {
return true;
}
@Override
public ConnectOverride overridePipeConnection(IPipeTile.PipeType pipeType, ForgeDirection forgeDirection) {
if(pipeType!= IPipeTile.PipeType.ITEM) {
return ConnectOverride.CONNECT;
}else {
return ConnectOverride.DISCONNECT;
}
}
}