From 5ee89b98f905c0a82c0dd82cf5ce41bec7cff182 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Fri, 18 Oct 2024 01:06:21 +0800 Subject: [PATCH] 2.2.30 --- .../mechanic/fishing/CustomFishingHook.java | 15 ++++++++- .../bukkit/fishing/BukkitFishingManager.java | 33 ++++++++++++++++--- .../bukkit/loot/BukkitLootManager.java | 2 +- gradle.properties | 2 +- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java index b5c19909..9c8fe9b4 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java @@ -179,7 +179,15 @@ public class CustomFishingHook { context.arg(ContextKeys.OTHER_Z, hook.getLocation().getBlockZ()); // get the next loot - Loot loot = plugin.getLootManager().getNextLoot(tempEffect, context); + + + Loot loot; + try { + loot = plugin.getLootManager().getNextLoot(tempEffect, context); + } catch (Exception e) { + loot = null; + plugin.getPluginLogger().warn("Error occurred when getting next loot.", e); + } if (loot != null) { this.nextLoot = loot; @@ -294,6 +302,11 @@ public class CustomFishingHook { return gamingPlayer != null && gamingPlayer.isValid(); } + public boolean isHookValid() { + if (hook == null) return false; + return hook.isValid(); + } + /** * Cancels the current game. */ diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/fishing/BukkitFishingManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/fishing/BukkitFishingManager.java index cdf6c6d5..1a69df4a 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/fishing/BukkitFishingManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/fishing/BukkitFishingManager.java @@ -35,10 +35,7 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.NamespacedKey; -import org.bukkit.entity.Entity; -import org.bukkit.entity.FishHook; -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; @@ -80,7 +77,15 @@ public class BukkitFishingManager implements FishingManager, Listener { @Override public Optional getFishHook(UUID player) { - return Optional.ofNullable(castHooks.get(player)); + CustomFishingHook hook = castHooks.get(player); + if (hook != null) { + if (hook.isHookValid()) { + return Optional.of(hook); + } else { + return Optional.empty(); + } + } + return Optional.empty(); } @Override @@ -350,6 +355,24 @@ public class BukkitFishingManager implements FishingManager, Listener { }); } + @EventHandler(priority = EventPriority.LOW) + public void onInteractEntity(PlayerInteractAtEntityEvent event) { + Entity entity = event.getRightClicked(); + if (entity.getType() != EntityType.ARMOR_STAND) return; + if (entity.getPersistentDataContainer().has(Objects.requireNonNull(NamespacedKey.fromString("temp-entity", BukkitCustomFishingPlugin.getInstance().getBootstrap())))) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onInteractEntity(PlayerInteractEntityEvent event) { + Entity entity = event.getRightClicked(); + if (entity.getType() != EntityType.ARMOR_STAND) return; + if (entity.getPersistentDataContainer().has(Objects.requireNonNull(NamespacedKey.fromString("temp-entity", BukkitCustomFishingPlugin.getInstance().getBootstrap())))) { + event.setCancelled(true); + } + } + @Override public void destroyHook(UUID uuid) { this.getFishHook(uuid).ifPresent(hook -> { diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java index bc84b603..f3a7686b 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java @@ -173,7 +173,7 @@ public class BukkitLootManager implements LootManager { plugin.debug(lootWeightMap); String lootID = WeightUtils.getRandom(lootWeightMap); return Optional.ofNullable(lootID) - .map(id -> getLoot(lootID).orElseThrow(() -> new RuntimeException("Could not find loot " + lootID))) + .map(id -> getLoot(lootID).orElseThrow(() -> new NullPointerException("Could not find loot " + lootID))) .orElse(null); } diff --git a/gradle.properties b/gradle.properties index 0577c2ab..a70f1a6e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=2.2.29 +project_version=2.2.30 config_version=36 project_group=net.momirealms