Jump to content

getOriginal [1.10.2]


Terrails

Recommended Posts

I'm trying to add Tough as Nails support for my mod. Basically I want players to keep their thirst level when they die. How should I do this, for hunger I used getOriginal but how should I get Original's thirst level? I already have the deobfuscated jar file in libs folder and I can access the classes but my problem is how do I get thirst level before death.

Edited by Terrails
Link to comment
Share on other sites

I just made an PlayerEvent class and did this in it:

Spoiler

public class KHPlayerEvent extends LivingEvent
{
    private final KHEntityPlayer entity;
    public KHPlayerEvent(KHEntityPlayer player)
    {
        super(player);
        entity = player;
    }

    public KHEntityPlayer getKHEntityPlayer()
    {
        return this.entity;
    }

    public static class KHClone extends KHPlayerEvent
    {
        private final KHEntityPlayer original;
        private final boolean wasDeath;

        public KHClone(KHEntityPlayer _new, KHEntityPlayer oldPlayer, boolean wasDeath)
        {
            super(_new);
            this.original = oldPlayer;
            this.wasDeath = wasDeath;
        }

        public KHEntityPlayer getKHOriginal()
        {
            return original;
        }

        public boolean isKHWasDeath()
        {
            return wasDeath;
        }
    }
}

 

This is my EntityPlayer

Spoiler

public abstract class KHEntityPlayer extends EntityPlayer {

    protected ThirstHandler thirstHandler = new ThirstHandler();

    public KHEntityPlayer(World worldIn, GameProfile gameProfileIn, ThirstHandler thirstHandler) {
        super(worldIn, gameProfileIn);
        this.thirstHandler = thirstHandler;
    }

    public void cloneKHPlayer(KHEntityPlayer oldPlayer, boolean respawnFromEnd)
    {

        if (respawnFromEnd)
        {
            this.thirstHandler = oldPlayer.thirstHandler;
        }

        this.getDataManager().set(PLAYER_MODEL_FLAG, oldPlayer.getDataManager().get(PLAYER_MODEL_FLAG));

        NBTTagCompound old = oldPlayer.getEntityData();
        if (old.hasKey(PERSISTED_NBT_TAG))
        {
            getEntityData().setTag(PERSISTED_NBT_TAG, old.getCompoundTag(PERSISTED_NBT_TAG));
        }
        ForgeEventFactory.onPlayerClone(this, oldPlayer, !respawnFromEnd);

    }
    public ThirstHandler getThirstStats()
    {
        return this.thirstHandler;
    }

}

 

and my event (I registered it in CommonProxy)

Spoiler

    @SubscribeEvent
    public void keepThirst(KHPlayerEvent.KHClone player) {

        ThirstHandler thirstHandler = new ThirstHandler();

        if (ConfigHandler.thirst && Loader.isModLoaded(ToughAsNails.MOD_ID) && player.isKHWasDeath()) {
            if (player.getKHEntityPlayer().getThirstStats().getThirst() <= ConfigHandler.thirstAmount && ConfigHandler.amountThirst) {

                player.getKHEntityPlayer().getThirstStats().setThirst(ConfigHandler.thirstAmount);
                player.getKHEntityPlayer().getThirstStats().setHydration(player.getKHOriginal().getThirstStats().getHydration());

            } else if (ConfigHandler.thirst && Loader.isModLoaded(ToughAsNails.MOD_ID)) {

                player.getKHEntityPlayer().getThirstStats().setThirst(player.getKHOriginal().getThirstStats().getThirst());
                player.getKHEntityPlayer().getThirstStats().setHydration(player.getKHOriginal().getThirstStats().getHydration());
            }
        }
    }
}

 

But it doesn't want to work, I think its something in my EntityPlayer but I'm not sure

Edited by Terrails
Link to comment
Share on other sites

I was such an idiot.... it was so simple... this is all I needed to do:

    @SubscribeEvent
    public void onClonePlayer(PlayerEvent.Clone player){
    final IThirst oldThirst = getThirst(player.getOriginal());
    final IThirst newThirst = getThirst(player.getEntityPlayer());

        if(oldThirst.getThirst() <= ConfigHandler.thirstAmount && ConfigHandler.amountThirst && Loader.isModLoaded("toughasnails")){
            newThirst.setThirst(ConfigHandler.thirstAmount);
            newThirst.setHydration(oldThirst.getHydration());
        }
        else if(ConfigHandler.thirst && Loader.isModLoaded("toughasnails")) {
            newThirst.setThirst(oldThirst.getThirst());
            newThirst.setHydration(oldThirst.getHydration());
        }
    }

    @Nullable
    public static IThirst getThirst(final EntityLivingBase entity) {
        return entity.getCapability(TANCapabilities.THIRST, null);
    }

