OK, it works.Tthanks.
I wonder is there better way for doing it instead of creating new thread?
System.out.println("Turning off");
Thread thread = new Thread(new CloseGui());
thread.start();
//CloseGui class
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("closing");
Minecraft.getMinecraft().player.closeScreen();
}
I did it, but I think it's only clientside prevention. I gotta send real packet "close gui" to trigger serverside InventoryCloseEvent (or something like that).
I am trying to write an Minecraft Forge (1.12.2) mod. It should work like that:
OnGuiOpen: If GUI title is equals to constant string value then close GUI (like ESC). That must be known by the server exactly like closing a GUI by clicking E/ESC.
My code (doesn't work - I'm seeing 'Turning off' in console but gui is still turned on)
public class ModEventHandler {
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event)
{
if(event.getGui() instanceof GuiContainer) {
checkGui((GuiContainer) event.getGui());
}
}
private void checkGui(GuiContainer gui) {
if(gui.inventorySlots instanceof ContainerChest) {
ContainerChest _gui = (ContainerChest)gui.inventorySlots;
String text = _gui.getLowerChestInventory().getDisplayName().getUnformattedText().toString();
if(text.contains(" ")) {
System.out.println("Turning off");
Minecraft.getMinecraft().player.closeScreen();
Minecraft.getMinecraft().displayGuiScreen(null);
KeyBinding.onTick(Keyboard.KEY_ESCAPE);
}
}
}
}
Thank u in advance for help
I am trying to write an Minecraft Forge (1.8.8) mod. It should work like that:
OnGuiOpen: If GUI title is equals to constant string value then close GUI (like ESC). Close event must be respected by server.
My code (doesnt work):
public class ModEventHandler {
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event)
{
if(event.gui instanceof GuiContainer) {
checkGui((GuiContainer) event.gui);
}
}
private void checkGui(GuiContainer gui) {
if(gui.inventorySlots instanceof ContainerChest) {
ContainerChest _gui = (ContainerChest)gui.inventorySlots;
IChatComponent component = _gui.getLowerChestInventory().getDisplayName();
String text = component.getUnformattedText();
if(text.contains("Kopanie")) {
System.out.println("Turning off");
Minecraft.getMinecraft().thePlayer.closeScreen();
Minecraft.getMinecraft().displayGuiScreen(null);
KeyBinding.onTick(Keyboard.KEY_ESCAPE);
}
}
}
}