Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Leaderboard

Popular Content

Showing content with the highest reputation on 11/10/19 in Posts

  1. Hello, I have a TE and I want to show the content of ItemStack Handler on client screen using RenderGameOverlay.Post event. My code is working good, but, when i'm trying to get ItemStackHandler capability, he is empty. All of these slots are empty, even though I put items inside. I think it's a syncing problem between Server and Client. HUDHandler class : package com.zeide.skillsstones.handler; import com.zeide.skillsstones.blocks.tileentities.TileEntityNaturalPedestal; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.RayTraceResult; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import org.lwjgl.opengl.GL11; import java.util.ArrayList; import java.util.List; @Mod.EventBusSubscriber public class HUDHandler { private static void renderItemsInPedestal(ScaledResolution res, TileEntityNaturalPedestal tile) { Minecraft mc = Minecraft.getMinecraft(); Profiler profiler = mc.mcProfiler; profiler.startSection("itemsInPedestal"); int x = res.getScaledWidth() / 2 - 11; int y = res.getScaledHeight() / 2 + 10; GlStateManager.enableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.color(1F, 1F, 1F, 1F); IItemHandler itemHandler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); List<ItemStack> items = new ArrayList<>(); for(int i=0; i < itemHandler.getSlots(); i++){ if(itemHandler.getStackInSlot(i).isEmpty()) { items.add(itemHandler.getStackInSlot(i)); } } int r = x + ((items.size() * 10) - 10); RenderHelper.enableGUIStandardItemLighting(); for(ItemStack is : items) { mc.getRenderItem().renderItemAndEffectIntoGUI(is, r, y); System.out.println("Itemstack " + is.getDisplayName()); r -= 20; } RenderHelper.disableStandardItemLighting(); GlStateManager.disableLighting(); GlStateManager.disableBlend(); profiler.endSection(); } @SubscribeEvent public static void onDrawScreenPost(RenderGameOverlayEvent.Post event) { if(event.getType() == RenderGameOverlayEvent.ElementType.ALL) { if(Minecraft.getMinecraft().objectMouseOver != null) { RayTraceResult pos = Minecraft.getMinecraft().objectMouseOver; TileEntity tile = pos.typeOfHit == RayTraceResult.Type.BLOCK ? Minecraft.getMinecraft().world.getTileEntity(pos.getBlockPos()) : null; if(tile instanceof TileEntityNaturalPedestal) { renderItemsInPedestal(event.getResolution(), (TileEntityNaturalPedestal) tile); } } } } } Tile Entity class : package com.zeide.skillsstones.blocks.tileentities; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.ItemStackHandler; import javax.annotation.Nullable; public class TileEntityNaturalPedestal extends TileEntity implements ICapabilityProvider { private ItemStackHandler inventory = new ItemStackHandler(8) { @Override protected void onContentsChanged(int slot) { markDirty(); } }; @Override public void readFromNBT(NBTTagCompound compound) { inventory.deserializeNBT(compound.getCompoundTag("inventory")); super.readFromNBT(compound); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setTag("inventory", inventory.serializeNBT()); return super.writeToNBT(compound); } @Override public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); } @Nullable @Override public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ? (T) inventory : super.getCapability(capability, facing); } @Override public NBTTagCompound getUpdateTag() { return this.writeToNBT(new NBTTagCompound()); } @Override public SPacketUpdateTileEntity getUpdatePacket() { return new SPacketUpdateTileEntity(getPos(), 0, writeToNBT(new NBTTagCompound())); } @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { setPos(pkt.getPos()); readFromNBT(pkt.getNbtCompound()); } public void collideEntityItem(EntityItem item) { if(checkNextFreeSlot() != 100) { ItemStack copy = item.getItem().copy(); int count = copy.getCount(); if(count <= 1) { item.setDead(); copy.setCount(1); } else { item.getItem().setCount(item.getItem().getCount() - 1); copy.setCount(1); } inventory.insertItem(checkNextFreeSlot(), copy, false); } } public int checkNextFreeSlot() { for(int i=0; i < inventory.getSlots(); i++){ if(inventory.getStackInSlot(i).isEmpty()) { return i; } } return 100; } } Thanks for listening to me. Bye. EDIT: I'm just an idiot i forgot the "!" before itemStackHandler.getStackFromSlot(i).isEmpty()
  2. That's an old version, try a new one. Beyond that try running it from terminal and tell us what it says

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.