I just needed getThirst method from which I get THIRST capability and in my Clone method I just getThirst from original and the entityplayer. Of course I needed to register the event. I used this for tough as nails hydration too.

Link to comment
Share on other sites

I have another problem.... Is there a way to put this into an IF statement so my mod can load without ToughAsNails?

    @Nullable
    public static IThirst getThirst(final EntityLivingBase entity) {
        return entity.getCapability(TANCapabilities.THIRST, null);
    }

 

Edited by Terrails
Link to comment
Share on other sites

24 minutes ago, Terrails said:

How can I do that without creating a special class for that? (Not making my own ThirstHandler)

 

No, you do not need to make a custom ThirstHandler. From what I can tell, PlayerEvent.Clone only fires on the server-side. That means that when you set your thirst level, you are only setting it on the server-side. In order for you to see the changes visually, you need to update the client-side as well. You can do that via a packet, which you can send to the client after you update the player's thirst level. You can read about networking here.

Link to comment
Share on other sites

I somehow made my game to throw an connection terminated error when I try to join my world.

In my PlayerEvent.Clone it worked fine but sometimes when I login into the world my thirst would have that glitch again, so I wanted to put it into EntityJoinWorldEvent and than it started giving me that error.

Event Class (I have a lot of isModLoaded because I want to my mod to work with 1.9-1.11 and ToughAsNails changed their modid to lowercase in 1.11 and I think I can't add 2 modid's into @Optional.Method("modid")):

Spoiler

public class TANEvent {

    @SubscribeEvent
    public void onClonePlayer(PlayerEvent.Clone player) {
        final IThirst oldThirst = getThirst(player.getOriginal());
        final IThirst newThirst = getThirst(player.getEntityPlayer());

        if (oldThirst.getThirst() <= ConfigHandler.thirstAmount && ConfigHandler.thirstBoolean && Loader.isModLoaded("toughasnails") && player.isWasDeath()) {
            newThirst.setThirst(ConfigHandler.thirstAmount);
            newThirst.setHydration(oldThirst.getHydration());
        } else if (oldThirst.getThirst() <= ConfigHandler.thirstAmount && ConfigHandler.thirstBoolean && Loader.isModLoaded("ToughAsNails") && player.isWasDeath()) {
            newThirst.setThirst(ConfigHandler.thirstAmount);
            newThirst.setHydration(oldThirst.getHydration());
        } else if (ConfigHandler.thirst && Loader.isModLoaded("toughasnails") && player.isWasDeath()) {
            newThirst.setThirst(oldThirst.getThirst());
            newThirst.setHydration(oldThirst.getHydration());
        } else if (ConfigHandler.thirst && Loader.isModLoaded("ToughAsNails") && player.isWasDeath()) {
            newThirst.setThirst(oldThirst.getThirst());
            newThirst.setHydration(oldThirst.getHydration());
        }
     //   MainClass.instance.sendToAll(new ThirstMessage(newThirst.getThirst(), newThirst.getHydration()));
    }

    @SubscribeEvent
    public void onJoin(EntityJoinWorldEvent event)
    {
        if(Loader.isModLoaded("ToughAsNails")) {
            ThirstHandler thirst = new ThirstHandler();
            MainClass.instance.sendToAll(new ThirstMessage(thirst.getThirst(), thirst.getHydration()));
        } else if(Loader.isModLoaded("toughasnails")){
            ThirstHandler thirst = new ThirstHandler();
            MainClass.instance.sendToAll(new ThirstMessage(thirst.getThirst(), thirst.getHydration()));
        }
    }

    @Nullable
    public static IThirst getThirst(final EntityLivingBase entity) {
        return entity.getCapability(TANCapabilities.THIRST, null);
    }


}

 

ThirstMessage and ThirstMessageHandler:

Spoiler

public class ThirstMessage implements IMessage {

    private String text;
    private int thirst;
    private float hydration;

    public ThirstMessage() {}

