mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Fix shift click result in anvil/grindstone take result event
This commit is contained in:
@@ -4,8 +4,20 @@ Date: Sun, 19 Apr 2020 00:17:56 -0500
|
||||
Subject: [PATCH] Anvil API
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||
index 79d8bcf3f9b0fe4a65ad7899f858efefac6feaa7..79770da8a1e4ca3f5c531fd040626b90124aeb66 100644
|
||||
--- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||
+++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||
@@ -75,6 +75,7 @@ public abstract class AbstractContainerMenu {
|
||||
@Nullable
|
||||
private ContainerSynchronizer synchronizer;
|
||||
private boolean suppressRemoteUpdates;
|
||||
+ @javax.annotation.Nullable protected ItemStack activeQuickItem = null; // Purpur
|
||||
|
||||
// CraftBukkit start
|
||||
public boolean checkReachable = true;
|
||||
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbffc6758c3 100644
|
||||
index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e95eddd77 100644
|
||||
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
@@ -21,6 +21,13 @@ import org.slf4j.Logger;
|
||||
@@ -31,7 +43,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
|
||||
|
||||
public AnvilMenu(int syncId, Inventory inventory) {
|
||||
this(syncId, inventory, ContainerLevelAccess.NULL);
|
||||
@@ -59,12 +68,14 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -59,12 +68,15 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
|
||||
@Override
|
||||
protected boolean mayPickup(Player player, boolean present) {
|
||||
@@ -41,13 +53,14 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
|
||||
|
||||
@Override
|
||||
protected void onTake(Player player, ItemStack stack) {
|
||||
+ if (org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent.getHandlerList().getRegisteredListeners().length > 0) new org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack)).callEvent(); // Purpur
|
||||
+ ItemStack itemstack = activeQuickItem == null ? stack : activeQuickItem; // Purpur
|
||||
+ if (org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent.getHandlerList().getRegisteredListeners().length > 0) new org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack)).callEvent(); // Purpur
|
||||
if (!player.getAbilities().instabuild) {
|
||||
+ if (bypassCost) ((ServerPlayer) player).lastSentExp = -1; else // Purpur
|
||||
player.giveExperienceLevels(-this.cost.get());
|
||||
}
|
||||
|
||||
@@ -115,6 +126,12 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -115,6 +127,12 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
|
||||
@Override
|
||||
public void createResult() {
|
||||
@@ -60,7 +73,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
|
||||
ItemStack itemstack = this.inputSlots.getItem(0);
|
||||
|
||||
this.cost.set(1);
|
||||
@@ -191,7 +208,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -191,7 +209,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
int i2 = (Integer) map1.get(enchantment);
|
||||
|
||||
i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1);
|
||||
@@ -69,7 +82,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
|
||||
|
||||
if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) {
|
||||
flag3 = true;
|
||||
@@ -203,7 +220,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -203,7 +221,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
Enchantment enchantment1 = (Enchantment) iterator1.next();
|
||||
|
||||
if (enchantment1 != enchantment && !enchantment.isCompatibleWith(enchantment1)) {
|
||||
@@ -78,7 +91,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
|
||||
++i;
|
||||
}
|
||||
}
|
||||
@@ -274,6 +291,13 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -274,6 +292,13 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
this.cost.set(this.maximumRepairCost - 1); // CraftBukkit
|
||||
}
|
||||
|
||||
@@ -92,7 +105,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
|
||||
if (this.cost.get() >= this.maximumRepairCost && !this.player.getAbilities().instabuild) { // CraftBukkit
|
||||
itemstack1 = ItemStack.EMPTY;
|
||||
}
|
||||
@@ -296,6 +320,12 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -296,6 +321,12 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), itemstack1); // CraftBukkit
|
||||
sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client
|
||||
this.broadcastChanges();
|
||||
@@ -105,6 +118,20 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
|
||||
index 35575434f3c90f1bd23df6584ee8a5a991f93f9f..297f829275a0cdfdd8e9214dfa78a91a7471cc9f 100644
|
||||
--- a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
|
||||
+++ b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
|
||||
@@ -140,7 +140,9 @@ public abstract class ItemCombinerMenu extends AbstractContainerMenu {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
+ this.activeQuickItem = itemstack; // Purpur
|
||||
slot.onTake(player, itemstack1);
|
||||
+ this.activeQuickItem = null; // Purpur
|
||||
}
|
||||
|
||||
return itemstack;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
|
||||
index 88d3ca586ff6905f18a8ab9f0e229f440ed44088..27dd4eb4781a3c75772860c11db886e1038cecd2 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow anvil colors
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
index c1ed57bae737fca803c2dd8666207dbffc6758c3..10cd589e427f847936f29e33edee3923a4661210 100644
|
||||
index 0363d2263b2d6bd6166fa21d7849297e95eddd77..800df3b7c04ce7ed52f265d681e7752f63ae4ec7 100644
|
||||
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
@@ -279,6 +279,17 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -280,6 +280,17 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
} else if (!this.itemName.equals(itemstack.getHoverName().getString())) {
|
||||
b1 = 1;
|
||||
i += b1;
|
||||
|
||||
@@ -27,10 +27,10 @@ index 7c012f1e37b0085c0939797b0dae8996b4953ab8..155b0a1aa58b891e98a55e10f112f611
|
||||
++i;
|
||||
} else if (targets.size() == 1) {
|
||||
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
index 10cd589e427f847936f29e33edee3923a4661210..a68dcf3ad04ef9c8e69a0d81eacfe50644463270 100644
|
||||
index 800df3b7c04ce7ed52f265d681e7752f63ae4ec7..c01faa0d2900230a323c7e1f41093c691fb394aa 100644
|
||||
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
@@ -208,7 +208,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -209,7 +209,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
int i2 = (Integer) map1.get(enchantment);
|
||||
|
||||
i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1);
|
||||
@@ -39,7 +39,7 @@ index 10cd589e427f847936f29e33edee3923a4661210..a68dcf3ad04ef9c8e69a0d81eacfe506
|
||||
|
||||
if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) {
|
||||
flag3 = true;
|
||||
@@ -220,7 +220,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -221,7 +221,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
Enchantment enchantment1 = (Enchantment) iterator1.next();
|
||||
|
||||
if (enchantment1 != enchantment && !enchantment.isCompatibleWith(enchantment1)) {
|
||||
@@ -48,7 +48,7 @@ index 10cd589e427f847936f29e33edee3923a4661210..a68dcf3ad04ef9c8e69a0d81eacfe506
|
||||
++i;
|
||||
}
|
||||
}
|
||||
@@ -229,7 +229,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -230,7 +230,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
flag2 = true;
|
||||
} else {
|
||||
flag1 = true;
|
||||
@@ -57,7 +57,7 @@ index 10cd589e427f847936f29e33edee3923a4661210..a68dcf3ad04ef9c8e69a0d81eacfe506
|
||||
i2 = enchantment.getMaxLevel();
|
||||
}
|
||||
|
||||
@@ -332,7 +332,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -333,7 +333,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client
|
||||
this.broadcastChanges();
|
||||
// Purpur start
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Make anvil cumulative cost configurable
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
index 46fc3f504828e402dda50791d6867cb595de766b..308bf5525775ab097dddc164e8a08122d571dc1e 100644
|
||||
index c01faa0d2900230a323c7e1f41093c691fb394aa..0587d845531376676e38d43eadb016f5931a7fd0 100644
|
||||
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
||||
@@ -341,7 +341,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
@@ -342,7 +342,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
||||
}
|
||||
|
||||
public static int calculateIncreasedRepairCost(int cost) {
|
||||
@@ -18,7 +18,7 @@ index 46fc3f504828e402dda50791d6867cb595de766b..308bf5525775ab097dddc164e8a08122
|
||||
|
||||
public void setItemName(String newItemName) {
|
||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||
index 8cd0f1ce58694922d186b483f16ccc45ebd8858d..d98f82fa5270c469526457d3b91413a8d9f35036 100644
|
||||
index 1463c422b4d3f94c58b6316da37a9af4b451f45e..d9ee324b4a7e903feeca1a31eb8cbd8317f76bef 100644
|
||||
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||
@@ -262,6 +262,7 @@ public class PurpurConfig {
|
||||
|
||||
@@ -5,17 +5,29 @@ Subject: [PATCH] Grindstone API
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
|
||||
index 36a6db1752fbde0e071af0da8c212c5c834b5b2e..f22dadd89a5f0e4171e3c6b9d9b87d1ca958b0df 100644
|
||||
index 36a6db1752fbde0e071af0da8c212c5c834b5b2e..43d7ca6ceb89d65149314e56a846081d6c3a048a 100644
|
||||
--- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
|
||||
+++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
|
||||
@@ -96,8 +96,9 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
||||
@@ -95,9 +95,11 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
||||
|
||||
@Override
|
||||
public void onTake(net.minecraft.world.entity.player.Player player, ItemStack stack) {
|
||||
+ ItemStack itemstack = activeQuickItem == null ? stack : activeQuickItem; // Purpur
|
||||
context.execute((world, blockposition) -> {
|
||||
+ org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent grindstoneTakeResultEvent = new org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), this.getExperienceAmount(world)); grindstoneTakeResultEvent.callEvent(); // Purpur
|
||||
+ org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent grindstoneTakeResultEvent = new org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), this.getExperienceAmount(world)); grindstoneTakeResultEvent.callEvent(); // Purpur
|
||||
if (world instanceof ServerLevel) {
|
||||
- ExperienceOrb.award((ServerLevel) world, Vec3.atCenterOf(blockposition), this.getExperienceAmount(world), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player); // Paper
|
||||
+ ExperienceOrb.award((ServerLevel) world, Vec3.atCenterOf(blockposition), grindstoneTakeResultEvent.getExperienceAmount(), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player); // Paper // Purpur
|
||||
}
|
||||
|
||||
world.levelEvent(1042, blockposition, 0);
|
||||
@@ -342,7 +344,9 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
+ this.activeQuickItem = itemstack; // Purpur
|
||||
slot.onTake(player, itemstack1);
|
||||
+ this.activeQuickItem = null; // Purpur
|
||||
}
|
||||
|
||||
return itemstack;
|
||||
|
||||
Reference in New Issue
Block a user