- Fixed descriptions saving as false for default

- Fixed not grindstoneable enchantments still being grindstoned
This commit is contained in:
_OfTeN_ 2021-10-30 23:49:00 +03:00
parent 24ab170828
commit a01b3d37f3
2 changed files with 53 additions and 4 deletions

View File

@ -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<EcoPlugin> implements Listener {
@ -51,11 +54,22 @@ public class GrindstoneListeners extends PluginDependent<EcoPlugin> implements L
ItemStack top = inventory.getItem(0);
ItemStack bottom = inventory.getItem(1);
ItemStack out = inventory.getItem(2);
if (out == null) {
return;
}
Map<Enchantment, Integer> 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<Enchantment> enchants = new HashSet<>();
@ -65,7 +79,7 @@ public class GrindstoneListeners extends PluginDependent<EcoPlugin> 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<EcoPlugin> 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<Enchantment, Integer> 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);
}
}

View File

@ -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))
}
}
}