    public ThirstMessage(int thirst, float hydration)
    {
        this.thirst = thirst;
        this.hydration = hydration;
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        thirst = buf.readInt();
        hydration = buf.readFloat();
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(thirst);
        buf.writeFloat(hydration);
    }

    public static class ThirstMessageHandler implements IMessageHandler<ThirstMessage, IMessage>{

        @Override
        public IMessage onMessage(ThirstMessage message, MessageContext ctx) {
            IThreadListener mainThread = (WorldServer) ctx.getServerHandler().playerEntity.getEntityWorld();
            mainThread.addScheduledTask(new Runnable() {
                @Override
                public void run() {
                    ThirstHandler thirst = new ThirstHandler();
                    thirst.setThirst(message.thirst);
                    thirst.setHydration(message.hydration);
                }
            });
            return null;
        }

    }
}

 

Error: http://pastebin.com/YudBAdz5

 

Edited by Terrails
Link to comment
Share on other sites

I tried couple of things and I still can't do anything:

Message:

Spoiler

public class ThirstMessage implements IMessage, IMessageHandler<ThirstMessage, IMessage> {

    public int thirst;

    public ThirstMessage() {}

    public ThirstMessage(int thirst){
        this.thirst = thirst;
    }

    @Override
    public void fromBytes(ByteBuf buf)
    {
        thirst = buf.readInt();
    }

    @Override
    public void toBytes(ByteBuf buf)
    {
        buf.writeInt(thirst);
    }

    @Override
    public IMessage onMessage(ThirstMessage message, MessageContext ctx) {
        IThreadListener mainThread =  Minecraft.getMinecraft();
        EntityPlayer player = Minecraft.getMinecraft().player;
        ThirstHandler thirstStats = (ThirstHandler)player.getCapability(TANCapabilities.THIRST, null);
        mainThread.addScheduledTask(new Runnable() {
            @Override
            public void run() {
                thirstStats.setThirst(message.thirst);
            }
        });
        return null;
    }
}

 

Event

Spoiler


    @Nullable
    public static IThirst getThirst(final EntityLivingBase entity) {
        return entity.getCapability(TANCapabilities.THIRST, null);
    }

    @SubscribeEvent
    public void onClonePlayer(PlayerEvent.Clone player) {
        final IThirst oldThirst = getThirst(player.getOriginal());
        EntityPlayer entityPlayer = player.getEntityPlayer();
        ThirstHandler thirstStats = (ThirstHandler)entityPlayer.getCapability(TANCapabilities.THIRST, null);
        if (oldThirst.getThirst() <= ConfigHandler.thirstAmount && ConfigHandler.thirstBoolean && Loader.isModLoaded("toughasnails") && player.isWasDeath()) {
            thirstStats.setThirst(ConfigHandler.thirstAmount);
            thirstStats.setHydration(oldThirst.getHydration());
            MainClass.network.sendToAll(new ThirstMessage(thirstStats.getThirst()));

        } else if (oldThirst.getThirst() <= ConfigHandler.thirstAmount && ConfigHandler.thirstBoolean && Loader.isModLoaded("ToughAsNails") && player.isWasDeath()) {
            thirstStats.setThirst(ConfigHandler.thirstAmount);
            thirstStats.setHydration(oldThirst.getHydration());
            MainClass.network.sendToAll(new ThirstMessage(thirstStats.getThirst()));

        } else if (ConfigHandler.thirst && Loader.isModLoaded("toughasnails") && player.isWasDeath()) {
            thirstStats.setThirst(oldThirst.getThirst());
            thirstStats.setHydration(oldThirst.getHydration());
            MainClass.network.sendToAll(new ThirstMessage(thirstStats.getThirst()));

        } else if (ConfigHandler.thirst && Loader.isModLoaded("ToughAsNails") && player.isWasDeath()) {
            thirstStats.setThirst(oldThirst.getThirst());
            thirstStats.setHydration(oldThirst.getHydration());
            MainClass.network.sendToAll(new ThirstMessage(thirstStats.getThirst()));
        }

    }

 

 

Link to comment
Share on other sites

I did all of that and its still happening:

    @SubscribeEvent
    public void respawn(net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent event)
    {
        EntityPlayer entityPlayer = event.player;
        ThirstHandler thirstStats = (ThirstHandler)entityPlayer.getCapability(TANCapabilities.THIRST, null);
        MainClass.network.sendTo(new ThirstMessage(thirstStats.getThirst()), (EntityPlayerMP) event.player);
    }

 

