Files
Purpur/patches/server/0022-Anvil-API.patch
William Blake Galbreath de30a3e5e2 Updated Upstream (Paper & Tuinity)
Upstream has released updates that appears to apply and compile correctly

Paper Changes:
54890033 [Auto] Updated Upstream (CraftBukkit)
f96c6f5c [Auto] Updated Upstream (CraftBukkit)
4be8312f [CI-SKIP] [Auto] Rebuild Patches
43e5174a Fix Entity Teleportation and cancel velocity if teleported (#4210)
0fb3daf4 [Auto] Updated Upstream (CraftBukkit)
819ff324 Use wrapped StructureManager to prevent worldgen deadlock
507f302c Fix Zombie ShouldBurnInDay API (#4268)
ef5af6f6 [Auto] Updated Upstream (CraftBukkit)
101b0110 [Auto] Updated Upstream (Bukkit/CraftBukkit)
03689cf9 Fix javadoc (#4276)
c247857f Cache block data strings
ce2eae5c [Auto] Updated Upstream (Bukkit/CraftBukkit)
563f77ad install remapped server jar to paper package space
1ab021dd Updated Upstream (Bukkit/CraftBukkit)
c970f880 Properly pass the close reason for new inventory opens (#2658) (#4247)
07bca94f Create HoverEvent from ItemStack Entity
da33f8bb Add a way to get translation keys for blocks, entities and materials
5a20cbd7 Add more Evoker API
7a3e2520 [Auto] Updated Upstream (CraftBukkit)
b0cbebdc Fix build conflicts
dfc54a8b Add zombie targets turtle egg config (#4181)
0fe00f61 Add BellRingEvent for village bells (#2230)
414e5e1d fix #4144 (#4170)
5c7f3fc0 Fix PersistentDataContainer contract violation (_->!null returns null) (#3990)
65dbf5ff [CI-SKIP] [Auto] Rebuild Patches
7ed0f7f0 Fix NPE in getBedSpawnLocation (#4238)
9e0f1101 [CI-SKIP] Add issue template
6c138412 Fix CraftTeam null check (#4249)
32e45448 Update Paperclip
b84a37b7 Update Armor items in PlayerArmorChangeEvent (#4243)
a67abf5b Increase visibility of a few methods
7d69214b [Auto] Updated Upstream (CraftBukkit)
cbfc2362 PortalCreateEvent needs to know its entity
29032edb Fix PersistentDataContainer contract violation (_->!null returns null)
f42c53df [CI-SKIP] [Auto] Rebuild Patches
3efe45f5 Port Eigencraft to 1.16
0bad6958 Make engine-mode 2 truly random
cd06ca5e Updated Upstream (CraftBukkit)
ef36b4f8 Fix TNT not pushing creative players
915fe522 Fix hex colors not working in some kick messages
f5904171 [Auto] Updated Upstream (Bukkit/CraftBukkit)
757948dc [Auto] Updated Upstream (CraftBukkit)
0893de14 Fix reading the brand message from clients
243d2313 Updated Upstream (Bukkit/CraftBukkit)
4cc7de6c Add playPickupItemAnimation to LivingEntity
20fc1b5c [Auto] Updated Upstream (CraftBukkit/Spigot)
655258b3 [Auto] Updated Upstream (CraftBukkit)
167b1db6 Fix some modded clients getting kicked for invalid payload - Fixes #4201
7f0786cd Fix enderdragon tracking range to honor vanilla
586073c3 [CI-SKIP] Update README.md (for 1.16.2) (#4202)
853f4168 Remove debug
4d7ea429 fix config option in last commit
74d27463 Buffer joins to world
ac96307b [CI-SKIP] switch back to trusty now we figured out the issue
c97ce029 1.16.2 Release (#4123)
5486b3db Fix javadocs failing jenkins builds (#4189)
1330eb5f Brand support
b8372fc0 Improve handling of indestructable blocks
a2a06640 Add moon phase API
47f71aea Fix SpawnChangeEvent not firing for all use-cases
b6c860f2 Don't require FACING data
0c1716a1 Add #setMaxPlayers API
02aed275 [CI-SKIP] Require dependencies script (#4172)
1ccc1c67 Add smithing item helpers
627f4b85 Brand support
20d9ec6b Fix MC-197271
e9287056 [CI-SKIP] Update issue templates with notices
dccaf59a MC-197883: Bandaid decode issue
99a1e58f Merge branch 'master' into progress/1.16.2
ecbc5ca0 Updated Upstream (CraftBukkit)
99362d3c Decomp fix
5f9861a0 Fix MC-197883 by specifying the typeKey
1d8c9c23 [CI-SKIP] Make checkoutpr.sh use $SHELL (#4167)
2b1ca210 update checkout-pr to latest I use
95c9b45d Fix IDE Debug JVM Flag 2 (#4141)
9e6d742c Merge remote-tracking branch 'origin/master' into progress/1.16.2
c8542f23 Fix MC-99259 Wither Boss Bar doesn't update until invulnerability period is over (#4164)
862b8c18 Updated Upstream (Bukkit/CraftBukkit)
100d51eb Do not obfuscate air (#4149)
47740f67 Updated Upstream (CraftBukkit)
948c20e0 Merge remote-tracking branch 'origin/master' into progress/1.16.2
1daafe45 Updated Upstream (Bukkit/CraftBukkit)
98828b00 Merge pull request #4132 from Proximyst/progress/1.16.2
b23f27f8  Fix incorrect return for WorldServer#addAllEntitiesSafely (#3)
5085fa30 Fix MC-187716 Use configured height
c44add5a Initialise a new chunk section if none was found yet updated
74a4d5f8 Remove armour stand double add to world
6d25cc4e Don't mark null chunk sections for block updates
1ba2f214 Updated Upstream (Bukkit/CraftBukkit)
d29d5aaa Fix anti xray
ce6bbaa4 Import fastutil classes patch
9d4616a4 Updated Upstream (Bukkit/CraftBukkit)
109d072b Fix test, add strider mob goal and fix piglin goals
e6caaa20 Fix running; forgot to push this
ee7dce8b Add this to SHIT_TO_CHECK.md aswell
d378257c Fix IDE debug JVM flag for 1.16.2
0d8db446 Merge pull request #4112 from BillyGalbreath/progress/1.16.2
d319d8c4 It compiles!
8f8371c5 Add an OBFHELPER
9caa8e9f missed this
3ce5a5d7 volatile
159eb2e1 Oopsies
7eb08d2f Almost ready
7ca11e97 Current progress on 1.16.2

Tuinity Changes:
eaa6b50 Fix missing block property portal crash
fea5fbd Retain vanilla behavior for error correction rules in collisions
9eb1a3e Do not add a delayed unload ticket for some ticket types
2020-09-09 07:05:20 -05:00

134 lines
6.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sun, 19 Apr 2020 00:17:56 -0500
Subject: [PATCH] Anvil API
diff --git a/src/main/java/net/minecraft/server/ContainerAnvil.java b/src/main/java/net/minecraft/server/ContainerAnvil.java
index fc2038df8..4aa6b035a 100644
--- a/src/main/java/net/minecraft/server/ContainerAnvil.java
+++ b/src/main/java/net/minecraft/server/ContainerAnvil.java
@@ -20,6 +20,8 @@ public class ContainerAnvil extends ContainerAnvilAbstract {
public int maximumRepairCost = 40;
private CraftInventoryView bukkitEntity;
// CraftBukkit end
+ public boolean bypassCost = false; // Purpur
+ public boolean canDoUnsafeEnchants = false; // Purpur
public ContainerAnvil(int i, PlayerInventory playerinventory) {
this(i, playerinventory, ContainerAccess.a);
@@ -38,12 +40,14 @@ public class ContainerAnvil extends ContainerAnvilAbstract {
@Override
protected boolean b(EntityHuman entityhuman, boolean flag) {
- return (entityhuman.abilities.canInstantlyBuild || entityhuman.expLevel >= this.levelCost.get()) && this.levelCost.get() > 0;
+ return (entityhuman.abilities.canInstantlyBuild || entityhuman.expLevel >= this.levelCost.get()) && (bypassCost || this.levelCost.get() > 0); // Purpur
}
@Override
protected ItemStack a(EntityHuman entityhuman, ItemStack itemstack) {
+ if (net.pl3x.purpur.event.inventory.AnvilTakeResultEvent.getHandlerList().getRegisteredListeners().length > 0) new net.pl3x.purpur.event.inventory.AnvilTakeResultEvent(entityhuman.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack)).callEvent(); // Purpur
if (!entityhuman.abilities.canInstantlyBuild) {
+ if (bypassCost) ((EntityPlayer) entityhuman).lastSentExp = -1; else // Purpur
entityhuman.levelDown(-this.levelCost.get());
}
@@ -94,6 +98,12 @@ public class ContainerAnvil extends ContainerAnvilAbstract {
@Override
public void e() {
+ // Purpur start
+ bypassCost = false;
+ canDoUnsafeEnchants = false;
+ if (net.pl3x.purpur.event.inventory.AnvilUpdateResultEvent.getHandlerList().getRegisteredListeners().length > 0) new net.pl3x.purpur.event.inventory.AnvilUpdateResultEvent(getBukkitView()).callEvent();
+ // Purpur end
+
ItemStack itemstack = this.repairInventory.getItem(0);
this.levelCost.set(1);
@@ -170,7 +180,7 @@ public class ContainerAnvil extends ContainerAnvilAbstract {
int i2 = (Integer) map1.get(enchantment);
i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1);
- boolean flag3 = enchantment.canEnchant(itemstack);
+ boolean flag3 = canDoUnsafeEnchants || enchantment.canEnchant(itemstack); // Purpur
if (this.player.abilities.canInstantlyBuild || itemstack.getItem() == Items.ENCHANTED_BOOK) {
flag3 = true;
@@ -182,7 +192,7 @@ public class ContainerAnvil extends ContainerAnvilAbstract {
Enchantment enchantment1 = (Enchantment) iterator1.next();
if (enchantment1 != enchantment && !enchantment.isCompatible(enchantment1)) {
- flag3 = false;
+ flag3 = canDoUnsafeEnchants; // Purpur
++i;
}
}
@@ -253,6 +263,13 @@ public class ContainerAnvil extends ContainerAnvilAbstract {
this.levelCost.set(maximumRepairCost - 1); // CraftBukkit
}
+ // Purpur start
+ if (bypassCost && levelCost.get() >= maximumRepairCost) {
+ itemstack.getOrCreateTagAndSet("Purpur.realCost", NBTTagInt.a(levelCost.get()));
+ levelCost.set(maximumRepairCost - 1);
+ }
+ // Purpur end
+
if (this.levelCost.get() >= maximumRepairCost && !this.player.abilities.canInstantlyBuild) { // CraftBukkit
itemstack1 = ItemStack.b;
}
@@ -274,6 +291,12 @@ public class ContainerAnvil extends ContainerAnvilAbstract {
org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(getBukkitView(), itemstack1); // CraftBukkit
this.c();
+ // Purpur start
+ if (canDoUnsafeEnchants && itemstack1 != ItemStack.NULL_ITEM) {
+ ((EntityPlayer) player).playerConnection.sendPacket(new PacketPlayOutSetSlot(windowId, 2, itemstack1));
+ ((EntityPlayer) player).playerConnection.sendPacket(new PacketPlayOutWindowData(windowId, 0, levelCost.get()));
+ }
+ // Purpur end
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
index 9374c2706..d45f356be 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
@@ -9,7 +9,7 @@ import org.bukkit.inventory.AnvilInventory;
public class CraftInventoryAnvil extends CraftResultInventory implements AnvilInventory {
private final Location location;
- private final ContainerAnvil container;
+ public final ContainerAnvil container; // Purpur - private -> public
public CraftInventoryAnvil(Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
super(inventory, resultInventory);
@@ -47,4 +47,26 @@ public class CraftInventoryAnvil extends CraftResultInventory implements AnvilIn
Preconditions.checkArgument(levels >= 0, "Maximum repair cost must be positive (or 0)");
container.maximumRepairCost = levels;
}
+
+ // Purpur start
+ @Override
+ public boolean canBypassCost() {
+ return container.bypassCost;
+ }
+
+ @Override
+ public void setBypassCost(boolean bypassCost) {
+ container.bypassCost = bypassCost;
+ }
+
+ @Override
+ public boolean canDoUnsafeEnchants() {
+ return container.canDoUnsafeEnchants;
+ }
+
+ @Override
+ public void setDoUnsafeEnchants(boolean canDoUnsafeEnchants) {
+ container.canDoUnsafeEnchants = canDoUnsafeEnchants;
+ }
+ // Purpur end
}