Paper/Spigot-Server-Patches/0622-Implement-TargetHitEvent.patch
Josh Roy be13705177
Updated Upstream (CraftBukkit) (#5484)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
6b8cd9a7 SPIGOT-6207: forcibly drop the items of a converted zombie villager
2021-04-12 02:03:08 +01:00

50 lines
2.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: jmp <jasonpenilla2@me.com>
Date: Wed, 25 Nov 2020 23:20:44 -0800
Subject: [PATCH] Implement TargetHitEvent
diff --git a/src/main/java/net/minecraft/world/level/block/BlockTarget.java b/src/main/java/net/minecraft/world/level/block/BlockTarget.java
index c336490815dc17991d3d84d8c6f0fc58571a3e3a..a9316ce8eb3d8a645f4c0e41ac668a90f584c263 100644
--- a/src/main/java/net/minecraft/world/level/block/BlockTarget.java
+++ b/src/main/java/net/minecraft/world/level/block/BlockTarget.java
@@ -1,5 +1,6 @@
package net.minecraft.world.level.block;
+import io.papermc.paper.event.block.TargetHitEvent; // Paper - Need to import because 'io' class exists in nms
import java.util.Random;
import net.minecraft.advancements.CriterionTriggers;
import net.minecraft.core.BlockPosition;
@@ -34,6 +35,10 @@ public class BlockTarget extends Block {
@Override
public void a(World world, IBlockData iblockdata, MovingObjectPositionBlock movingobjectpositionblock, IProjectile iprojectile) {
int i = a((GeneratorAccess) world, iblockdata, movingobjectpositionblock, (Entity) iprojectile);
+ // Paper start
+ }
+ private static void awardTargetHitCriteria(IProjectile iprojectile, MovingObjectPositionBlock movingobjectpositionblock, int i) {
+ // Paper end
Entity entity = iprojectile.getShooter();
if (entity instanceof EntityPlayer) {
@@ -49,6 +54,20 @@ public class BlockTarget extends Block {
int i = a(movingobjectpositionblock, movingobjectpositionblock.getPos());
int j = entity instanceof EntityArrow ? 20 : 8;
+ // Paper start
+ if (entity instanceof IProjectile) {
+ final IProjectile projectile = (IProjectile) entity;
+ final org.bukkit.craftbukkit.block.CraftBlock craftBlock = org.bukkit.craftbukkit.block.CraftBlock.at(generatoraccess, movingobjectpositionblock.getBlockPosition());
+ final org.bukkit.block.BlockFace blockFace = org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(movingobjectpositionblock.getDirection());
+ final TargetHitEvent targetHitEvent = new TargetHitEvent((org.bukkit.entity.Projectile) projectile.getBukkitEntity(), craftBlock, blockFace, i);
+ if (targetHitEvent.callEvent()) {
+ i = targetHitEvent.getSignalStrength();
+ awardTargetHitCriteria(projectile, movingobjectpositionblock, i);
+ } else {
+ return i;
+ }
+ }
+ // Paper end
if (!generatoraccess.getBlockTickList().a(movingobjectpositionblock.getBlockPosition(), iblockdata.getBlock())) {
a(generatoraccess, iblockdata, i, movingobjectpositionblock.getBlockPosition(), j);
}