mirror of
https://github.com/PaperMC/Paper.git
synced 2024-08-28 23:49:41 +02:00
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 Bukkit Changes: 09943450 Update SnakeYAML version 5515734f SPIGOT-7162: Incorrect description for Entity#getVehicle javadoc 6f82b381 PR-788: Add getHand() to all relevant events CraftBukkit Changes: aaf484f6f SPIGOT-7163: CraftMerchantRecipe doesn't copy demand and specialPrice from BukkitMerchantRecipe 5329dd6fd PR-1107: Add getHand() to all relevant events 93061706e SPIGOT-7045: Ocelots never spawn with babies with spawn reason OCELOT_BABY
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..18a96dbb01d3b34476652264b2d6be3782a154ec
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/block/TargetBlockInfo.java
|
|
@@ -0,0 +1,54 @@
|
|
+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 c80e75b72ac863db19e3d234e349876dd8797924..c29846df0469535870e1743eee25325a4f092a6d 100644
|
|
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
|
|
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
|
|
@@ -83,6 +83,77 @@ 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>
|