Link to comment
Share on other sites

I kinda figured it out. If I die with this Message and this kind of PlayerRespawnEvent my visual thirst gets set to 0

Message(pretty much the same one as tough as nails uses):

Spoiler

public class PacketMessageThirst implements IMessage, IMessageHandler<PacketMessageThirst, IMessage> {

        public String identifier;
        public NBTTagCompound data;

    public PacketMessageThirst() {}

    public PacketMessageThirst(Capability<?> capability, NBTTagCompound data)
        {
            if (data == null) throw new IllegalArgumentException("Data cannot be null!");

            this.identifier = capability.getName();
            this.data = data;
        }

        @Override
        public void fromBytes(ByteBuf buf)
        {
            this.identifier = ByteBufUtils.readUTF8String(buf);
            this.data = ByteBufUtils.readTag(buf);
        }

        @Override
        public void toBytes(ByteBuf buf)
        {
            ByteBufUtils.writeUTF8String(buf, this.identifier);
            ByteBufUtils.writeTag(buf, this.data);
        }

        @Override
        public IMessage onMessage(PacketMessageThirst message, MessageContext ctx)
        {
            EntityPlayerSP player = Minecraft.getMinecraft().player;

            if (player != null)
            {
                Capability<IPlayerStat> capability = (Capability<IPlayerStat>) PlayerStatRegistry.getCapability(message.identifier);
                StatHandlerBase stat = (StatHandlerBase)player.getCapability(capability, null);

                capability.getStorage().readNBT(capability, stat, null, message.data);
            }

            return null;
        }
    }

 

Event (class needs to extend their ThirstHandler):

Spoiler

    @SubscribeEvent
    public void respawn(net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent event)
    {
        NBTTagCompound data = (NBTTagCompound) TANCapabilities.THIRST.getStorage().writeNBT(TANCapabilities.THIRST, this, null);
        new PacketMessageThirst(TANCapabilities.THIRST, data);
    }

 

What should I do further... I'm getting really confused by these packet's.

