起動・前提準備
初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
Armor Upgrade Manager に関する管理・集約処理を担当します。
com.example.rankingpluginArmorUpgradeManager.javaclassクラス直前の Javadoc は見つかりませんでした。ソースとメソッド構成から責務を補完しています。
Armor Upgrade Manager に関する管理・集約処理を担当します。(root) パッケージの 小〜中規模クラスで、責務境界の要点を確認する起点です。全面展開版では、他の重点クラスと同じ章立てで読めるように補強しています。
ArmorUpgradeManagergetOrInitUpgradeKeyreadUpgradeLevelregisterisUpgradeablePiecemaxLevelOfniceArmorName初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
外部から呼ばれる公開メソッドや、対象プレイヤー・対象データ・対象ワールドを引き当てる経路です。
このクラスが前提状態を揃え、外部から利用可能な形まで立ち上がる流れです。新規依存の追加や起動失敗の調査はまずここから追います。
イベント受理、判定、状態更新、通知までの主経路です。体感不具合や想定外の分岐はこの流れのどこで止まるかを見ると切り分けやすいです。
結果を保持し、必要なら永続化し、最後に掃除まで行う出口です。画面更新だけ合って保存が壊れるケースや残骸が残るケースの確認に向きます。
| Signature | 説明 | 主要呼び出し |
|---|---|---|
public ArmorUpgradeManager(JavaPlugin plugin) | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 | getOrInitUpgradeKey → registerAllRecipes → getServer → getPluginManager → registerEvents |
| Name | Visibility | Kind | 説明 |
|---|---|---|---|
| ArmorUpgradeManager | public | コンストラクタ | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 |
| getOrInitUpgradeKey | public | メソッド | UPGRADE_KEY を安全に取得(null ならここで初期化) |
| readUpgradeLevel | public | メソッド | ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す) |
| readUpgradeLevel | public | メソッド | ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す) |
| register | private | メソッド | 初期化と各種登録を行い、機能を有効化します。 |
| readUpgradeLevel | public | イベント処理 | ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す) |
| isUpgradeablePiece | private | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| maxLevelOf | private | メソッド | maxLevelOf の主要処理を担当します。 |
| readUpgradeLevel | public | イベント処理 | ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す) |
| niceArmorName | private | メソッド | niceArmorName の主要処理を担当します。 |
public ArmorUpgradeManager(JavaPlugin plugin)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
JavaPlugin pluginなし
public static NamespacedKey getOrInitUpgradeKey(JavaPlugin plugin)UPGRADE_KEY を安全に取得(null ならここで初期化)
JavaPlugin pluginなし
public static int readUpgradeLevel(ItemMeta meta, JavaPlugin plugin)ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す)
ItemMeta metaJavaPlugin pluginなし
public static int readUpgradeLevel(ItemMeta meta, JavaPlugin plugin) { if (meta == null) return 0; try { NamespacedKey key = getOrInitUpgradeKey(plugin); Integer v = meta.getPersistentDataContainer().get(key, PersistentDataType.INTEGER); return (v != null) ? v : 0; } catch (IllegalArgumentException ignored) { return 0; } } /* ========================= * 登録系 * ========================= */ private void registerAllRecipes()ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す)
ItemMeta metaJavaPlugin plugin) { if (meta == null) return 0; try { NamespacedKey key = getOrInitUpgradeKey(plugin); Integer v = meta.getPersistentDataContainer().get(key, PersistentDataType.INTEGER); return (v != null) ? v : 0; } catch (IllegalArgumentException ignored) { return 0; } } /* ========================= * 登録系 * ========================= */ private void registerAllRecipes(なし
private void register(Material armorPiece, Material surroundBlock, String keyName, int maxLevel)初期化と各種登録を行い、機能を有効化します。
Material armorPieceMaterial surroundBlockString keyNameint maxLevelなし
public static int readUpgradeLevel(ItemMeta meta, JavaPlugin plugin) { if (meta == null) return 0; try { NamespacedKey key = getOrInitUpgradeKey(plugin); Integer v = meta.getPersistentDataContainer().get(key, PersistentDataType.INTEGER); return (v != null) ? v : 0; } catch (IllegalArgumentException ignored) { return 0; } } /* ========================= * 登録系 * ========================= */ private void registerAllRecipes() { register(Material.IRON_HELMET, Material.IRON_BLOCK, "iron_helmet_upg", MAX_IRON_LEVEL); register(Material.IRON_CHESTPLATE, Material.IRON_BLOCK, "iron_chest_upg", MAX_IRON_LEVEL); register(Material.IRON_LEGGINGS, Material.IRON_BLOCK, "iron_legs_upg", MAX_IRON_LEVEL); register(Material.IRON_BOOTS, Material.IRON_BLOCK, "iron_boots_upg", MAX_IRON_LEVEL); register(Material.DIAMOND_HELMET, Material.DIAMOND_BLOCK, "diamond_helmet_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_CHESTPLATE, Material.DIAMOND_BLOCK, "diamond_chest_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_LEGGINGS, Material.DIAMOND_BLOCK, "diamond_legs_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_BOOTS, Material.DIAMOND_BLOCK, "diamond_boots_upg", MAX_DIAMOND_LEVEL); register(Material.NETHERITE_HELMET, Material.NETHERITE_BLOCK, "netherite_helmet_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_CHESTPLATE, Material.NETHERITE_BLOCK, "netherite_chest_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_LEGGINGS, Material.NETHERITE_BLOCK, "netherite_legs_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_BOOTS, Material.NETHERITE_BLOCK, "netherite_boots_upg", MAX_NETHERITE_LEVEL); } private void register(Material armorPiece, Material surroundBlock, String keyName, int maxLevel) { NamespacedKey key = new NamespacedKey(plugin, keyName); ItemStack base = new ItemStack(armorPiece); ItemMeta meta = base.getItemMeta(); meta.getPersistentDataContainer().set(getOrInitUpgradeKey(plugin), PersistentDataType.INTEGER, 0); base.setItemMeta(meta); ShapedRecipe recipe = new ShapedRecipe(key, base); recipe.shape("BBB", "BAB", "BBB"); recipe.setIngredient('B', surroundBlock); recipe.setIngredient('A', armorPiece); Bukkit.addRecipe(recipe); } /* ========================= * イベント * ========================= */ public void onPrepareCraft(PrepareItemCraftEvent e)ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す)
ItemMeta metaJavaPlugin plugin) { if (meta == null) return 0; try { NamespacedKey key = getOrInitUpgradeKey(plugin); Integer v = meta.getPersistentDataContainer().get(key, PersistentDataType.INTEGER); return (v != null) ? v : 0; } catch (IllegalArgumentException ignored) { return 0; } } /* ========================= * 登録系 * ========================= */ private void registerAllRecipes() { register(Material.IRON_HELMET, Material.IRON_BLOCK, "iron_helmet_upg", MAX_IRON_LEVEL); register(Material.IRON_CHESTPLATE, Material.IRON_BLOCK, "iron_chest_upg", MAX_IRON_LEVEL); register(Material.IRON_LEGGINGS, Material.IRON_BLOCK, "iron_legs_upg", MAX_IRON_LEVEL); register(Material.IRON_BOOTS, Material.IRON_BLOCK, "iron_boots_upg", MAX_IRON_LEVEL); register(Material.DIAMOND_HELMET, Material.DIAMOND_BLOCK, "diamond_helmet_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_CHESTPLATE, Material.DIAMOND_BLOCK, "diamond_chest_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_LEGGINGS, Material.DIAMOND_BLOCK, "diamond_legs_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_BOOTS, Material.DIAMOND_BLOCK, "diamond_boots_upg", MAX_DIAMOND_LEVEL); register(Material.NETHERITE_HELMET, Material.NETHERITE_BLOCK, "netherite_helmet_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_CHESTPLATE, Material.NETHERITE_BLOCK, "netherite_chest_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_LEGGINGS, Material.NETHERITE_BLOCK, "netherite_legs_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_BOOTS, Material.NETHERITE_BLOCK, "netherite_boots_upg", MAX_NETHERITE_LEVEL); } private void register(Material armorPiece, Material surroundBlock, String keyName, int maxLevel) { NamespacedKey key = new NamespacedKey(plugin, keyName); ItemStack base = new ItemStack(armorPiece); ItemMeta meta = base.getItemMeta(); meta.getPersistentDataContainer().set(getOrInitUpgradeKey(plugin), PersistentDataType.INTEGER, 0); base.setItemMeta(meta); ShapedRecipe recipe = new ShapedRecipe(key, base); recipe.shape("BBB", "BAB", "BBB"); recipe.setIngredient('B', surroundBlock); recipe.setIngredient('A', armorPiece); Bukkit.addRecipe(recipe); } /* ========================= * イベント * ========================= */ public void onPrepareCraft(PrepareItemCraftEvent eなし
private boolean isUpgradeablePiece(Material t)条件判定を行い、後続処理の分岐に使える真偽値を返します。
Material tなし
private static int maxLevelOf(Material m)maxLevelOf の主要処理を担当します。
Material mなし
public static int readUpgradeLevel(ItemMeta meta, JavaPlugin plugin) { if (meta == null) return 0; try { NamespacedKey key = getOrInitUpgradeKey(plugin); Integer v = meta.getPersistentDataContainer().get(key, PersistentDataType.INTEGER); return (v != null) ? v : 0; } catch (IllegalArgumentException ignored) { return 0; } } /* ========================= * 登録系 * ========================= */ private void registerAllRecipes() { register(Material.IRON_HELMET, Material.IRON_BLOCK, "iron_helmet_upg", MAX_IRON_LEVEL); register(Material.IRON_CHESTPLATE, Material.IRON_BLOCK, "iron_chest_upg", MAX_IRON_LEVEL); register(Material.IRON_LEGGINGS, Material.IRON_BLOCK, "iron_legs_upg", MAX_IRON_LEVEL); register(Material.IRON_BOOTS, Material.IRON_BLOCK, "iron_boots_upg", MAX_IRON_LEVEL); register(Material.DIAMOND_HELMET, Material.DIAMOND_BLOCK, "diamond_helmet_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_CHESTPLATE, Material.DIAMOND_BLOCK, "diamond_chest_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_LEGGINGS, Material.DIAMOND_BLOCK, "diamond_legs_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_BOOTS, Material.DIAMOND_BLOCK, "diamond_boots_upg", MAX_DIAMOND_LEVEL); register(Material.NETHERITE_HELMET, Material.NETHERITE_BLOCK, "netherite_helmet_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_CHESTPLATE, Material.NETHERITE_BLOCK, "netherite_chest_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_LEGGINGS, Material.NETHERITE_BLOCK, "netherite_legs_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_BOOTS, Material.NETHERITE_BLOCK, "netherite_boots_upg", MAX_NETHERITE_LEVEL); } private void register(Material armorPiece, Material surroundBlock, String keyName, int maxLevel) { NamespacedKey key = new NamespacedKey(plugin, keyName); ItemStack base = new ItemStack(armorPiece); ItemMeta meta = base.getItemMeta(); meta.getPersistentDataContainer().set(getOrInitUpgradeKey(plugin), PersistentDataType.INTEGER, 0); base.setItemMeta(meta); ShapedRecipe recipe = new ShapedRecipe(key, base); recipe.shape("BBB", "BAB", "BBB"); recipe.setIngredient('B', surroundBlock); recipe.setIngredient('A', armorPiece); Bukkit.addRecipe(recipe); } /* ========================= * イベント * ========================= */ public void onPrepareCraft(PrepareItemCraftEvent e) { if (!(e.getRecipe() instanceof ShapedRecipe sr)) return; String ns = plugin.getName().toLowerCase(java.util.Locale.ROOT); if (!sr.getKey().getNamespace().equals(ns)) return; ItemStack baseArmor = Arrays.stream(e.getInventory().getMatrix()) .filter(Objects::nonNull) .filter(s -> isUpgradeablePiece(s.getType())) .findFirst().orElse(null); if (baseArmor == null) return; ItemMeta m = baseArmor.getItemMeta(); int cur = readUpgradeLevel(m, plugin); int max = maxLevelOf(baseArmor.getType()); if (cur >= max) { e.getInventory().setResult(null); return; } ItemStack upgraded = upgradeArmor(baseArmor.clone(), cur + 1); e.getInventory().setResult(upgraded); } private boolean isUpgradeablePiece(Material t) { return switch (t) { case IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS, DIAMOND_HELMET, DIAMOND_CHESTPLATE, DIAMOND_LEGGINGS, DIAMOND_BOOTS, NETHERITE_HELMET, NETHERITE_CHESTPLATE, NETHERITE_LEGGINGS, NETHERITE_BOOTS -> true; default -> false; }; } private static int maxLevelOf(Material m) { return switch (m) { case IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS -> MAX_IRON_LEVEL; case DIAMOND_HELMET, DIAMOND_CHESTPLATE, DIAMOND_LEGGINGS, DIAMOND_BOOTS -> MAX_DIAMOND_LEVEL; case NETHERITE_HELMET, NETHERITE_CHESTPLATE, NETHERITE_LEGGINGS, NETHERITE_BOOTS -> MAX_NETHERITE_LEVEL; default -> 0; }; } /* ========================= * コア処理 * ========================= */ private ItemStack upgradeArmor(ItemStack armor, int newLevel)ItemMeta からレベルを安全に読む(キー未初期化や型違いでも 0 を返す)
ItemMeta metaJavaPlugin plugin) { if (meta == null) return 0; try { NamespacedKey key = getOrInitUpgradeKey(plugin); Integer v = meta.getPersistentDataContainer().get(key, PersistentDataType.INTEGER); return (v != null) ? v : 0; } catch (IllegalArgumentException ignored) { return 0; } } /* ========================= * 登録系 * ========================= */ private void registerAllRecipes() { register(Material.IRON_HELMET, Material.IRON_BLOCK, "iron_helmet_upg", MAX_IRON_LEVEL); register(Material.IRON_CHESTPLATE, Material.IRON_BLOCK, "iron_chest_upg", MAX_IRON_LEVEL); register(Material.IRON_LEGGINGS, Material.IRON_BLOCK, "iron_legs_upg", MAX_IRON_LEVEL); register(Material.IRON_BOOTS, Material.IRON_BLOCK, "iron_boots_upg", MAX_IRON_LEVEL); register(Material.DIAMOND_HELMET, Material.DIAMOND_BLOCK, "diamond_helmet_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_CHESTPLATE, Material.DIAMOND_BLOCK, "diamond_chest_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_LEGGINGS, Material.DIAMOND_BLOCK, "diamond_legs_upg", MAX_DIAMOND_LEVEL); register(Material.DIAMOND_BOOTS, Material.DIAMOND_BLOCK, "diamond_boots_upg", MAX_DIAMOND_LEVEL); register(Material.NETHERITE_HELMET, Material.NETHERITE_BLOCK, "netherite_helmet_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_CHESTPLATE, Material.NETHERITE_BLOCK, "netherite_chest_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_LEGGINGS, Material.NETHERITE_BLOCK, "netherite_legs_upg", MAX_NETHERITE_LEVEL); register(Material.NETHERITE_BOOTS, Material.NETHERITE_BLOCK, "netherite_boots_upg", MAX_NETHERITE_LEVEL); } private void register(Material armorPiece, Material surroundBlock, String keyName, int maxLevel) { NamespacedKey key = new NamespacedKey(plugin, keyName); ItemStack base = new ItemStack(armorPiece); ItemMeta meta = base.getItemMeta(); meta.getPersistentDataContainer().set(getOrInitUpgradeKey(plugin), PersistentDataType.INTEGER, 0); base.setItemMeta(meta); ShapedRecipe recipe = new ShapedRecipe(key, base); recipe.shape("BBB", "BAB", "BBB"); recipe.setIngredient('B', surroundBlock); recipe.setIngredient('A', armorPiece); Bukkit.addRecipe(recipe); } /* ========================= * イベント * ========================= */ public void onPrepareCraft(PrepareItemCraftEvent e) { if (!(e.getRecipe() instanceof ShapedRecipe sr)) return; String ns = plugin.getName().toLowerCase(java.util.Locale.ROOT); if (!sr.getKey().getNamespace().equals(ns)) return; ItemStack baseArmor = Arrays.stream(e.getInventory().getMatrix()) .filter(Objects::nonNull) .filter(s -> isUpgradeablePiece(s.getType())) .findFirst().orElse(null); if (baseArmor == null) return; ItemMeta m = baseArmor.getItemMeta(); int cur = readUpgradeLevel(m, plugin); int max = maxLevelOf(baseArmor.getType()); if (cur >= max) { e.getInventory().setResult(null); return; } ItemStack upgraded = upgradeArmor(baseArmor.clone(), cur + 1); e.getInventory().setResult(upgraded); } private boolean isUpgradeablePiece(Material t) { return switch (t) { case IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS, DIAMOND_HELMET, DIAMOND_CHESTPLATE, DIAMOND_LEGGINGS, DIAMOND_BOOTS, NETHERITE_HELMET, NETHERITE_CHESTPLATE, NETHERITE_LEGGINGS, NETHERITE_BOOTS -> true; default -> false; }; } private static int maxLevelOf(Material m) { return switch (m) { case IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS -> MAX_IRON_LEVEL; case DIAMOND_HELMET, DIAMOND_CHESTPLATE, DIAMOND_LEGGINGS, DIAMOND_BOOTS -> MAX_DIAMOND_LEVEL; case NETHERITE_HELMETNETHERITE_CHESTPLATENETHERITE_LEGGINGSNETHERITE_BOOTS -> MAX_NETHERITE_LEVEL; default -> 0; }; } /* ========================= * コア処理 * ========================= */ private ItemStack upgradeArmor(ItemStack armor, int newLevelなし
private String niceArmorName(Material m)niceArmorName の主要処理を担当します。
Material mなし
ArmorUpgradeManager → getOrInitUpgradeKey → registerAllRecipes → getServer → getPluginManager → registerEventsreadUpgradeLevel → getRecipe → getName → toLowerCase → getKey → getNamespacereadUpgradeLevel → getItemMeta → getPersistentDataContainer → getOrInitUpgradeKey → min → maxLevelOfregister → getItemMeta → getPersistentDataContainer → getOrInitUpgradeKey → setItemMeta → shapeniceArmorName → name → toLowerCase → replacereadUpgradeLevel → getOrInitUpgradeKey → getPersistentDataContainer