aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches-Unmapped/0127-Configurable-Cartographer-Treasure-Maps.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches-Unmapped/0127-Configurable-Cartographer-Treasure-Maps.patch')
-rw-r--r--Spigot-Server-Patches-Unmapped/0127-Configurable-Cartographer-Treasure-Maps.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/Spigot-Server-Patches-Unmapped/0127-Configurable-Cartographer-Treasure-Maps.patch b/Spigot-Server-Patches-Unmapped/0127-Configurable-Cartographer-Treasure-Maps.patch
new file mode 100644
index 0000000000..82ccdd75a9
--- /dev/null
+++ b/Spigot-Server-Patches-Unmapped/0127-Configurable-Cartographer-Treasure-Maps.patch
@@ -0,0 +1,65 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Tue, 20 Dec 2016 15:26:27 -0500
+Subject: [PATCH] Configurable Cartographer Treasure Maps
+
+Allow configuring for cartographers to return the same map location
+
+Also allow turning off treasure maps all together as they can eat up Map ID's
+which are limited in quantity.
+
+diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+index e83216be5a00d5b927d8c2fc364551bd3077c974..2dc58b9f769ea43b737804456aafab47ecc143b8 100644
+--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+@@ -314,4 +314,14 @@ public class PaperWorldConfig {
+ Bukkit.getLogger().warning("Spawn Egg and Armor Stand NBT filtering disabled, this is a potential security risk");
+ }
+ }
++
++ public boolean enableTreasureMaps = true;
++ public boolean treasureMapsAlreadyDiscovered = false;
++ private void treasureMapsAlreadyDiscovered() {
++ enableTreasureMaps = getBoolean("enable-treasure-maps", true);
++ treasureMapsAlreadyDiscovered = getBoolean("treasure-maps-return-already-discovered", false);
++ if (treasureMapsAlreadyDiscovered) {
++ log("Treasure Maps will return already discovered locations");
++ }
++ }
+ }
+diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerTrades.java b/src/main/java/net/minecraft/world/entity/npc/VillagerTrades.java
+index 764ff5d9ffb541a356a6bc8b321e619849dde747..0a34e319998a95a9654822e55a22eb964b2d626b 100644
+--- a/src/main/java/net/minecraft/world/entity/npc/VillagerTrades.java
++++ b/src/main/java/net/minecraft/world/entity/npc/VillagerTrades.java
+@@ -124,7 +124,8 @@ public class VillagerTrades {
+ return null;
+ } else {
+ WorldServer worldserver = (WorldServer) entity.world;
+- BlockPosition blockposition = worldserver.a(this.b, entity.getChunkCoordinates(), 100, true);
++ if (!worldserver.paperConfig.enableTreasureMaps) return null; // Paper
++ BlockPosition blockposition = worldserver.a(this.b, entity.getChunkCoordinates(), 100, !worldserver.paperConfig.treasureMapsAlreadyDiscovered); // Paper
+
+ if (blockposition != null) {
+ ItemStack itemstack = ItemWorldMap.createFilledMapView(worldserver, blockposition.getX(), blockposition.getZ(), (byte) 2, true, true);
+diff --git a/src/main/java/net/minecraft/world/level/storage/loot/functions/LootItemFunctionExplorationMap.java b/src/main/java/net/minecraft/world/level/storage/loot/functions/LootItemFunctionExplorationMap.java
+index 38125a60bad4830db9de3580ab6d85fd122a0689..7bf16c5a3f2bb5525ce1ca0c0190c7671fc94797 100644
+--- a/src/main/java/net/minecraft/world/level/storage/loot/functions/LootItemFunctionExplorationMap.java
++++ b/src/main/java/net/minecraft/world/level/storage/loot/functions/LootItemFunctionExplorationMap.java
+@@ -64,7 +64,16 @@ public class LootItemFunctionExplorationMap extends LootItemFunctionConditional
+
+ if (vec3d != null) {
+ WorldServer worldserver = loottableinfo.getWorld();
+- BlockPosition blockposition = worldserver.a(this.e, new BlockPosition(vec3d), this.h, this.i);
++ // Paper start
++ if (!worldserver.paperConfig.enableTreasureMaps) {
++ /*
++ * NOTE: I fear users will just get a plain map as their "treasure"
++ * This is preferable to disrespecting the config.
++ */
++ return itemstack;
++ }
++ // Paper end
++ BlockPosition blockposition = worldserver.a(this.e, new BlockPosition(vec3d), this.h, !worldserver.paperConfig.treasureMapsAlreadyDiscovered && this.i); // Paper
+
+ if (blockposition != null) {
+ ItemStack itemstack1 = ItemWorldMap.createFilledMapView(worldserver, blockposition.getX(), blockposition.getZ(), this.g, true, true);