geforkt von Mirrors/Paper
997190c3e0
This method will return the Block a player is looking at while taking into consideration the AABB of each block in the path. For example, you can look through the 1/4 space of air in a Stair block and get the block behind it instead of the Stair block you are looking past.
148 Zeilen
5.1 KiB
Diff
148 Zeilen
5.1 KiB
Diff
From 4619e236e860ee87fe96b25a8f0240ab16cfe797 Mon Sep 17 00:00:00 2001
|
|
From: BillyGalbreath <Blake.Galbreath@GMail.com>
|
|
Date: Mon, 3 Sep 2018 18:13:53 -0500
|
|
Subject: [PATCH] Add ray tracing methods to LivingEntity
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/block/TargetBlockInfo.java b/src/main/java/com/destroystokyo/paper/block/TargetBlockInfo.java
|
|
new file mode 100644
|
|
index 00000000..fe43d955
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/block/TargetBlockInfo.java
|
|
@@ -0,0 +1,50 @@
|
|
+package com.destroystokyo.paper.block;
|
|
+
|
|
+import org.bukkit.block.Block;
|
|
+import org.bukkit.block.BlockFace;
|
|
+
|
|
+/**
|
|
+ * Represents information about a targeted block
|
|
+ */
|
|
+public class TargetBlockInfo {
|
|
+ private final Block block;
|
|
+ private final BlockFace blockFace;
|
|
+
|
|
+ public TargetBlockInfo(Block block, BlockFace blockFace) {
|
|
+ this.block = block;
|
|
+ this.blockFace = blockFace;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Get the block that is targeted
|
|
+ *
|
|
+ * @return Targeted block
|
|
+ */
|
|
+ public Block getBlock() {
|
|
+ return block;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Get the targeted BlockFace
|
|
+ *
|
|
+ * @return Targeted blockface
|
|
+ */
|
|
+ public BlockFace getBlockFace() {
|
|
+ return blockFace;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Get the relative Block to the targeted block on the side it is targeted at
|
|
+ *
|
|
+ * @return Block relative to targeted block
|
|
+ */
|
|
+ public Block getRelativeBlock() {
|
|
+ return block.getRelative(blockFace);
|
|
+ }
|
|
+
|
|
+ public enum FluidMode {
|
|
+ NEVER,
|
|
+ SOURCE_ONLY,
|
|
+ ALWAYS
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
|
|
index ac5bd8a5..62e45eda 100644
|
|
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
|
|
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
|
|
@@ -71,6 +71,77 @@ public interface LivingEntity extends Attributable, Entity, Damageable, Projecti
|
|
*/
|
|
public Block getTargetBlock(Set<Material> transparent, int maxDistance);
|
|
|
|
+ // Paper start
|
|
+ /**
|
|
+ * Gets the block that the living entity has targeted, ignoring fluids
|
|
+ *
|
|
+ * @param maxDistance this is the maximum distance to scan
|
|
+ * @return block that the living entity has targeted,
|
|
+ * or null if no block is within maxDistance
|
|
+ */
|
|
+ @Nullable
|
|
+ public default Block getTargetBlock(int maxDistance) {
|
|
+ return getTargetBlock(maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode.NEVER);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the block that the living entity has targeted
|
|
+ *
|
|
+ * @param maxDistance this is the maximum distance to scan
|
|
+ * @param fluidMode whether to check fluids or not
|
|
+ * @return block that the living entity has targeted,
|
|
+ * or null if no block is within maxDistance
|
|
+ */
|
|
+ @Nullable
|
|
+ public Block getTargetBlock(int maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode fluidMode);
|
|
+
|
|
+ /**
|
|
+ * Gets the blockface of that block that the living entity has targeted, ignoring fluids
|
|
+ *
|
|
+ * @param maxDistance this is the maximum distance to scan
|
|
+ * @return blockface of the block that the living entity has targeted,
|
|
+ * or null if no block is targeted
|
|
+ */
|
|
+ @Nullable
|
|
+ public default org.bukkit.block.BlockFace getTargetBlockFace(int maxDistance) {
|
|
+ return getTargetBlockFace(maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode.NEVER);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the blockface of that block that the living entity has targeted
|
|
+ *
|
|
+ * @param maxDistance this is the maximum distance to scan
|
|
+ * @param fluidMode whether to check fluids or not
|
|
+ * @return blockface of the block that the living entity has targeted,
|
|
+ * or null if no block is targeted
|
|
+ */
|
|
+ @Nullable
|
|
+ public org.bukkit.block.BlockFace getTargetBlockFace(int maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode fluidMode);
|
|
+
|
|
+ /**
|
|
+ * Gets information about the block the living entity has targeted, ignoring fluids
|
|
+ *
|
|
+ * @param maxDistance this is the maximum distance to scan
|
|
+ * @return TargetBlockInfo about the block the living entity has targeted,
|
|
+ * or null if no block is targeted
|
|
+ */
|
|
+ @Nullable
|
|
+ public default com.destroystokyo.paper.block.TargetBlockInfo getTargetBlockInfo(int maxDistance) {
|
|
+ return getTargetBlockInfo(maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode.NEVER);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets information about the block the living entity has targeted
|
|
+ *
|
|
+ * @param maxDistance this is the maximum distance to scan
|
|
+ * @param fluidMode whether to check fluids or not
|
|
+ * @return TargetBlockInfo about the block the living entity has targeted,
|
|
+ * or null if no block is targeted
|
|
+ */
|
|
+ @Nullable
|
|
+ public com.destroystokyo.paper.block.TargetBlockInfo getTargetBlockInfo(int maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode fluidMode);
|
|
+ // Paper end
|
|
+
|
|
/**
|
|
* Gets the last two blocks along the living entity's line of sight.
|
|
* <p>
|
|
--
|
|
2.18.0
|
|
|