Posted August 12, 20169 yr Okay so my custom Inventory's getStackInSlot does not render the item in the overlay. [spoiler=InventoryWeapons] public class InventoryWeapons implements IInventory { private final String name = "Inventory Weapons"; private final String tagName = "InvWeaponsTag"; public static final int INV_SIZE = 2; public ItemStack[] inventory = new ItemStack[iNV_SIZE]; public InventoryWeapons() { } @Override public int getSizeInventory() { return inventory.length; } @Override public ItemStack getStackInSlot(int slot) { return inventory[slot]; } @Override public ItemStack decrStackSize(int slot, int amount) { ItemStack stack = getStackInSlot(slot); if (stack != null) { if (stack.stackSize > amount) { stack = stack.splitStack(amount); this.markDirty(); } else { this.setInventorySlotContents(slot, null); } } return stack; } @Override public ItemStack removeStackFromSlot(int slot) { ItemStack stack = getStackInSlot(slot); this.setInventorySlotContents(slot, null); return stack; } @Override public void setInventorySlotContents(int slot, ItemStack stack) { this.inventory[slot] = stack; if (stack != null && stack.stackSize > this.getInventoryStackLimit()) { stack.stackSize = this.getInventoryStackLimit(); } this.markDirty(); } @Override public String getName() { return null; } @Override public boolean hasCustomName() { return name.length() > 0; } @Override public int getInventoryStackLimit() { return 1; } @Override public void markDirty() { for (int i = 0; i < this.getSizeInventory(); ++i) { if (this.getStackInSlot(i) != null && this.getStackInSlot(i).stackSize == 0) { this.inventory[i] = null; } } } @Override public boolean isUseableByPlayer(EntityPlayer player) { return true; } @Override public void openInventory(EntityPlayer player) {} @Override public void closeInventory(EntityPlayer player) {} @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return stack.getItem() instanceof ItemWeapons; } 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); } public void readFromNBT(NBTTagCompound compound) { NBTTagList items = compound.getTagList(tagName, compound.getId()); for (int i = 0; i < items.tagCount(); ++i) { NBTTagCompound item = (NBTTagCompound) items.getCompoundTagAt(i); byte slot = item.getByte("Slot"); if (slot >= 0 && slot < getSizeInventory()) { inventory[slot] = ItemStack.loadItemStackFromNBT(item); } } } @Override public IChatComponent getDisplayName() { return new ChatComponentText(getName()); } @Override public int getField(int id) { return 0; } @Override public void setField(int id, int value) {} @Override public int getFieldCount() { return 0; } @Override public void clear() { for (int i = 0; i < inventory.length; ++i) { inventory[i] = null; } } } [spoiler=GUI Overlay] public class GuiWeaponSlots extends Gui { private static final ResourceLocation texture = new ResourceLocation(Reference.MOD_ID + ":textures/gui/weaponSlots.png"); @SubscribeEvent(priority=EventPriority.NORMAL) public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) { if (event.isCancelable() || event.type != ElementType.HEALTH) { Minecraft mc = Minecraft.getMinecraft(); ScaledResolution sr = new ScaledResolution(mc); int i = sr.getScaledWidth() / 2; InventoryWeapons invWeapons = new InventoryWeapons(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(texture); this.drawTexturedModalRect(i - 121, sr.getScaledHeight() - 22, 0, 0, 22, 22); this.drawTexturedModalRect(i + 101, sr.getScaledHeight() - 22, 0, 0, 22, 22); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(0), i - 118, sr.getScaledHeight() - 19); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(1), i + 104, sr.getScaledHeight() - 19); } } } Thanks in advance http://www.startrek.com/uploads/assets/articles/61c89a9d73c284bda486afaeaf01cdb27180359b.jpg[/img] Till next time. Thank you for delivering funny scenes to Star Trek as Chekov . Will always remember you
August 12, 20169 yr You will need to call readFromNBT to make sure the itemstacks in the array are not equal to null. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
August 12, 20169 yr Author call readFromNBT from where? http://www.startrek.com/uploads/assets/articles/61c89a9d73c284bda486afaeaf01cdb27180359b.jpg[/img] Till next time. Thank you for delivering funny scenes to Star Trek as Chekov . Will always remember you
August 12, 20169 yr In the overlay you create a new instance of the inventory but never load the itemstacks to the inventory. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
August 14, 20169 yr Author You will need to call readFromNBT to make sure the itemstacks in the array are not equal to null. How do I do that? I'm scratching my head here. I don't really get the hang of NBT. http://www.startrek.com/uploads/assets/articles/61c89a9d73c284bda486afaeaf01cdb27180359b.jpg[/img] Till next time. Thank you for delivering funny scenes to Star Trek as Chekov . Will always remember you
August 14, 20169 yr Like so // You already have this. Inventory inventory = new Inventory(); inventory.readFromNBT(somehowGrabPlayerNBT); // Do rendering VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
August 15, 20169 yr Author Like so // You already have this. Inventory inventory = new Inventory(); inventory.readFromNBT(somehowGrabPlayerNBT); // Do rendering Okay so how do I grab the player's NBT? I've tried calling getEntityData, getNBTTagCompound through EntityPlayerSP with Minecraft.getMinecraft().thePlayer. http://www.startrek.com/uploads/assets/articles/61c89a9d73c284bda486afaeaf01cdb27180359b.jpg[/img] Till next time. Thank you for delivering funny scenes to Star Trek as Chekov . Will always remember you
August 15, 20169 yr How are you saving the data? VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
August 15, 20169 yr [me=LexManos]mutters something about Capabilities and IItemStackHandler[/me] I do Forge for free, however the servers to run it arn't free, so anything is appreciated. Consider supporting the team on Patreon
August 15, 20169 yr Author How are you saving the data? public class GuiWeaponSlots extends Gui { private static final ResourceLocation texture = new ResourceLocation(Reference.MOD_ID + ":textures/gui/weaponSlots.png"); @SubscribeEvent(priority=EventPriority.NORMAL) public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) { if (event.isCancelable() || event.type != ElementType.HEALTH) { Minecraft mc = Minecraft.getMinecraft(); ScaledResolution sr = new ScaledResolution(mc); int i = sr.getScaledWidth() / 2; InventoryWeapons invWeapons = new InventoryWeapons(); invWeapons.readFromNBT(mc.thePlayer.getEntityData()); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(texture); this.drawTexturedModalRect(i - 121, sr.getScaledHeight() - 22, 0, 0, 22, 22); this.drawTexturedModalRect(i + 101, sr.getScaledHeight() - 22, 0, 0, 22, 22); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(0), i - 118, sr.getScaledHeight() - 19); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(1), i + 104, sr.getScaledHeight() - 19); } } } http://www.startrek.com/uploads/assets/articles/61c89a9d73c284bda486afaeaf01cdb27180359b.jpg[/img] Till next time. Thank you for delivering funny scenes to Star Trek as Chekov . Will always remember you
August 15, 20169 yr How are you saving the data? public class GuiWeaponSlots extends Gui { private static final ResourceLocation texture = new ResourceLocation(Reference.MOD_ID + ":textures/gui/weaponSlots.png"); @SubscribeEvent(priority=EventPriority.NORMAL) public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) { if (event.isCancelable() || event.type != ElementType.HEALTH) { Minecraft mc = Minecraft.getMinecraft(); ScaledResolution sr = new ScaledResolution(mc); int i = sr.getScaledWidth() / 2; InventoryWeapons invWeapons = new InventoryWeapons(); invWeapons.readFromNBT(mc.thePlayer.getEntityData()); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(texture); this.drawTexturedModalRect(i - 121, sr.getScaledHeight() - 22, 0, 0, 22, 22); this.drawTexturedModalRect(i + 101, sr.getScaledHeight() - 22, 0, 0, 22, 22); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(0), i - 118, sr.getScaledHeight() - 19); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(1), i + 104, sr.getScaledHeight() - 19); } } } That would be loading not saving, as LexManos said you should be using the Capability system. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
August 15, 20169 yr Author How are you saving the data? public class GuiWeaponSlots extends Gui { private static final ResourceLocation texture = new ResourceLocation(Reference.MOD_ID + ":textures/gui/weaponSlots.png"); @SubscribeEvent(priority=EventPriority.NORMAL) public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) { if (event.isCancelable() || event.type != ElementType.HEALTH) { Minecraft mc = Minecraft.getMinecraft(); ScaledResolution sr = new ScaledResolution(mc); int i = sr.getScaledWidth() / 2; InventoryWeapons invWeapons = new InventoryWeapons(); invWeapons.readFromNBT(mc.thePlayer.getEntityData()); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(texture); this.drawTexturedModalRect(i - 121, sr.getScaledHeight() - 22, 0, 0, 22, 22); this.drawTexturedModalRect(i + 101, sr.getScaledHeight() - 22, 0, 0, 22, 22); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(0), i - 118, sr.getScaledHeight() - 19); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(1), i + 104, sr.getScaledHeight() - 19); } } } That would be loading not saving, as LexManos said you should be using the Capability system. Pardon me for my lack of knowledge of this Capability system. But what is it exactly? http://www.startrek.com/uploads/assets/articles/61c89a9d73c284bda486afaeaf01cdb27180359b.jpg[/img] Till next time. Thank you for delivering funny scenes to Star Trek as Chekov . Will always remember you
August 15, 20169 yr How are you saving the data? public class GuiWeaponSlots extends Gui { private static final ResourceLocation texture = new ResourceLocation(Reference.MOD_ID + ":textures/gui/weaponSlots.png"); @SubscribeEvent(priority=EventPriority.NORMAL) public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) { if (event.isCancelable() || event.type != ElementType.HEALTH) { Minecraft mc = Minecraft.getMinecraft(); ScaledResolution sr = new ScaledResolution(mc); int i = sr.getScaledWidth() / 2; InventoryWeapons invWeapons = new InventoryWeapons(); invWeapons.readFromNBT(mc.thePlayer.getEntityData()); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(texture); this.drawTexturedModalRect(i - 121, sr.getScaledHeight() - 22, 0, 0, 22, 22); this.drawTexturedModalRect(i + 101, sr.getScaledHeight() - 22, 0, 0, 22, 22); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(0), i - 118, sr.getScaledHeight() - 19); mc.getRenderItem().renderItemAndEffectIntoGUI(invWeapons.getStackInSlot(1), i + 104, sr.getScaledHeight() - 19); } } } That would be loading not saving, as LexManos said you should be using the Capability system. Pardon me for my lack of knowledge of this Capability system. But what is it exactly? The capability system is the replacment for IEntityExtendedProperties for 1.8+ though if you want infotmation on how to use it you should look at the docs. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.