From caa81e11598a014df82fe474f0dac6eaad0c4b39 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 1 Aug 2019 19:15:12 -0500 Subject: [PATCH] Add blacklist option for grindstone --- .../minecraft/server/ContainerGrindstone.java | 17 +++++++++++++++++ .../java/net/minecraft/server/ItemStack.java | 6 ++++++ .../java/net/pl3x/purpur/PurpurWorldConfig.java | 12 ++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/main/java/net/minecraft/server/ContainerGrindstone.java b/src/main/java/net/minecraft/server/ContainerGrindstone.java index ed88e208d..fcfb4abdc 100644 --- a/src/main/java/net/minecraft/server/ContainerGrindstone.java +++ b/src/main/java/net/minecraft/server/ContainerGrindstone.java @@ -57,12 +57,24 @@ public class ContainerGrindstone extends Container { this.a(new Slot(this.craftInventory, 0, 49, 19) { @Override public boolean isAllowed(ItemStack itemstack) { + // Purpur start + if (containeraccess.getWorld().purpurConfig.grindstoneBlacklistDisallowPlacement && containeraccess.getWorld().purpurConfig.grindstoneBlacklist.contains(itemstack.getId())) { + getBukkitView().getTopInventory().getViewers().forEach(viewer -> ((Player) viewer).updateInventory()); + return false; + } + // Purpur end return itemstack.e() || itemstack.getItem() == Items.ENCHANTED_BOOK || itemstack.hasEnchantments(); } }); this.a(new Slot(this.craftInventory, 1, 49, 40) { @Override public boolean isAllowed(ItemStack itemstack) { + // Purpur start + if (containeraccess.getWorld().purpurConfig.grindstoneBlacklistDisallowPlacement && containeraccess.getWorld().purpurConfig.grindstoneBlacklist.contains(itemstack.getId())) { + getBukkitView().getTopInventory().getViewers().forEach(viewer -> ((Player) viewer).updateInventory()); + return false; + } + // Purpur end return itemstack.e() || itemstack.getItem() == Items.ENCHANTED_BOOK || itemstack.hasEnchantments(); } }); @@ -106,6 +118,11 @@ public class ContainerGrindstone extends Container { } private int e(ItemStack itemstack) { + // Purpur start + if (containeraccess.getWorld().purpurConfig.grindstoneBlacklistReturnsZeroExp && containeraccess.getWorld().purpurConfig.grindstoneBlacklist.contains(itemstack.getId())) { + return 0; + } + // Purpur end int j = 0; Map map = EnchantmentManager.a(itemstack); Iterator iterator = map.entrySet().iterator(); diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java index 8c3bbef66..d5e0578b2 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -542,6 +542,12 @@ public final class ItemStack { return !this.e() ? this.doMaterialsMatch(itemstack) : !itemstack.isEmpty() && this.getItem() == itemstack.getItem(); } + // Purpur start + public String getId() { + return IRegistry.ITEM.getKey(getItem()).toString(); + } + // Purpur end + public String j() { return this.getItem().f(this); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 5318a8e32..9c60855d6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -8,6 +8,7 @@ import net.minecraft.server.MinecraftKey; import org.bukkit.configuration.ConfigurationSection; import org.spigotmc.SpigotWorldConfig; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -103,6 +104,17 @@ public class PurpurWorldConfig { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); } + public List grindstoneBlacklist = new ArrayList<>(); + public boolean grindstoneBlacklistDisallowPlacement = true; + public boolean grindstoneBlacklistReturnsZeroExp = true; + private void grindstoneBlacklist() { + List blacklist = getList("blocks.grindstone.blacklist.blacklisted-items", grindstoneBlacklist); + grindstoneBlacklistDisallowPlacement = getBoolean("blocks.grindstone.blacklist.disallow-placement", grindstoneBlacklistDisallowPlacement); + grindstoneBlacklistReturnsZeroExp = getBoolean("blocks.grindstone.blacklist.returns-zero-exp", grindstoneBlacklistReturnsZeroExp); + grindstoneBlacklist.clear(); + grindstoneBlacklist.addAll(blacklist); + } + public boolean signAllowColors = false; public boolean signRightClickEdit = false; private void signSettings() { -- 2.24.0