149 lines
		
	
	
	
		
			5.3 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
	
		
			5.3 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 
								 | 
							
								From 0000000000000000000000000000000000000000 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
							 | 
						||
| 
								 | 
							
								--- /dev/null
							 | 
						||
| 
								 | 
							
								+++ b/src/main/java/com/destroystokyo/paper/block/TargetBlockInfo.java
							 | 
						||
| 
								 | 
							
								@@ -0,0 +0,0 @@
							 | 
						||
| 
								 | 
							
								+package com.destroystokyo.paper.block;
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+import org.bukkit.block.Block;
							 | 
						||
| 
								 | 
							
								+import org.bukkit.block.BlockFace;
							 | 
						||
| 
								 | 
							
								+import org.jetbrains.annotations.NotNull;
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+/**
							 | 
						||
| 
								 | 
							
								+ * Represents information about a targeted block
							 | 
						||
| 
								 | 
							
								+ */
							 | 
						||
| 
								 | 
							
								+public class TargetBlockInfo {
							 | 
						||
| 
								 | 
							
								+    private final Block block;
							 | 
						||
| 
								 | 
							
								+    private final BlockFace blockFace;
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    public TargetBlockInfo(@NotNull Block block, @NotNull BlockFace blockFace) {
							 | 
						||
| 
								 | 
							
								+        this.block = block;
							 | 
						||
| 
								 | 
							
								+        this.blockFace = blockFace;
							 | 
						||
| 
								 | 
							
								+    }
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    /**
							 | 
						||
| 
								 | 
							
								+     * Get the block that is targeted
							 | 
						||
| 
								 | 
							
								+     *
							 | 
						||
| 
								 | 
							
								+     * @return Targeted block
							 | 
						||
| 
								 | 
							
								+     */
							 | 
						||
| 
								 | 
							
								+    @NotNull
							 | 
						||
| 
								 | 
							
								+    public Block getBlock() {
							 | 
						||
| 
								 | 
							
								+        return block;
							 | 
						||
| 
								 | 
							
								+    }
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								+    /**
							 | 
						||
| 
								 | 
							
								+     * Get the targeted BlockFace
							 | 
						||
| 
								 | 
							
								+     *
							 | 
						||
| 
								 | 
							
								+     * @return Targeted blockface
							 | 
						||
| 
								 | 
							
								+     */
							 | 
						||
| 
								 | 
							
								+    @NotNull
							 | 
						||
| 
								 | 
							
								+    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
							 | 
						||
| 
								 | 
							
								+     */
							 | 
						||
| 
								 | 
							
								+    @NotNull
							 | 
						||
| 
								 | 
							
								+    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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
							 | 
						||
| 
								 | 
							
								--- a/src/main/java/org/bukkit/entity/LivingEntity.java
							 | 
						||
| 
								 | 
							
								+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
							 | 
						||
| 
								 | 
							
								@@ -0,0 +0,0 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
							 | 
						||
| 
								 | 
							
								     @NotNull
							 | 
						||
| 
								 | 
							
								     public Block getTargetBlock(@Nullable 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, @NotNull 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, @NotNull 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, @NotNull com.destroystokyo.paper.block.TargetBlockInfo.FluidMode fluidMode);
							 | 
						||
| 
								 | 
							
								+    // Paper end
							 | 
						||
| 
								 | 
							
								+
							 | 
						||
| 
								 | 
							
								     /**
							 | 
						||
| 
								 | 
							
								      * Gets the last two blocks along the living entity's line of sight.
							 | 
						||
| 
								 | 
							
								      * <p>
							 |