diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java index 0156fa6e..5d29599e 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java @@ -37,6 +37,6 @@ public class Thor extends EcoEnchant { double damage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "lightning-damage"); boolean silent = this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "local-lightning-sound"); - LightningUtils.strike(attacker, damage, silent); + LightningUtils.strike(victim, damage, silent); } } 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")))); } } 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..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; @@ -15,9 +16,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,31 +55,39 @@ 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 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)); - 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); } -} +} \ No newline at end of file