private void handleScreenCloseCancelled(SpoutPlayer player, ScreenCloseEvent e, boolean update) { this.action = (byte) ScreenAction.Close.getId(); PopupScreen screen = player.getMainScreen().getActivePopup(); if (screen != null) { if (update) { screen.onScreenClose(e); } if (!e.isCancelled() && ScreenType.getType(this.screen) == ScreenType.CUSTOM_SCREEN) { handleScreenClose(player, e, false); return; } screen.setDirty(true); player.sendImmediatePacket(new PacketWidget(screen, screen.getId())); } }
@Override public void run(int playerId) { SpoutPlayer player = SpoutManager.getPlayerFromId(playerId); ScreenEvent event; switch (ScreenAction.getScreenActionFromId(action)) { case Close: event = new ScreenCloseEvent( player, player.getMainScreen().getActivePopup(), ScreenType.getType(this.screen)); Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { handleScreenCloseCancelled(player, (ScreenCloseEvent) event, true); } else if (ScreenType.getType(this.screen) == ScreenType.CUSTOM_SCREEN) { handleScreenClose(player, (ScreenCloseEvent) event, true); } if (!event.isCancelled()) { player.openScreen(ScreenType.GAME_SCREEN, false); } break; case Open: event = new ScreenOpenEvent( player, player.getMainScreen().getActivePopup(), ScreenType.getType(this.screen)); Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { PopupScreen screen = player.getMainScreen().getActivePopup(); if (screen != null) { screen.setDirty(true); player.sendImmediatePacket(new PacketWidget(screen, screen.getId())); } } else { player.openScreen(ScreenType.getType(this.screen), false); } break; } }