mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-02 04:56:50 +01:00
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.
44 lines
2.8 KiB
Diff
44 lines
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: JRoy <joshroy126@gmail.com>
|
|
Date: Wed, 7 Oct 2020 12:04:01 -0400
|
|
Subject: [PATCH] Add EntityLoadCrossbowEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
index ba570f1c9654e1004e068a1efe2118f36c954505..f3a428f80c265639250114498b10067b4bf1ada1 100644
|
|
--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
+++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
|
@@ -89,7 +89,14 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
int j = this.getUseDuration(stack) - remainingUseTicks;
|
|
float f = CrossbowItem.getPowerForTime(j, stack);
|
|
|
|
- if (f >= 1.0F && !CrossbowItem.isCharged(stack) && CrossbowItem.tryLoadProjectiles(user, stack)) {
|
|
+ // Paper start - Add EntityLoadCrossbowEvent
|
|
+ if (f >= 1.0F && !CrossbowItem.isCharged(stack) /*&& CrossbowItem.tryLoadProjectiles(entityliving, itemstack)*/) {
|
|
+ final io.papermc.paper.event.entity.EntityLoadCrossbowEvent event = new io.papermc.paper.event.entity.EntityLoadCrossbowEvent(user.getBukkitLivingEntity(), stack.asBukkitMirror(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(user.getUsedItemHand()));
|
|
+ if (!event.callEvent() || !tryLoadProjectiles(user, stack, event.shouldConsumeItem())) {
|
|
+ if (user instanceof ServerPlayer player) player.containerMenu.sendAllDataToRemote();
|
|
+ return;
|
|
+ }
|
|
+ // Paper end - Add EntityLoadCrossbowEvent
|
|
CrossbowItem.setCharged(stack, true);
|
|
SoundSource soundcategory = user instanceof Player ? SoundSource.PLAYERS : SoundSource.HOSTILE;
|
|
|
|
@@ -98,10 +105,16 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
|
|
|
}
|
|
|
|
+ @io.papermc.paper.annotation.DoNotUse // Paper - Add EntityLoadCrossbowEvent
|
|
private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack crossbow) {
|
|
+ // Paper start - Add EntityLoadCrossbowEvent
|
|
+ return CrossbowItem.tryLoadProjectiles(shooter, crossbow, true);
|
|
+ }
|
|
+ private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack crossbow, boolean consume) {
|
|
+ // Paper end - Add EntityLoadCrossbowEvent
|
|
int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, crossbow);
|
|
int j = i == 0 ? 1 : 3;
|
|
- boolean flag = shooter instanceof Player && ((Player) shooter).getAbilities().instabuild;
|
|
+ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - Add EntityLoadCrossbowEvent
|
|
ItemStack itemstack1 = shooter.getProjectile(crossbow);
|
|
ItemStack itemstack2 = itemstack1.copy();
|
|
|