diff --git a/Spigot-Server-Patches/Fix-curing-zombie-villager-discount-exploit.patch b/Spigot-Server-Patches/Fix-curing-zombie-villager-discount-exploit.patch index 97e0a1078..1cba0097b 100644 --- a/Spigot-Server-Patches/Fix-curing-zombie-villager-discount-exploit.patch +++ b/Spigot-Server-Patches/Fix-curing-zombie-villager-discount-exploit.patch @@ -4,8 +4,8 @@ Date: Tue, 8 Dec 2020 20:14:20 -0600 Subject: [PATCH] Fix curing zombie villager discount exploit This fixes the exploit used to gain absurd trading discounts with infecting -and curing a villager on repeat by simply resetting the reputation when it -is cured. +and curing a villager on repeat by simply resetting the relevant part of +the reputation when it is cured. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 @@ -25,20 +25,31 @@ diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/j index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -0,0 +0,0 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation - @Nullable - private EntityHuman bv; - private byte bx; -- private final Reputation by; -+ private Reputation by; private void resetReputation() { this.by = new Reputation(); } // Paper - OBFHELPER - private long bz; - private long bA; - private int bB; @@ -0,0 +0,0 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @Override public void a(ReputationEvent reputationevent, Entity entity) { if (reputationevent == ReputationEvent.a) { -+ if (world.paperConfig.fixCuringZombieVillagerDiscountExploit) this.resetReputation(); // Paper - fix MC-181190 ++ // Paper start - fix MC-181190 ++ if (world.paperConfig.fixCuringZombieVillagerDiscountExploit) { ++ final Reputation.a playerReputation = this.getReputation().getReputations().get(entity.getUniqueID()); ++ if (playerReputation != null) { ++ playerReputation.removeReputationForType(ReputationType.MAJOR_POSITIVE); ++ playerReputation.removeReputationForType(ReputationType.MINOR_POSITIVE); ++ } ++ } ++ // Paper end this.by.a(entity.getUniqueID(), ReputationType.MAJOR_POSITIVE, 20); this.by.a(entity.getUniqueID(), ReputationType.MINOR_POSITIVE, 25); } else if (reputationevent == ReputationEvent.e) { +diff --git a/src/main/java/net/minecraft/server/Reputation.java b/src/main/java/net/minecraft/server/Reputation.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/Reputation.java ++++ b/src/main/java/net/minecraft/server/Reputation.java +@@ -0,0 +0,0 @@ public class Reputation { + + } + ++ public final void removeReputationForType(ReputationType reputationType) { this.b(reputationType); } // Paper - OBFHELPER + public void b(ReputationType reputationtype) { + this.a.removeInt(reputationtype); + }