How guys, I'm modding with Forge-10.13.2.1230 on Eclipse.
Here is the case, i modded a custom inventory which i want to cover the original one with Key 'E'.
And i read some tutorials about "IExtendedProperites", and i did make one.
But here comes some problems.
When I test in the Eclipse ( open server and client in the same and log in with IP:127.0.0.1),
items in custom inventory works good. but when i separate code and compile into two jar file
which just for client and server, and then log in.
First time i clicked item in custom inventory, i can move , drag, click the item.
After i place down a item into slot , second time i clicked it, the item just disappear strangely.
RPGContainer.class
package org.mocraft.Inventory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
public class ContainerRPGPlayer extends Container {
private final EntityPlayer player;
private InventoryRPGPlayer rpgInventory;
public ContainerRPGPlayer(EntityPlayer player, InventoryRPGPlayer rpgInventory) {
this.player = player;
this.rpgInventory = rpgInventory;
for(int i = 0; i < 4; ++i) {
for(int j = 0; j < 9; ++j) {
this.addSlotToContainer(new RPGSlot(rpgInventory, i * 9 + j, 8 + j * 18, 84 + i * 18));
}
}
}
@Override
public boolean canInteractWith(EntityPlayer player) { return true; }
}
RPGExtendedProperites.class
package org.mocraft.Inventory;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.common.IExtendedEntityProperties;
public class ExtendedRPGPlayer implements IExtendedEntityProperties {
private final static String EXT_PROP_NAME = "ExtendedRPGPlayer";
private EntityPlayer player;
public final InventoryRPGPlayer inventory = new InventoryRPGPlayer();
public ExtendedRPGPlayer(EntityPlayer player) {
this.player = player;
}
public static final void register(EntityPlayer player) { player.registerExtendedProperties(EXT_PROP_NAME, new ExtendedRPGPlayer(player)); }
public static final ExtendedRPGPlayer get(EntityPlayer player) { return (ExtendedRPGPlayer) player.getExtendedProperties(EXT_PROP_NAME); }
@Override
public void saveNBTData(NBTTagCompound compound) {
NBTTagCompound properties = new NBTTagCompound();
inventory.writeToNBT(properties);
compound.setTag(EXT_PROP_NAME, properties);
}
@Override
public void loadNBTData(NBTTagCompound compound) {
NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
this.inventory.readFromNBT(properties);
}
@Override
public void init(Entity entity, World world) { }
}
RPGGui.class
package org.mocraft.Inventory;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.EntityPlayer;
public class GuiRPGInventory extends GuiContainer {
public GuiRPGInventory(EntityPlayer player, InventoryRPGPlayer rpgInventory) {
super(new ContainerRPGPlayer(player, rpgInventory));
}
@Override
protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
}
}
RPGInventory.class
package org.mocraft.Inventory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
public class InventoryRPGPlayer implements IInventory {
private final String tagName = "RPGInventory";
public ItemStack[] inventory = new ItemStack[36];
public EntityPlayer player;
public InventoryRPGPlayer() { }
public int getFirstEmptySlot() {
for(int i = 0; i < this.inventory.length; ++i) { if(this.inventory[i] == null) { return i; } }
return -1;
}
private int storeItemStack(ItemStack itemStack) {
for (int i = 0; i < this.inventory.length; ++i) {
if (this.inventory[i] != null &&
this.inventory[i].getItem() == itemStack.getItem() &&
this.inventory[i].isStackable() &&
this.inventory[i].stackSize < this.inventory[i].getMaxStackSize() &&
this.inventory[i].stackSize < this.getInventoryStackLimit() &&
(!this.inventory[i].getHasSubtypes() || this.inventory[i].getItemDamage() == itemStack.getItemDamage()) &&
ItemStack.areItemStackTagsEqual(this.inventory[i], itemStack)) {
return i;
}
}
return -1;
}
@Override
public int getSizeInventory() { return this.inventory.length; }
@Override
public ItemStack getStackInSlot(int slot) { return this.inventory[slot]; }
@Override
public ItemStack decrStackSize(int slot, int amount) {
if(inventory[slot] == null) { return null; }
if(inventory[slot].stackSize >= amount) { inventory[slot].stackSize -= amount; return inventory[slot]; }
else { inventory[slot] = null; return null; }
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) { return null; }
@Override
public void setInventorySlotContents(int slot, ItemStack itemStack) { this.inventory[slot] = itemStack; }
@Override
public String getInventoryName() { return "container.mocraftInventory"; }
@Override
public boolean hasCustomInventoryName() { return false; }
@Override
public int getInventoryStackLimit() { return 64; }
@Override
public void markDirty() { }
@Override
public boolean isUseableByPlayer(EntityPlayer player) { return (this.player.isDead ? false : player.getDistanceSqToEntity(this.player) <= 64.0D); }
@Override
public void openInventory() { }
@Override
public void closeInventory() { }
@Override
public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return true; }
public void writeToNBT(NBTTagCompound compound) {
NBTTagList items = new NBTTagList();
for(int i = 0; i < getSizeInventory(); ++i) {
if(getStackInSlot(i) != null) {
NBTTagCompound item = new NBTTagCompound();
item.setByte("Slot", (byte) i);
getStackInSlot(i).writeToNBT(item);
items.appendTag(item);
}
}
compound.setTag(tagName, items);
return;
}
public void readFromNBT(NBTTagCompound compound) {
NBTTagList items = compound.getTagList(tagName, 10);
for(int i = 0; i < items.tagCount(); ++i) {
NBTTagCompound item = (NBTTagCompound) items.getCompoundTagAt(i);
byte slotNum = item.getByte("Slot");
if(slotNum >= 0 && slotNum < getSizeInventory()) {
this.inventory[slotNum] = ItemStack.loadItemStackFromNBT(item);
}
}
return;
}
}
Thx a lot if any once can solve it!
if any thing is incorrect plz let me know!
-Clode