diff --git a/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java b/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java index ae3d37ba..d75bdfd1 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java @@ -38,6 +38,4 @@ public interface VersionManager { String getPluginVersion(); boolean isMojmap(); - - String getServerVersion(); } diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/totem/TotemParticle.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/totem/TotemParticle.java index f898bfd8..0321992c 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/totem/TotemParticle.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/totem/TotemParticle.java @@ -13,4 +13,4 @@ public interface TotemParticle { * @return cancellable task */ CancellableTask start(Location location, double radius); -} +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index cc7d9a9e..d06408b6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { allprojects { - version = "2.2.0" + version = "2.1.6.6" apply() apply(plugin = "java") diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java index ad782914..fbec08ec 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java @@ -31,12 +31,14 @@ import net.momirealms.customfishing.compatibility.papi.PlaceholderManagerImpl; import net.momirealms.customfishing.setting.CFConfig; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -109,12 +111,7 @@ public class BagManagerImpl implements BagManager, Listener { int rows = getBagInventoryRows(player); Inventory bag = onlinePlayer.getHolder().getInventory(); if (bag.getSize() != rows * 9) { - Inventory newBag = InventoryUtils.createInventory(onlinePlayer.getHolder(), rows * 9, - AdventureHelper.getInstance().getComponentFromMiniMessage( - PlaceholderManagerImpl.getInstance().parse( - player, bagTitle, Map.of("{player}", player.getName()) - ) - )); + Inventory newBag = InventoryUtils.createInventory(onlinePlayer.getHolder(), rows * 9, AdventureHelper.getInstance().getComponentFromMiniMessage(PlaceholderManagerImpl.getInstance().parse(player, bagTitle, Map.of("{player}", player.getName())))); onlinePlayer.getHolder().setInventory(newBag); assert newBag != null; ItemStack[] newContents = new ItemStack[rows * 9]; @@ -180,9 +177,13 @@ public class BagManagerImpl implements BagManager, Listener { if (!(event.getInventory().getHolder() instanceof FishingBagHolder)) return; Inventory clicked = event.getClickedInventory(); - if (clicked != event.getWhoClicked().getInventory()) - return; ItemStack clickedItem = event.getCurrentItem(); + if (clicked != event.getWhoClicked().getInventory()) { + if (event.getAction() != InventoryAction.HOTBAR_SWAP && event.getAction() != InventoryAction.HOTBAR_MOVE_AND_READD) { + return; + } + clickedItem = event.getWhoClicked().getInventory().getItem(event.getHotbarButton()); + } if (clickedItem == null || clickedItem.getType() == Material.AIR) return; if (bagWhiteListItems.contains(clickedItem.getType())) diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/block/BlockManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/block/BlockManagerImpl.java index 874b5fab..66514fc0 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/block/BlockManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/block/BlockManagerImpl.java @@ -99,7 +99,7 @@ public class BlockManagerImpl implements BlockManager, Listener { private void resetBlockDetectionOrder() { ArrayList list = new ArrayList<>(); - for (String plugin : CFConfig.itemDetectOrder) { + for (String plugin : CFConfig.blockDetectOrder) { BlockLibrary library = blockLibraryMap.get(plugin); if (library != null) { list.add(library); diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/HookCheckTimerTask.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/HookCheckTimerTask.java index a0eafee1..09fffc25 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/HookCheckTimerTask.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/fishing/HookCheckTimerTask.java @@ -320,23 +320,26 @@ public class HookCheckTimerTask implements Runnable { armorLoc.setY(armorLoc.getBlockY() + 0.2); if (hookedEntity != null && !hookedEntity.isDead()) hookedEntity.remove(); - hookedEntity = armorLoc.getWorld().spawn(armorLoc, ArmorStand.class, a -> { - a.setInvisible(true); - a.setCollidable(false); - a.setInvulnerable(true); - a.setVisible(false); - a.setCustomNameVisible(false); - a.setSmall(true); - a.setGravity(false); - a.getPersistentDataContainer().set( - Objects.requireNonNull(NamespacedKey.fromString("lavafishing", CustomFishingPlugin.get())), - PersistentDataType.STRING, - "temp" - ); - }); + hookedEntity = armorLoc.getWorld().spawn(armorLoc, ArmorStand.class); + setTempEntity((ArmorStand) hookedEntity); fishHook.setHookedEntity(hookedEntity); } + private void setTempEntity(ArmorStand entity) { + entity.setInvisible(true); + entity.setCollidable(false); + entity.setInvulnerable(true); + entity.setVisible(false); + entity.setCustomNameVisible(false); + entity.setSmall(true); + entity.setGravity(false); + entity.getPersistentDataContainer().set( + Objects.requireNonNull(NamespacedKey.fromString("lavafishing", CustomFishingPlugin.get())), + PersistentDataType.STRING, + "temp" + ); + } + /** * Checks if the fish hook is currently hooked. * @@ -351,8 +354,9 @@ public class HookCheckTimerTask implements Runnable { double initialTime = ThreadLocalRandom.current().nextInt(CFConfig.waterMaxTime - CFConfig.waterMinTime + 1) + CFConfig.waterMinTime; fishHook.setWaitTime(Math.max(1, (int) (initialTime * tempEffect.getWaitTimeMultiplier() + tempEffect.getWaitTime()))); } else { - fishHook.setMinWaitTime(Math.max(1, (int) (fishHook.getMinWaitTime() * tempEffect.getWaitTimeMultiplier() + tempEffect.getWaitTime()))); - fishHook.setMaxWaitTime(Math.max(2, (int) (fishHook.getMaxWaitTime() * tempEffect.getWaitTimeMultiplier() + tempEffect.getWaitTime()))); + int maxWait = Math.max(2, (int) (fishHook.getMaxWaitTime() * tempEffect.getWaitTimeMultiplier() + tempEffect.getWaitTime())); + int minWait = Math.min(Math.max(1, (int) (fishHook.getMinWaitTime() * tempEffect.getWaitTimeMultiplier() + tempEffect.getWaitTime())), fishHook.getMaxWaitTime()); + fishHook.setWaitTime(ThreadLocalRandom.current().nextInt(minWait, maxWait + 1)); } } } diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/hook/HookManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/hook/HookManagerImpl.java index d4956270..0c6a830a 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/hook/HookManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/hook/HookManagerImpl.java @@ -252,7 +252,7 @@ public class HookManagerImpl implements Listener, HookManager { return; ItemStack cursor = event.getCursor(); - if (cursor == null || cursor.getType() == Material.AIR) { + if (cursor.getType() == Material.AIR) { if (event.getClick() == ClickType.RIGHT) { NBTItem nbtItem = new NBTItem(clicked); NBTCompound cfCompound = nbtItem.getCompound("CustomFishing"); @@ -315,7 +315,7 @@ public class HookManagerImpl implements Listener, HookManager { clonedHook.setAmount(1); cursor.setAmount(cursor.getAmount() - 1); - if (previousHookID != null && !previousHookID.equals("")) { + if (previousHookID != null && !previousHookID.isEmpty()) { int previousHookDurability = cfCompound.getInteger("hook_dur"); ItemStack previousItemStack = cfCompound.getItemStack("hook_item"); ItemUtils.setDurability(previousItemStack, previousHookDurability, true); diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/requirement/RequirementManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/requirement/RequirementManagerImpl.java index a278a44a..169cd2e1 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/requirement/RequirementManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/requirement/RequirementManagerImpl.java @@ -306,8 +306,6 @@ public class RequirementManagerImpl implements RequirementManager { } } } - if (actionList.size() == 0) - actionList = null; } String type = section.getString("type"); if (type == null) { @@ -372,7 +370,9 @@ public class RequirementManagerImpl implements RequirementManager { HashSet arg = new HashSet<>(ConfigUtils.stringListArgs(args)); return condition -> { String lootID = condition.getArg("{loot}"); + if (lootID == null) return false; Loot loot = plugin.getLootManager().getLoot(lootID); + if (loot == null) return false; String[] groups = loot.getLootGroup(); if (groups != null) { for (String g : groups) { diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/totem/TotemManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/totem/TotemManagerImpl.java index a835d8cf..92c65703 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/totem/TotemManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/totem/TotemManagerImpl.java @@ -136,12 +136,10 @@ public class TotemManagerImpl implements TotemManager, Listener { activatedTotem.cancel(); } - @EventHandler + @EventHandler (ignoreCancelled = true) public void onInteractBlock(PlayerInteractEvent event) { if (event.isBlockInHand()) return; - if (event.useItemInHand() == Event.Result.DENY) - return; if (event.getAction() != org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK) return; if (event.getHand() != EquipmentSlot.HAND) diff --git a/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java b/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java index a1aeea39..a2d7d6c9 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java +++ b/plugin/src/main/java/net/momirealms/customfishing/util/ItemUtils.java @@ -238,7 +238,7 @@ public class ItemUtils { } } else { ItemMeta previousMeta = itemStack.getItemMeta().clone(); - PlayerItemDamageEvent itemDamageEvent = new PlayerItemDamageEvent(player, itemStack, amount, amount); + PlayerItemDamageEvent itemDamageEvent = new PlayerItemDamageEvent(player, itemStack, amount); Bukkit.getPluginManager().callEvent(itemDamageEvent); if (!itemStack.getItemMeta().equals(previousMeta) || itemDamageEvent.isCancelled()) { return; diff --git a/plugin/src/main/java/net/momirealms/customfishing/util/NBTUtils.java b/plugin/src/main/java/net/momirealms/customfishing/util/NBTUtils.java index 34b8c16b..075dea65 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/util/NBTUtils.java +++ b/plugin/src/main/java/net/momirealms/customfishing/util/NBTUtils.java @@ -47,7 +47,8 @@ public class NBTUtils { field.setAccessible(true); MinecraftVersion minecraftVersion; try { - minecraftVersion = MinecraftVersion.valueOf(CustomFishingPlugin.get().getVersionManager().getServerVersion().replace("v", "MC")); + String serverVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + minecraftVersion = MinecraftVersion.valueOf(serverVersion.replace("v", "MC")); } catch (Exception ex) { minecraftVersion = VERSION_TO_REVISION.getOrDefault(Bukkit.getServer().getBukkitVersion().split("-")[0], MinecraftVersion.UNKNOWN); diff --git a/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java index f7094028..99a687ff 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java @@ -34,47 +34,32 @@ import java.util.concurrent.CompletableFuture; */ public class VersionManagerImpl implements VersionManager { - private final boolean isNewerThan1_19_R2; - private final boolean isNewerThan1_19_R3; - private final boolean isNewerThan1_20; - private final boolean isNewerThan1_19; - private final String serverVersion; private final CustomFishingPluginImpl plugin; - private final boolean isSpigot; - private boolean hasRegionScheduler; + private final float mcVersion; + private boolean isFolia; private boolean isMojmap; + private boolean isSpigot; private final String pluginVersion; @SuppressWarnings("deprecation") public VersionManagerImpl(CustomFishingPluginImpl plugin) { this.plugin = plugin; - // Get the server version - serverVersion = Bukkit.getServer().getBukkitVersion().split("-")[0]; - String[] split = serverVersion.split("\\."); - int main_ver = Integer.parseInt(split[1]); - // Determine if the server version is newer than 1_19_R2 and 1_20_R1 - if (main_ver >= 20) { - isNewerThan1_19 = isNewerThan1_19_R2 = isNewerThan1_19_R3 = true; - isNewerThan1_20 = true; - } else if (main_ver == 19) { - isNewerThan1_20 = false; - isNewerThan1_19_R2 = Integer.parseInt(split[2]) >= 3; - isNewerThan1_19_R3 = Integer.parseInt(split[2]) >= 4; - isNewerThan1_19 = true; - } else { - isNewerThan1_20 = isNewerThan1_19 = isNewerThan1_19_R2 = isNewerThan1_19_R3 = false; - } - // Check if the server is Spigot - String server_name = plugin.getServer().getName(); - this.isSpigot = server_name.equals("CraftBukkit"); + + String[] split = Bukkit.getServer().getBukkitVersion().split("-")[0].split("\\."); + this.mcVersion = Float.parseFloat(split[1] + "." + (split.length >= 3 ? split[2] : "0")); + + // Get the plugin version + this.pluginVersion = plugin.getDescription().getVersion(); + + this.isSpigot = Bukkit.getServer().getName().equals("CraftBukkit"); // Check if the server is Folia try { - Class.forName("io.papermc.paper.threadedregions.scheduler.AsyncScheduler"); - this.hasRegionScheduler = true; + Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); + this.isFolia = true; } catch (ClassNotFoundException ignored) { - + this.isFolia = false; } // Check if the server is Mojmap @@ -82,37 +67,32 @@ public class VersionManagerImpl implements VersionManager { Class.forName("net.minecraft.network.protocol.game.ClientboundBossEventPacket"); this.isMojmap = true; } catch (ClassNotFoundException ignored) { - } - - // Get the plugin version - this.pluginVersion = plugin.getDescription().getVersion(); } @Override public boolean isVersionNewerThan1_19() { - return isNewerThan1_19; + return mcVersion >= 19; } @Override public boolean isVersionNewerThan1_19_R3() { - return isNewerThan1_19_R3; + return mcVersion >= 19.4; } - - + @Override public boolean isVersionNewerThan1_19_R2() { - return isNewerThan1_19_R2; + return mcVersion >= 19.3; } @Override public boolean isVersionNewerThan1_20() { - return isNewerThan1_20; + return mcVersion >= 20; } @Override public boolean isSpigot() { - return isSpigot; + return false; } @Override @@ -122,7 +102,7 @@ public class VersionManagerImpl implements VersionManager { @Override public boolean hasRegionScheduler() { - return hasRegionScheduler; + return isFolia; } @Override @@ -130,11 +110,6 @@ public class VersionManagerImpl implements VersionManager { return isMojmap; } - @Override - public String getServerVersion() { - return serverVersion; - } - // Method to asynchronously check for plugin updates @Override public CompletableFuture checkUpdate() {