/******************************************************************************* * Copyright 2014 Tobias Welther * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package de.tobiyas.racesandclasses.commands.help; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import de.tobiyas.racesandclasses.RacesAndClasses; import de.tobiyas.racesandclasses.commands.AbstractCommand; import de.tobiyas.racesandclasses.traitcontainer.container.TraitsList; import de.tobiyas.racesandclasses.traitcontainer.interfaces.markerinterfaces.Trait; import de.tobiyas.util.chat.components.ChatMessageObject; import de.tobiyas.util.chat.components.TellRawChatMessage; import de.tobiyas.util.vollotile.VollotileCodeManager; public class CommandExecutor_RaceHelp extends AbstractCommand{ public CommandExecutor_RaceHelp(){ super("racehelp", new String[]{"rac", "rachelp", "rhelp"}); RacesAndClasses.getPlugin(); } @Override public boolean onInternalCommand(CommandSender sender, Command command, String label, String[] args) { String senderName = sender.getName(); if(sender == Bukkit.getConsoleSender()){ senderName = "console"; } if(args.length == 0){ String[] messages = HelpPage.getPageContent(senderName, 1).toArray(new String[0]); sender.sendMessage(messages); return true; } String commandString = args[0]; int page = -1; try{ page = Integer.parseInt(commandString); }catch(Throwable exp){} if(commandString.equalsIgnoreCase("page") || page > 0){ if(args.length > 1 && page <= 0){ try{ page = Integer.valueOf(args[1]); }catch(NumberFormatException e){ sender.sendMessage(ChatColor.RED + "The Page-Number must be an Integer value."); return true; } } //Set to 1 if needed. if(page <= 0) page = 1; String[] messages = HelpPage.getPageContent(senderName, page).toArray(new String[0]); sender.sendMessage(messages); if(VollotileCodeManager.getVollotileCode().getVersion().hasTellRawSupport() && sender instanceof Player){ Player player = (Player) sender; int pageBefore = page - 1; int pageAfter = page + 1; boolean pageBeforeExist = page > 1; boolean pageAfterExist = page < HelpPage.getLastPageIndex(); TellRawChatMessage message = new TellRawChatMessage(); if(pageBeforeExist) message.append(new ChatMessageObject("page " + pageBefore).addCommandClickable("rachelp " + pageBefore).addPopupHover("Go to page " + pageBefore)); else message.addSimpleText(" "); message.addSimpleText(" "); if(pageAfterExist) message.append(new ChatMessageObject("page " + pageAfter).addCommandClickable("rachelp " + pageAfter).addPopupHover("Go to page " + pageAfter)); message.sendToPlayers(player); } return true; } if(commandString.equalsIgnoreCase("trait")){ if(args.length > 1) outTraitHelp(sender, args[1]); else sender.sendMessage(ChatColor.RED + "The command: " + ChatColor.AQUA + "/racehelp trait <trait-Name>" + ChatColor.RED + " needs an trait-Name as argument!"); return true; } String[] messages = HelpPage.getCategoryPage(senderName, commandString).toArray(new String[0]); sender.sendMessage(messages); return true; } private void outTraitHelp(CommandSender sender, String trait){ Class<? extends Trait> clazz = TraitsList.getClassOfTrait(trait); if(clazz == null){ sender.sendMessage(ChatColor.RED + "Trait: " + ChatColor.LIGHT_PURPLE + trait + ChatColor.RED + " not found."); return; } try{ sender.sendMessage(ChatColor.YELLOW + "===Trait: " + ChatColor.YELLOW + trait + ChatColor.YELLOW + "==="); @SuppressWarnings("unchecked") List<String> helpList = (List<String>) clazz.getMethod("getHelpForTrait").invoke(clazz); for(String line : helpList){ sender.sendMessage(line); } }catch(Exception e){ sender.sendMessage(ChatColor.RED + "Trait: " + ChatColor.LIGHT_PURPLE + trait + ChatColor.RED + " has no Help"); return; } return; } }