0
I have recently started with Java and the implementation of Minecraft mods. I am currently working on a mod for 1.20.4-49.0.31 I'm trying to get the content of each slot in the console to be displayed when the inventory is opened, which works. In addition, I wanted to do the same with chests (in this case containers). However, I get in the output that there is Air at every slot of the chest, even if the chest is filled. Does anyone have experience with similar problems and could help me?
package net.kaan.sortingmod;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
import net.minecraft.client.gui.screens.inventory.ContainerScreen;
import net.minecraft.client.gui.screens.inventory.FurnaceScreen;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.InventoryMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.ScreenEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod(SortingMod.MODID)
public class SortingMod {
public static final String MODID = "sortingmod";
public SortingMod() {
// Register the client setup method
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
// Register this class for Forge events
MinecraftForge.EVENT_BUS.register(this);
}
private void doClientStuff(final FMLClientSetupEvent event) {
// Any client-side setup can be done here
}
@SubscribeEvent
public void onScreenOpen(ScreenEvent.Opening event) {
Screen screen = event.getScreen();
if (screen instanceof InventoryScreen) {
System.out.println("Player opened their inventory.");
assert Minecraft.getInstance().player != null;
printInventoryItems(Minecraft.getInstance().player);
} else if (screen instanceof ContainerScreen) {
System.out.println("Player opened a chest.");
printContainerItems((ContainerScreen) screen);
}
}
private void printInventoryItems(Player player) {
AbstractContainerMenu menu = player.inventoryMenu;
for (int i = 0; i < menu.slots.size(); i++) {
ItemStack stack = menu.getSlot(i).getItem();
if (!stack.isEmpty()) {
System.out.println("Slot " + i + ": " + stack.getCount() + "x " + stack.getHoverName().getString());
}
}
}
private void printContainerItems(ContainerScreen screen) {
AbstractContainerMenu menu = screen.getMenu();
System.out.println(menu.slots.size());
for (int i = 0; i < menu.slots.size(); i++) {
ItemStack stack = menu.getSlot(i).getItem();
System.out.println("Slot " + i + ": " + stack.getCount() + "x " + stack.getHoverName().getString());
}
}
}