Paper/Spigot-Server-Patches/0623-Implement-TargetHitEvent.patch
Shane Freeder e886d8118e
Updated Upstream ()
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
2021-02-06 00:00:18 +00:00

50 Zeilen
2.6 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/server/BlockTarget.java b/src/main/java/net/minecraft/server/BlockTarget.java
index 23b298577d8a60ca241abc228732f66ebbe7a7b1..642d7c14bc404d94c8a4f551b984fe235a3816eb 100644
--- a/src/main/java/net/minecraft/server/BlockTarget.java
+++ b/src/main/java/net/minecraft/server/BlockTarget.java
@@ -1,5 +1,6 @@
package net.minecraft.server;
+import io.papermc.paper.event.block.TargetHitEvent; // Paper - Need to import because 'io' class exists in nms
import java.util.Random;
public class BlockTarget extends Block {
@@ -14,6 +15,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) {
@@ -29,6 +34,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);
}