Edited by Terrails
Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • [03Jun2024 15:23:40.010] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--username, LondonDumbden, --version, 1.20.1-forge-47.2.32, --gameDir, C:\Users\London Bunden\AppData\Roaming\.minecraft, --assetsDir, C:\Users\London Bunden\AppData\Roaming\.minecraft\assets, --assetIndex, 5, --uuid, da3510f9b4b4427bb78304c88f4c534a, --accessToken, ????????, --clientId, ZTIxMjA2NTctYmIxZS00ZWQzLWFkZDEtMmMxMGQzMjQyNjBj, --xuid, 2535420262661734, --userType, msa, --versionType, release, --quickPlayPath, C:\Users\London Bunden\AppData\Roaming\.minecraft\quickPlay\java\1717446216838.json, --launchTarget, forgeclient, --fml.forgeVersion, 47.2.32, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] [03Jun2024 15:23:40.017] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.8 by Microsoft; OS Windows 11 arch amd64 version 10.0 [03Jun2024 15:23:42.057] [main/INFO] [net.minecraftforge.fml.loading.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow [03Jun2024 15:23:42.159] [main/INFO] [EARLYDISPLAY/]: Trying GL version 4.6 [03Jun2024 15:23:42.401] [main/INFO] [EARLYDISPLAY/]: Requested GL version 4.6 got version 4.6 [03Jun2024 15:23:42.494] [main/INFO] [mixin-transmog/]: Mixin Transmogrifier is definitely up to no good... [03Jun2024 15:23:42.524] [main/INFO] [mixin-transmog/]: crimes against java were committed [03Jun2024 15:23:42.630] [pool-2-thread-1/INFO] [EARLYDISPLAY/]: GL info: NVIDIA GeForce RTX 3070/PCIe/SSE2 GL version 4.6.0 NVIDIA 555.85, NVIDIA Corporation [03Jun2024 15:23:43.075] [main/INFO] [gg.essential.loader.stage1.EssentialLoaderBase/]: Starting Essential Loader (stage2) version 1.6.2 (285f951adc7537f49ae3ef9fc0d2fd3e) [stable] [03Jun2024 15:23:43.104] [main/INFO] [mixin-transmog/]: Original mixin transformation service successfully crobbed by mixin-transmogrifier! [03Jun2024 15:23:43.162] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/London%20Bunden/AppData/Roaming/.minecraft/mods/Connector-1.0.0-beta.43+1.20.1.jar%23266%23270!/ Service=ModLauncher Env=CLIENT [03Jun2024 15:23:44.312] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\fmlcore\1.20.1-47.2.32\fmlcore-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.317] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.2.32\javafmllanguage-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.323] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.2.32\lowcodelanguage-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.329] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\London Bunden\AppData\Roaming\.minecraft\libraries\net\minecraftforge\mclanguage\1.20.1-47.2.32\mclanguage-1.20.1-47.2.32.jar is missing mods.toml file [03Jun2024 15:23:44.862] [main/WARN] [net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File:  and Mod File: . Using Mod File:  [03Jun2024 15:23:44.864] [main/WARN] [net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select a dependency jar for JarJar which was passed in as source: curios. Using Mod File: C:\Users\London Bunden\AppData\Roaming\.minecraft\mods\curios-forge-5.9.1+1.20.1.jar [03Jun2024 15:23:44.864] [main/INFO] [net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator/]: Found 75 dependencies adding them to mods collection [03Jun2024 15:23:49.089] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found Kotlin-containing mod Jar[union:/C:/Users/London%20Bunden/AppData/Roaming/.minecraft/essential/libraries/forge_1.20.1/kotlin-for-forge-4.3.0-slim.jar%23280!/], checking whether we need to upgrade it.. [03Jun2024 15:23:49.091] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found outdated Kotlin core libs 0.0.0 (we ship 1.9.23) [03Jun2024 15:23:49.092] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found outdated Kotlin Coroutines libs 0.0.0 (we ship 1.8.0) [03Jun2024 15:23:49.092] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Found outdated Kotlin Serialization libs 0.0.0 (we ship 1.6.3) [03Jun2024 15:23:49.095] [main/INFO] [gg.essential.loader.stage2.util.KFFMerger/]: Generating jar with updated Kotlin at C:\Users\LONDON~1\AppData\Local\Temp\kff-updated-kotlin-14765634657383373807-4.3.0-slim.jar [03Jun2024 15:23:49.974] [main/ERROR] [net.minecraftforge.fml.loading.LanguageLoadingProvider/LOADING]: Missing language kotlinforforge version [3,) wanted by Cobblemon-forge-1.5.2+1.20.1.jar [03Jun2024 15:23:49.989] [main/ERROR] [net.minecraftforge.fml.loading.ModSorter/LOADING]: Missing or unsupported mandatory dependencies:     Mod ID: 'curios', Requested by: 'radiantgear', Expected range: '[7,)', Actual version: '5.9.1+1.20.1'     Mod ID: 'minecraft', Requested by: 'radiantgear', Expected range: '[1.20.5,1.21)', Actual version: '1.20.1'     Mod ID: 'forge', Requested by: 'radiantgear', Expected range: '[50,)', Actual version: '47.2.32' [03Jun2024 15:23:50.434] [main/INFO] [dev.su5ed.sinytra.connector.service.hacks.ModuleLayerMigrator/]: Successfully made module authlib transformable [03Jun2024 15:23:51.112] [main/ERROR] [dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader/]: Skipping early mod setup due to previous error [03Jun2024 15:23:51.115] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forgeclient' with arguments [--version, 1.20.1-forge-47.2.32, --gameDir, C:\Users\London Bunden\AppData\Roaming\.minecraft, --assetsDir, C:\Users\London Bunden\AppData\Roaming\.minecraft\assets, --uuid, da3510f9b4b4427bb78304c88f4c534a, --username, LondonDumbden, --assetIndex, 5, --accessToken, ????????, --clientId, ZTIxMjA2NTctYmIxZS00ZWQzLWFkZDEtMmMxMGQzMjQyNjBj, --xuid, 2535420262661734, --userType, msa, --versionType, release, --quickPlayPath, C:\Users\London Bunden\AppData\Roaming\.minecraft\quickPlay\java\1717446216838.json]  
    • When I try to install the forge installer it comes with several files instead of just one in executable java format
    • 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()); } } }  
    • I am wanting to add an axe to my mod though I do not want it to have a recipe, the reason for this being that I want you to only be able to find it in a structure. I have looked on both here and elsewhere on the internet and have found nothing... How would this be done?    (Video for reference.)    
  • Topics

×
×
  • Create New...

Important Information

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