From 4e03b8f7b0604cf97fd09dd528b1b000d41d8145 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 24 Aug 2021 16:49:11 -0500 Subject: [PATCH] Shift right click to use exp for mending --- ...t-right-click-to-use-exp-for-mending.patch | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 patches/server/0257-Shift-right-click-to-use-exp-for-mending.patch diff --git a/patches/server/0257-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0257-Shift-right-click-to-use-exp-for-mending.patch new file mode 100644 index 0000000000..010daf7b0c --- /dev/null +++ b/patches/server/0257-Shift-right-click-to-use-exp-for-mending.patch @@ -0,0 +1,69 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Tue, 24 Aug 2021 16:48:35 -0500 +Subject: [PATCH] Shift right click to use exp for mending + + +diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +index 38323c95dc36e5ead294670ce120114492de37d5..a4410485d8b1b8bfbbd72240f078ed5e3af0d0de 100644 +--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java ++++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +@@ -526,6 +526,7 @@ public class ServerPlayerGameMode { + public InteractionHand interactHand; + public ItemStack interactItemStack; + public InteractionResult useItemOn(ServerPlayer player, Level world, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) { ++ if (shiftClickMended(stack)) return InteractionResult.SUCCESS; // Purpur + BlockPos blockposition = hitResult.getBlockPos(); + BlockState iblockdata = world.getBlockState(blockposition); + InteractionResult enuminteractionresult = InteractionResult.PASS; +@@ -619,4 +620,18 @@ public class ServerPlayerGameMode { + public void setLevel(ServerLevel world) { + this.level = world; + } ++ ++ // Purpur start ++ public boolean shiftClickMended(ItemStack itemstack) { ++ if (this.player.level.purpurConfig.shiftRightClickRepairsMendingPoints > 0 && this.player.isShiftKeyDown()) { ++ int points = Math.min(this.player.totalExperience, this.player.level.purpurConfig.shiftRightClickRepairsMendingPoints); ++ if (points > 0 && itemstack.isDamaged() && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.MENDING, itemstack) > 0) { ++ this.player.giveExperiencePoints(-points); ++ this.player.level.addFreshEntity(new net.minecraft.world.entity.ExperienceOrb(this.player.level, this.player.getX(), this.player.getY(), this.player.getZ(), points, org.bukkit.entity.ExperienceOrb.SpawnReason.UNKNOWN, this.player, this.player)); ++ return true; ++ } ++ } ++ return false; ++ } ++ // Purpur end + } +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 43d124818c4538bc0d84111dfab25c38aab249c1..67433627b69b81b5ddaa24600ab87de8999d962e 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -1902,6 +1902,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser + + boolean cancelled; + if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { ++ if (this.player.gameMode.shiftClickMended(itemstack)) return; // Purpur + org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemstack, enumhand); + cancelled = event.useItemInHand() == Event.Result.DENY; + } else { +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 5c8422a3022f2ac8723450b7566b9ac9a823931a..258bd55eb334d1e841e7ecbf77da985f5b7278c4 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -359,6 +359,7 @@ public class PurpurWorldConfig { + public boolean playerArmorSwappingCreativeMakesCopy = true; + public boolean playerRidableInWater = false; + public boolean playerRemoveBindingWithWeakness = false; ++ public int shiftRightClickRepairsMendingPoints = 0; + private void playerSettings() { + if (PurpurConfig.version < 19) { + boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); +@@ -386,6 +387,7 @@ public class PurpurWorldConfig { + playerArmorSwappingCreativeMakesCopy = getBoolean("gameplay-mechanics.player.armor-click-equip.creative-makes-copy", playerArmorSwappingCreativeMakesCopy); + playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); + playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); ++ shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints); + } + + public int snowballDamage = -1;