package me.desht.chesscraft; import me.desht.chesscraft.chess.BoardView; import me.desht.chesscraft.chess.BoardViewManager; import me.desht.chesscraft.chess.ChessGame; import me.desht.chesscraft.event.ChessBoardCreatedEvent; import me.desht.chesscraft.event.ChessBoardDeletedEvent; import me.desht.chesscraft.event.ChessGameCreatedEvent; import me.desht.chesscraft.event.ChessGameDeletedEvent; import me.desht.dhutils.LogUtils; import me.desht.dhutils.MiscUtil; import me.desht.scrollingmenusign.*; import me.desht.scrollingmenusign.enums.SMSMenuAction; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; public class SMSIntegration implements Listener { // menu names private static final String TP_GAME = "cc_tp-game"; //$NON-NLS-1$ private static final String CREATE_GAME = "cc_create-game"; //$NON-NLS-1$ private static final String BOARD_INFO = "cc_board-info"; //$NON-NLS-1$ private static final String GAME_INFO = "cc_game-info"; //$NON-NLS-1$ private static final String DEL_GAME = "cc_delete-game"; //$NON-NLS-1$ private static final String TP_BOARD = "cc_tp-board"; //$NON-NLS-1$ private final SMSHandler smsHandler; public SMSIntegration(ScrollingMenuSign sms) { smsHandler = sms.getHandler(); Bukkit.getPluginManager().registerEvents(this, ChessCraft.getInstance()); createMenus(); } public void setAutosave(boolean autosave) { for (SMSMenu menu : smsHandler.listMenus()) { if (menu.getName().startsWith("cc_")) { //$NON-NLS-1$ menu.setAutosave(autosave); } } } @EventHandler public void boardCreated(ChessBoardCreatedEvent event) { BoardView bv = event.getBoardView(); addItem(TP_BOARD, bv.getName(), "/chess tp -b " + bv.getName()); //$NON-NLS-1$ addItem(BOARD_INFO, bv.getName(), "/chess list board " + bv.getName()); //$NON-NLS-1$ addItem(CREATE_GAME, bv.getName(), "/chess create game - " + bv.getName()); //$NON-NLS-1$ } @EventHandler public void boardDeleted(ChessBoardDeletedEvent event) { BoardView bv = event.getBoardView(); removeItem(TP_BOARD, bv.getName()); removeItem(BOARD_INFO, bv.getName()); removeItem(CREATE_GAME, bv.getName()); } @EventHandler public void gameCreated(ChessGameCreatedEvent event) { ChessGame game = event.getGame(); addItem(GAME_INFO, game.getName(), "/chess list game " + game.getName()); //$NON-NLS-1$ addItem(TP_GAME, game.getName(), "/chess tp " + game.getName()); //$NON-NLS-1$ addItem(DEL_GAME, game.getName(), "/chess delete game " + game.getName()); //$NON-NLS-1$ BoardView bv = BoardViewManager.getManager().findBoardForGame(game); if (bv != null) { removeItem(CREATE_GAME, bv.getName()); } } @EventHandler public void gameDeleted(ChessGameDeletedEvent event) { ChessGame game = event.getGame(); removeItem(GAME_INFO, game.getName()); removeItem(TP_GAME, game.getName()); removeItem(DEL_GAME, game.getName()); BoardView bv = BoardViewManager.getManager().findBoardForGame(game); if (bv != null) { addItem(CREATE_GAME, bv.getName(), "/chess create game - " + bv.getName()); } } private void createMenus() { createMenu(BOARD_INFO, Messages.getString("SMSIntegration.boardInfo")); createMenu(CREATE_GAME, Messages.getString("SMSIntegration.createGame")); createMenu(TP_GAME, Messages.getString("SMSIntegration.gotoGame")); createMenu(GAME_INFO, Messages.getString("SMSIntegration.gameInfo")); createMenu(DEL_GAME, Messages.getString("SMSIntegration.deleteGame")); createMenu(TP_BOARD, Messages.getString("SMSIntegration.gotoBoard")); setAutosave(false); } private void createMenu(String name, String title) { SMSMenu menu; if (!smsHandler.checkMenu(name)) { menu = smsHandler.createMenu(name, title, ChessCraft.getInstance()); menu.setAutosort(true); } else { try { // clear all menu items - start with a clean slate menu = smsHandler.getMenu(name); menu.setTitle(MiscUtil.parseColourSpec(title)); menu.removeAllItems(); } catch (SMSException e) { // shouldn't get here - we already checked that the menu exists LogUtils.warning(null, e); //$NON-NLS-1$ } } } private void addItem(String menuName, String label, String command) { if (smsHandler.checkMenu(menuName)) { try { SMSMenu menu = smsHandler.getMenu(menuName); menu.addItem(new SMSMenuItem(menu, label, command, "")); menu.notifyObservers(SMSMenuAction.REPAINT); } catch (SMSException e) { // shouldn't get here LogUtils.warning(null, e); //$NON-NLS-1$ } } } private void removeItem(String menuName, String label) { if (smsHandler.checkMenu(menuName)) { try { SMSMenu menu = smsHandler.getMenu(menuName); menu.removeItem(label); menu.notifyObservers(SMSMenuAction.REPAINT); } catch (SMSException e) { LogUtils.warning(null, e); //$NON-NLS-1$ } } } }