From a01b3d37f33226b0577c22adf751871c485bce9a Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Sat, 30 Oct 2021 23:49:00 +0300 Subject: [PATCH 1/4] - Fixed descriptions saving as false for default - Fixed not grindstoneable enchantments still being grindstoned --- .../grindstone/GrindstoneListeners.java | 53 ++++++++++++++++++- .../ecoenchants/data/storage/PlayerProfile.kt | 4 +- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java index cc3ef010..3bb4278a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java @@ -15,9 +15,12 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.GrindstoneInventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import java.util.HashSet; +import java.util.Map; import java.util.Set; public class GrindstoneListeners extends PluginDependent implements Listener { @@ -51,11 +54,22 @@ public class GrindstoneListeners extends PluginDependent implements L ItemStack top = inventory.getItem(0); ItemStack bottom = inventory.getItem(1); ItemStack out = inventory.getItem(2); - + if (out == null) { return; } + Map merged = GrindstoneMerge.doMerge(top, bottom); + ItemMeta meta = out.getItemMeta(); + for (Enchantment enchantment : merged.keySet()) { + if (meta instanceof EnchantmentStorageMeta storageMeta) { + storageMeta.addStoredEnchant(enchantment, merged.get(enchantment), true); + } else { + meta.addEnchant(enchantment, merged.get(enchantment), true); + } + } + out.setItemMeta(meta); + this.getPlugin().getScheduler().runLater(() -> { if (inventory.getItem(2) != null || event.isCancelled()) return; Set enchants = new HashSet<>(); @@ -65,7 +79,7 @@ public class GrindstoneListeners extends PluginDependent implements L if (bottom != null) { enchants.addAll(bottom.getEnchantments().keySet()); } - enchants.removeIf(enchantment -> !(enchantment instanceof EcoEnchant)); + enchants.removeIf(enchantment -> !(enchantment instanceof EcoEnchant) || merged.containsKey(enchantment)); if (!enchants.isEmpty()) { Location loc = player.getLocation().clone().add( NumberUtils.randFloat(-1, 1), @@ -78,4 +92,39 @@ public class GrindstoneListeners extends PluginDependent implements L }, 1); } + /** + * An additional grindstone listener for isGrindstoneable check. + * + * @param event The event to listen to. + */ + @EventHandler + public void onGrindstoneFix(@NotNull final InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + if (player.getOpenInventory().getTopInventory().getType() != InventoryType.GRINDSTONE) { + return; + } + this.getPlugin().getScheduler().runLater(() -> { + GrindstoneInventory inventory = (GrindstoneInventory) player.getOpenInventory().getTopInventory(); + + ItemStack top = inventory.getItem(0); + ItemStack bottom = inventory.getItem(1); + ItemStack out = inventory.getItem(2); + + if (out == null) { + return; + } + + Map merged = GrindstoneMerge.doMerge(top, bottom); + ItemMeta meta = out.getItemMeta(); + for (Enchantment enchantment : merged.keySet()) { + if (meta instanceof EnchantmentStorageMeta storageMeta) { + storageMeta.addStoredEnchant(enchantment, merged.get(enchantment), true); + } else { + meta.addEnchant(enchantment, merged.get(enchantment), true); + } + } + out.setItemMeta(meta); + }, 1); + } + } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt index 6dc28943..1b76f0e5 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt @@ -33,7 +33,7 @@ class PlayerProfile private constructor( Type.INT -> data[key] = handler.read(uuid, key, 0) Type.DOUBLE -> data[key] = handler.read(uuid, key, 0.0) Type.STRING -> data[key] = handler.read(uuid, key, "Unknown") - Type.BOOLEAN -> data[key] = handler.read(uuid, key, false) + Type.BOOLEAN -> data[key] = handler.read(uuid, key, true) } } @@ -50,7 +50,7 @@ class PlayerProfile private constructor( Type.INT -> handler.write(uuid, key, profile.read(key, 0)) Type.DOUBLE -> handler.write(uuid, key, profile.read(key, 0.0)) Type.STRING -> handler.write(uuid, key, profile.read(key, "Unknown Value")) - Type.BOOLEAN -> handler.write(uuid, key, profile.read(key, false)) + Type.BOOLEAN -> handler.write(uuid, key, profile.read(key, true)) } } } From 86eec1b706d5fb0a3928ec43b97ba4530de0aa28 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Sat, 30 Oct 2021 23:49:00 +0300 Subject: [PATCH 2/4] - Fixed descriptions saving as false for default - Fixed not grindstoneable enchantments still being grindstoned --- .../com/willfp/ecoenchants/data/storage/PlayerProfile.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt index 6dc28943..1b76f0e5 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/data/storage/PlayerProfile.kt @@ -33,7 +33,7 @@ class PlayerProfile private constructor( Type.INT -> data[key] = handler.read(uuid, key, 0) Type.DOUBLE -> data[key] = handler.read(uuid, key, 0.0) Type.STRING -> data[key] = handler.read(uuid, key, "Unknown") - Type.BOOLEAN -> data[key] = handler.read(uuid, key, false) + Type.BOOLEAN -> data[key] = handler.read(uuid, key, true) } } @@ -50,7 +50,7 @@ class PlayerProfile private constructor( Type.INT -> handler.write(uuid, key, profile.read(key, 0)) Type.DOUBLE -> handler.write(uuid, key, profile.read(key, 0.0)) Type.STRING -> handler.write(uuid, key, profile.read(key, "Unknown Value")) - Type.BOOLEAN -> handler.write(uuid, key, profile.read(key, false)) + Type.BOOLEAN -> handler.write(uuid, key, profile.read(key, true)) } } } From 6fb4e1b3214d4ec6f3984793e1ad3db5d45b0c80 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Mon, 1 Nov 2021 14:13:44 +0300 Subject: [PATCH 3/4] Fixed Streamlining enchantment (who could know that higher speed is slower in spigot api world) --- .../enchantments/ecoenchants/special/Streamlining.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java index 441b896e..0966bc47 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java @@ -23,6 +23,6 @@ public class Streamlining extends EcoEnchant { return; } - player.setWalkSpeed((float) (0.2 + (level * EcoEnchants.STREAMLINING.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "speed-per-level")))); + player.setWalkSpeed((float) (0.2f - (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "speed-per-level")))); } } From 3bea8c711dafd80250c040743b05b4917821e681 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Mon, 1 Nov 2021 14:16:03 +0300 Subject: [PATCH 4/4] Revert to Auxilors way of fixing grindstoneable: false --- .../grindstone/GrindstoneListeners.java | 73 +++++-------------- 1 file changed, 18 insertions(+), 55 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java index 3bb4278a..18fa9efa 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/merging/grindstone/GrindstoneListeners.java @@ -1,5 +1,6 @@ package com.willfp.ecoenchants.enchantments.support.merging.grindstone; +import com.sk89q.worldguard.blacklist.target.ItemMatcher; import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.PluginDependent; import com.willfp.eco.util.NumberUtils; @@ -59,72 +60,34 @@ public class GrindstoneListeners extends PluginDependent implements L return; } - Map merged = GrindstoneMerge.doMerge(top, bottom); - ItemMeta meta = out.getItemMeta(); - for (Enchantment enchantment : merged.keySet()) { - if (meta instanceof EnchantmentStorageMeta storageMeta) { - storageMeta.addStoredEnchant(enchantment, merged.get(enchantment), true); - } else { - meta.addEnchant(enchantment, merged.get(enchantment), true); - } - } - out.setItemMeta(meta); + Map toKeep = GrindstoneMerge.doMerge(top, bottom); this.getPlugin().getScheduler().runLater(() -> { - if (inventory.getItem(2) != null || event.isCancelled()) return; - Set enchants = new HashSet<>(); - if (top != null) { - enchants.addAll(top.getEnchantments().keySet()); + if (inventory.getItem(2) != null || event.isCancelled()) { + return; } - if (bottom != null) { - enchants.addAll(bottom.getEnchantments().keySet()); + + ItemMeta outMeta = out.getItemMeta(); + assert outMeta != null; + + if (outMeta instanceof EnchantmentStorageMeta storageMeta) { + toKeep.forEach((enchant, level) -> storageMeta.addStoredEnchant(enchant, level, true)); + out.setItemMeta(storageMeta); + } else { + toKeep.forEach((enchant, level) -> outMeta.addEnchant(enchant, level, true)); + out.setItemMeta(outMeta); } - enchants.removeIf(enchantment -> !(enchantment instanceof EcoEnchant) || merged.containsKey(enchantment)); - if (!enchants.isEmpty()) { + + if (!toKeep.isEmpty()) { Location loc = player.getLocation().clone().add( NumberUtils.randFloat(-1, 1), NumberUtils.randFloat(-1, 1), NumberUtils.randFloat(-1, 1) ); ExperienceOrb orb = (ExperienceOrb) loc.getWorld().spawnEntity(loc, EntityType.EXPERIENCE_ORB); - orb.setExperience(enchants.size() * 15); + orb.setExperience(toKeep.size() * 15); } }, 1); } - /** - * An additional grindstone listener for isGrindstoneable check. - * - * @param event The event to listen to. - */ - @EventHandler - public void onGrindstoneFix(@NotNull final InventoryClickEvent event) { - Player player = (Player) event.getWhoClicked(); - if (player.getOpenInventory().getTopInventory().getType() != InventoryType.GRINDSTONE) { - return; - } - this.getPlugin().getScheduler().runLater(() -> { - GrindstoneInventory inventory = (GrindstoneInventory) player.getOpenInventory().getTopInventory(); - - ItemStack top = inventory.getItem(0); - ItemStack bottom = inventory.getItem(1); - ItemStack out = inventory.getItem(2); - - if (out == null) { - return; - } - - Map merged = GrindstoneMerge.doMerge(top, bottom); - ItemMeta meta = out.getItemMeta(); - for (Enchantment enchantment : merged.keySet()) { - if (meta instanceof EnchantmentStorageMeta storageMeta) { - storageMeta.addStoredEnchant(enchantment, merged.get(enchantment), true); - } else { - meta.addEnchant(enchantment, merged.get(enchantment), true); - } - } - out.setItemMeta(meta); - }, 1); - } - -} +} \ No newline at end of file