89d51d5f29
Because this exploit has been widely known for years and has not been fixed by Mojang, we decided that it was worth allowing people to toggle it on/off due to how easy it is to make it configurable. It should be noted that this decision does not promise all future exploits will be configurable.
56 Zeilen
3.8 KiB
Diff
56 Zeilen
3.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: JRoy <joshroy126@gmail.com>
|
|
Date: Fri, 5 Jun 2020 18:24:06 -0400
|
|
Subject: [PATCH] Add PlayerRecipeBookClickEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index 2eeeb1f1b07db439a68d70c55192aa9fb54f620c..80b6871516c45291f63b1ae521dcdf34199fd9b4 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -2966,16 +2966,40 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
|
if (!this.player.containerMenu.stillValid(this.player)) {
|
|
ServerGamePacketListenerImpl.LOGGER.debug("Player {} interacted with invalid menu {}", this.player, this.player.containerMenu);
|
|
} else {
|
|
+ // Paper start - Add PlayerRecipeBookClickEvent
|
|
+ ResourceLocation recipeName = packet.getRecipe();
|
|
+ boolean makeAll = packet.isShiftDown();
|
|
+ com.destroystokyo.paper.event.player.PlayerRecipeBookClickEvent paperEvent = new com.destroystokyo.paper.event.player.PlayerRecipeBookClickEvent(
|
|
+ this.player.getBukkitEntity(), org.bukkit.craftbukkit.util.CraftNamespacedKey.fromMinecraft(recipeName), makeAll
|
|
+ );
|
|
+ if (!paperEvent.callEvent()) {
|
|
+ return;
|
|
+ }
|
|
+ recipeName = CraftNamespacedKey.toMinecraft(paperEvent.getRecipe());
|
|
+ makeAll = paperEvent.isMakeAll();
|
|
+ if (org.bukkit.event.player.PlayerRecipeBookClickEvent.getHandlerList().getRegisteredListeners().length > 0) {
|
|
+ // Paper end - Add PlayerRecipeBookClickEvent
|
|
// CraftBukkit start - implement PlayerRecipeBookClickEvent
|
|
- org.bukkit.inventory.Recipe recipe = this.cserver.getRecipe(CraftNamespacedKey.fromMinecraft(packet.getRecipe()));
|
|
+ org.bukkit.inventory.Recipe recipe = this.cserver.getRecipe(CraftNamespacedKey.fromMinecraft(recipeName)); // Paper
|
|
if (recipe == null) {
|
|
return;
|
|
}
|
|
- org.bukkit.event.player.PlayerRecipeBookClickEvent event = CraftEventFactory.callRecipeBookClickEvent(this.player, recipe, packet.isShiftDown());
|
|
+ // Paper start - Add PlayerRecipeBookClickEvent
|
|
+ org.bukkit.event.player.PlayerRecipeBookClickEvent event = CraftEventFactory.callRecipeBookClickEvent(this.player, recipe, makeAll);
|
|
+ recipeName = CraftNamespacedKey.toMinecraft(((org.bukkit.Keyed) event.getRecipe()).getKey());
|
|
+ makeAll = event.isShiftClick();
|
|
+ }
|
|
+ if (!(this.player.containerMenu instanceof RecipeBookMenu<?> recipeBookMenu)) {
|
|
+ return;
|
|
+ }
|
|
+ // Paper end - Add PlayerRecipeBookClickEvent
|
|
|
|
// Cast to keyed should be safe as the recipe will never be a MerchantRecipe.
|
|
- this.server.getRecipeManager().byKey(CraftNamespacedKey.toMinecraft(((org.bukkit.Keyed) event.getRecipe()).getKey())).ifPresent((recipeholder) -> {
|
|
- ((RecipeBookMenu) this.player.containerMenu).handlePlacement(event.isShiftClick(), recipeholder, this.player);
|
|
+ // Paper start - Add PlayerRecipeBookClickEvent
|
|
+ final boolean finalMakeAll = makeAll;
|
|
+ this.server.getRecipeManager().byKey(recipeName).ifPresent((recipeholder) -> {
|
|
+ recipeBookMenu.handlePlacement(finalMakeAll, recipeholder, this.player);
|
|
+ // Paper end - Add PlayerRecipeBookClickEvent
|
|
});
|
|
// CraftBukkit end
|
|
}
|