diff --git a/src/main/java/me/unariginal/novaraids/config/BossesConfig.java b/src/main/java/me/unariginal/novaraids/config/BossesConfig.java index 6b5e506..c152139 100644 --- a/src/main/java/me/unariginal/novaraids/config/BossesConfig.java +++ b/src/main/java/me/unariginal/novaraids/config/BossesConfig.java @@ -201,6 +201,18 @@ public void loadSettings(String categoryId, File file) throws IOException, NullP if (root.has("item_settings")) itemSettings = root.getAsJsonObject("item_settings"); + Boolean raidBallsEnabledOverride = null; + if (itemSettings.has("raid_balls_enabled")) { + JsonElement categoryRaidBallsOverrideElement = itemSettings.get("raid_balls_enabled"); + if (!categoryRaidBallsOverrideElement.isJsonNull()) { + raidBallsEnabledOverride = categoryRaidBallsOverrideElement.getAsBoolean(); + } + } + itemSettings.remove("raid_balls_enabled"); + if (raidBallsEnabledOverride != null) { + itemSettings.addProperty("raid_balls_enabled", raidBallsEnabledOverride); + } + JsonObject categoryChoiceVoucherObject = new JsonObject(); if (itemSettings.has("category_choice_voucher")) categoryChoiceVoucherObject = itemSettings.getAsJsonObject("category_choice_voucher"); @@ -268,6 +280,7 @@ public void loadSettings(String categoryId, File file) throws IOException, NullP fightBossbar, preCatchBossbar, catchBossbar, + raidBallsEnabledOverride, categoryChoiceVoucher, categoryRandomVoucher, categoryPass, @@ -775,6 +788,7 @@ else if (pokemonDetails.has("gender")) // Item Settings boolean allowGlobalPokeballs = true; boolean allowCategoryPokeballs = true; + Boolean raidBallsEnabledOverride = null; JsonObject itemSettingsObject = new JsonObject(); if (root.has("item_settings")) @@ -790,6 +804,17 @@ else if (pokemonDetails.has("gender")) itemSettingsObject.remove("allow_category_pokeballs"); itemSettingsObject.addProperty("allow_category_pokeballs", allowCategoryPokeballs); + if (itemSettingsObject.has("raid_balls_enabled")) { + JsonElement bossRaidBallsOverrideElement = itemSettingsObject.get("raid_balls_enabled"); + if (!bossRaidBallsOverrideElement.isJsonNull()) { + raidBallsEnabledOverride = bossRaidBallsOverrideElement.getAsBoolean(); + } + } + itemSettingsObject.remove("raid_balls_enabled"); + if (raidBallsEnabledOverride != null) { + itemSettingsObject.addProperty("raid_balls_enabled", raidBallsEnabledOverride); + } + JsonObject bossVoucherObject = new JsonObject(); if (itemSettingsObject.has("boss_voucher")) bossVoucherObject = itemSettingsObject.get("boss_voucher").getAsJsonObject(); @@ -828,6 +853,7 @@ else if (pokemonDetails.has("gender")) ItemSettings itemSettings = new ItemSettings( allowGlobalPokeballs, allowCategoryPokeballs, + raidBallsEnabledOverride, bossVoucher, bossPass, bossBalls diff --git a/src/main/java/me/unariginal/novaraids/data/Category.java b/src/main/java/me/unariginal/novaraids/data/Category.java index 11b8620..7ef4810 100644 --- a/src/main/java/me/unariginal/novaraids/data/Category.java +++ b/src/main/java/me/unariginal/novaraids/data/Category.java @@ -17,6 +17,7 @@ public record Category(String id, String fightBossbar, String preCatchBossbar, String catchBossbar, + Boolean raidBallsEnabledOverride, Voucher categoryChoiceVoucher, Voucher categoryRandomVoucher, Pass categoryPass, diff --git a/src/main/java/me/unariginal/novaraids/data/bosssettings/ItemSettings.java b/src/main/java/me/unariginal/novaraids/data/bosssettings/ItemSettings.java index a0572ae..aac322a 100644 --- a/src/main/java/me/unariginal/novaraids/data/bosssettings/ItemSettings.java +++ b/src/main/java/me/unariginal/novaraids/data/bosssettings/ItemSettings.java @@ -8,6 +8,7 @@ public record ItemSettings(boolean allowGlobalPokeballs, boolean allowCategoryPokeballs, + Boolean raidBallsEnabledOverride, Voucher voucher, Pass pass, List raidBalls) { diff --git a/src/main/java/me/unariginal/novaraids/managers/EventManager.java b/src/main/java/me/unariginal/novaraids/managers/EventManager.java index cc1f50b..9bd3ef8 100644 --- a/src/main/java/me/unariginal/novaraids/managers/EventManager.java +++ b/src/main/java/me/unariginal/novaraids/managers/EventManager.java @@ -614,7 +614,7 @@ public static void rightClickEvents() { player.sendMessage(TextUtils.deserialize(TextUtils.parse(messages.getMessage("used_voucher"), boss))); } } - } else if (customData.copyNbt().getString("raid_item").equals("raid_ball") && nr.config().raidBallsEnabled) { + } else if (customData.copyNbt().getString("raid_item").equals("raid_ball")) { boolean canThrow = false; if (nr.config().playerLinkedRaidBalls && customData.contains("owner_uuid")) { @@ -627,10 +627,12 @@ public static void rightClickEvents() { canThrow = PlayerRaidCache.isInRaid(player.getUuid()); if (canThrow) { - canThrow = false; - Raid raid = PlayerRaidCache.currentRaid(player); if (raid != null && raid.stage() == 4) { + if (!raid.isRaidBallsEnabled()) { + player.sendMessage(TextUtils.deserialize(TextUtils.parse(messages.getMessage("warning_not_catch_phase")))); + return TypedActionResult.fail(itemStack); + } if (customData.contains("raid_categories") || customData.contains("raid_bosses")) { // do nothing - same as previous logic @@ -676,7 +678,7 @@ public static void rightClickEvents() { Raid raid = PlayerRaidCache.currentRaid(player); if (raid == null) return TypedActionResult.pass(itemStack); - if (isPokeball(itemStack) && nr.config().raidBallsEnabled) { + if (isPokeball(itemStack) && raid.isRaidBallsEnabled()) { player.sendMessage(TextUtils.deserialize(TextUtils.parse(messages.getMessage("warning_deny_normal_pokeball")))); return TypedActionResult.fail(itemStack); } diff --git a/src/main/java/me/unariginal/novaraids/managers/Raid.java b/src/main/java/me/unariginal/novaraids/managers/Raid.java index 7e750b1..9324b26 100644 --- a/src/main/java/me/unariginal/novaraids/managers/Raid.java +++ b/src/main/java/me/unariginal/novaraids/managers/Raid.java @@ -659,6 +659,20 @@ public Location raidBossLocation() { return raidBossLocation; } + public boolean isRaidBallsEnabled() { + Boolean bossOverride = bossInfo.itemSettings().raidBallsEnabledOverride(); + if (bossOverride != null) { + return bossOverride; + } + + Boolean categoryOverride = raidBossCategory.raidBallsEnabledOverride(); + if (categoryOverride != null) { + return categoryOverride; + } + + return nr.config().raidBallsEnabled; + } + public int currentHealth() { return currentHealth; } diff --git a/src/main/resources/raid_config_files/bosses/common/bosses/example_eevee.json b/src/main/resources/raid_config_files/bosses/common/bosses/example_eevee.json index 07457ca..f78058a 100644 --- a/src/main/resources/raid_config_files/bosses/common/bosses/example_eevee.json +++ b/src/main/resources/raid_config_files/bosses/common/bosses/example_eevee.json @@ -91,6 +91,7 @@ "item_settings": { "allow_global_pokeballs": true, "allow_category_pokeballs": true, + "raid_balls_enabled": true, "boss_voucher": { "voucher_item": "minecraft:feather", "voucher_name": "", diff --git a/src/main/resources/raid_config_files/bosses/common/settings.json b/src/main/resources/raid_config_files/bosses/common/settings.json index d24d688..59b487f 100644 --- a/src/main/resources/raid_config_files/bosses/common/settings.json +++ b/src/main/resources/raid_config_files/bosses/common/settings.json @@ -21,6 +21,7 @@ } }, "item_settings": { + "raid_balls_enabled": true, "category_choice_voucher": { "voucher_item": "minecraft:feather", "voucher_name": "",