2019-02-01 18:01:11 Java

手に持ったアイテムのアイテムの表示を変更するプラグイン

Copy Copied! Full
package jp.testnet.shcserver; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.EnchantmentWrapper; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; public class ChangeItemInfo extends JavaPlugin { /**************************************************************** 使い方 plugin.ymlの内容↓ name: ChangeItemInfo main: jp.testnet.shcserver.ChangeItemInfo version: 0.1 author: SHC description: うんちぶり。 commands : changeiteminfo: description: アイテムの表示を改造する。 permission: testplugin.changeiteminfo ゲーム内で/changeiteminfoとコマンドを入れるとhelpが出ます *******************************************************************/ //メイン処理 @Override public void onEnable() { super.onEnable(); //コマンド getCommand("changeiteminfo").setExecutor(new MyCommandExecutor()); } @Override public void onDisable() { super.onDisable(); } } class MyCommandExecutor implements CommandExecutor { private final Map<String, CommandExecutor> subCmds; MyCommandExecutor() { Map<String, CommandExecutor> subCmds = new HashMap<>(); //サブコマンドからそのインスタンスを呼ぶ subCmds.put("name", new SubCmdName()); subCmds.put("info", new SubCmdInfo()); subCmds.put("ench", new SubCmdEnch()); this.subCmds = Collections.unmodifiableMap(subCmds); } //メインコマンド処理 @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { //コマンドがあっているかどうか if(!command.getName().equalsIgnoreCase("changeiteminfo")) return false; //コマンド実行者がプレイヤーかどうか if(!(sender instanceof Player))return false; //サブコマンドがないなら説明文を表示する if(!checkArgsLength(args)) { sendHelpMessage(sender); return false; } //実行 String arg = "NO ARGS"; args[0] = args[0].toLowerCase(Locale.ENGLISH); if (subCmds.containsKey(args[0])) { // 引数変更 arg = args[0]; } return subCmds.get(arg).onCommand(sender, command, label, getReArgs(args)); } //プライベート処理 //args変換 private String[] getReArgs (String[] args) { //argsから先頭の要素を削除 String[] reArgs = null;//デフォルト値 List<String> list = new ArrayList<String>(Arrays.asList(args)); list.remove(0); reArgs = list.toArray(new String[list.size()]); return reArgs; } //プレイヤーが手に持ってるアイテムを取得 public ItemStack getItemInHand(CommandSender sender) { Player player = (Player)sender; ItemStack item = player.getInventory().getItemInMainHand(); return item; } //配列の有無をチェックする public boolean checkArgsLength(String[] args) { if(args.length > 0) return true; return false; } //説明文を表示する public boolean sendHelpMessage(CommandSender sender) { sender.sendMessage("アイテムをメインハンドに持ちながら"); sender.sendMessage("名前を変更する。- /changeiteminfo name <名前>"); sender.sendMessage("説明を加える。 - /changeiteminfo info <説明文一行目> <二行目(任意)>..."); sender.sendMessage("エンチャントを加える。 - /changeiteminfo ench <enchantID> <レベル>"); return false; } } //「/command subcmd」の処理 class SubCmdName implements CommandExecutor{ public boolean onCommand(CommandSender sender, Command command, String label, String[] reArgs) { //実行 ItemStack result = new ChangeMeta(new MyCommandExecutor().getItemInHand(sender)).changeName(reArgs[0]); return !(result.equals(null)); } } class SubCmdInfo implements CommandExecutor{ public boolean onCommand(CommandSender sender, Command command, String label, String[] reArgs) { //実行 ItemStack result = new ChangeMeta(new MyCommandExecutor().getItemInHand(sender)).addLore(reArgs); return !(result.equals(null)); } } class SubCmdEnch implements CommandExecutor{ public boolean onCommand(CommandSender sender, Command command, String label, String[] reArgs) { //エンチャント名を小文字に変換 reArgs[0] = reArgs[0].toLowerCase(Locale.ENGLISH); //実行 ItemStack result = new ChangeMeta(new MyCommandExecutor().getItemInHand(sender)).addEnch(new EnchantmentWrapper(reArgs[0]),Integer.parseInt(reArgs[1])); return !(result.equals(null)); } } //アイテムのデータを変更する class ChangeMeta { private ItemStack Item; private ItemMeta meta; //Material.<ITEM_NAME>から読み込む ChangeMeta(Material itemType){ this.Item = new ItemStack(itemType); //アイテムを生成。 this.meta = Item.getItemMeta(); //ItemMetaを取得。 } //ItemStackから読み込む ChangeMeta(ItemStack itemType){ this.Item = itemType; //アイテムを読み込む。 this.meta = Item.getItemMeta(); //ItemMetaを取得。 } ItemStack changeName(String name) { meta.setDisplayName(name); //表示したいアイテムの名前を設定。 Item.setItemMeta(meta); //ItemStackに変更したItemMetaを設定。 return Item; } ItemStack addLore(String... lore) { List<String> lores = new ArrayList<String>(); for(String str: lore) { lores.add(str); } meta.setLore(lores); //loreを設定。 Item.setItemMeta(meta); return Item; } ItemStack addEnch(Enchantment ench, Integer level) { Item.addUnsafeEnchantment(ench, level); //エンチャを付与。 return Item; }
手に持ったアイテムのアイテムの表示を変更するプラグイン
RECOMMEND