New issue. I got the keybind to work, but I have an issue with the procedure. It opens the GUI, but closes it nearly instantly. I set it to run the procedure when the key gets released. Here's my procedure code:
package net.the_typholorian.skilled.procedures;
import net.the_typholorian.skilled.world.inventory.InventoryGUIMenu;
import net.minecraftforge.server.ServerLifecycleHooks;
import net.minecraftforge.network.NetworkHooks;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.MenuProvider;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.MinecraftServer;
import net.minecraft.network.chat.Component;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.core.BlockPos;
import io.netty.buffer.Unpooled;
public class InventoryProcedureProcedure {
public static void execute(LevelAccessor world, double x, double y, double z, Entity entity) {
if (entity == null)
return;
boolean Disabler = false;
Disabler = false;
if ((entity instanceof Player _plr ? _plr.containerMenu instanceof InventoryGUIMenu : false) && Disabler == false) {
if (!world.isClientSide()) {
MinecraftServer _mcserv = ServerLifecycleHooks.getCurrentServer();
if (_mcserv != null)
_mcserv.getPlayerList().broadcastSystemMessage(Component.literal("close"), false);
}
if (entity instanceof Player _player)
_player.closeContainer();
Disabler = true;
}
if (!(entity instanceof Player _plr ? _plr.containerMenu instanceof InventoryGUIMenu : false) && Disabler == false) {
if (!world.isClientSide()) {
MinecraftServer _mcserv = ServerLifecycleHooks.getCurrentServer();
if (_mcserv != null)
_mcserv.getPlayerList().broadcastSystemMessage(Component.literal("open"), false);
}
{
if (entity instanceof ServerPlayer _ent) {
BlockPos _bpos = new BlockPos(x, y, z);
NetworkHooks.openScreen((ServerPlayer) _ent, new MenuProvider() {
@Override
public Component getDisplayName() {
return Component.literal("InventoryGUI");
}
@Override
public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
return new InventoryGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(_bpos));
}
}, _bpos);
}
}
Disabler = true;
}
}
}