From 9c3c6943092da7135c68c782b6b9e0332f1be071 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sat, 18 Nov 2023 14:42:42 +0100 Subject: [PATCH 01/12] Add new FluidState API functionality This commit adds a new FluidState API to the system. It introduces various methods to get information from fluid states in the game, such as checking if a block is a fluid source, getting the amount of fluid, type of the fluid (water or lava), and its flow direction. It helps to enhance flexibility when managing fluid dynamics in the game. Alongside new API, it also modifies the existing `RegionAccessor` class to incorporate the functionalities of the FluidState API. --- patches/api/0447-Add-FluidState-API.patch | 171 +++++++++++++ patches/server/1051-Add-FluidState-API.patch | 242 +++++++++++++++++++ 2 files changed, 413 insertions(+) create mode 100644 patches/api/0447-Add-FluidState-API.patch create mode 100644 patches/server/1051-Add-FluidState-API.patch diff --git a/patches/api/0447-Add-FluidState-API.patch b/patches/api/0447-Add-FluidState-API.patch new file mode 100644 index 000000000000..da955e30482a --- /dev/null +++ b/patches/api/0447-Add-FluidState-API.patch @@ -0,0 +1,171 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: vicisacat +Date: Fri, 17 Nov 2023 20:21:47 +0100 +Subject: [PATCH] Add FluidState API + + +diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java +new file mode 100644 +index 0000000000000000000000000000000000000000..9a8be16dc1f12cb6b91e2d6d177a2e16e0ea2975 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java +@@ -0,0 +1,75 @@ ++package io.papermc.paper.block.fluid; ++ ++import io.papermc.paper.math.Position; ++import org.bukkit.Fluid; ++import org.bukkit.Location; ++import org.bukkit.World; ++import org.bukkit.util.Vector; ++import org.jetbrains.annotations.NotNull; ++ ++public interface FluidData extends Cloneable { ++ ++ /** ++ * Gets the fluid type of this fluid data. ++ * ++ * @return the fluid type ++ */ ++ @NotNull Fluid getFluidType(); ++ ++ /** ++ * Returns a copy of this FluidData. ++ * ++ * @return a copy of the fluid data ++ */ ++ @NotNull FluidData clone(); ++ ++ /** ++ * Returns the flowing direction the liquid as a vector ++ * ++ * @return the flow direction vector ++ */ ++ Vector getFlowDirection(World world, Location location); ++ ++ /** ++ * Returns the amount of liquid is in the fluid, as in the number of layers. ++ * ++ * @return the amount as an integer, between 0 and 9 ++ */ ++ int getAmount(); ++ ++ /** ++ * Returns the height of the fluid in blocks ++ * ++ * @return the height as a float value, representing the height in blocks ++ */ ++ float getHeight(); ++ ++ /** ++ * Returns whether this fluid is the same fluid as the one passed in the parameter ++ * ++ * @param fluid a fluid ++ * @return true if they are the same, false otherwise ++ */ ++ boolean is(Fluid fluid); ++ ++ /** ++ * Returns whether this fluid is a source block ++ * ++ * @return true if the fluid is a source block, false otherwise ++ */ ++ boolean isSource(); ++ ++ /** ++ * Returns whether this fluid is water. ++ * ++ * @return true if the fluid is water, false otherwise ++ */ ++ boolean isWater(); ++ ++ /** ++ * Returns whether this fluid is lava. ++ * ++ * @return true if the fluid is lava, false otherwise ++ */ ++ boolean isLava(); ++} +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java b/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java +new file mode 100644 +index 0000000000000000000000000000000000000000..360a27fca76b0e63aa458aa3425a987224a4ac79 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java +@@ -0,0 +1,13 @@ ++package io.papermc.paper.block.fluid.type; ++ ++import io.papermc.paper.block.fluid.FluidData; ++ ++public interface FallingFluid extends FluidData { ++ ++ /** ++ * Get if this liquid is falling. ++ * ++ * @return true if falling ++ */ ++ boolean isFalling(); ++} +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java b/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java +new file mode 100644 +index 0000000000000000000000000000000000000000..14589b2de95e0f679fe9785e06648ace56449885 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java +@@ -0,0 +1,26 @@ ++package io.papermc.paper.block.fluid.type; ++ ++public interface Flowing extends FallingFluid { ++ ++ /** ++ * Get the level of the flowing liquid. ++ * ++ * @return the level ++ */ ++ int getLevel(); ++ ++ /** ++ * Get the minimum possible level for the liquid. ++ * ++ * @return the minimum level ++ */ ++ int getMinimumLevel(); ++ ++ /** ++ * Get the maximum possible level for the liquid. ++ * ++ * @return the maximum level ++ */ ++ int getMaximumLevel(); ++ ++} +diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java +index cbb51dde78f792db4ddac43f144d23ff4b12d25f..440af5ed52bed8fac0d9fa47b9cb1eaf1716f8bd 100644 +--- a/src/main/java/org/bukkit/RegionAccessor.java ++++ b/src/main/java/org/bukkit/RegionAccessor.java +@@ -102,6 +102,28 @@ public interface RegionAccessor extends Keyed { // Paper + */ + @NotNull + BlockState getBlockState(int x, int y, int z); ++ // Paper Start - FluidState API ++ ++ /** ++ * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the specified position. ++ * ++ * @param x The x-coordinate of the position ++ * @param y The y-coordinate of the position ++ * @param z The z-coordinate of the position ++ * @return The {@link io.papermc.paper.block.fluid.FluidData} at the specified position ++ */ ++ @NotNull ++ public io.papermc.paper.block.fluid.FluidData getFluidAt(int x, int y, int z); ++ ++ /** ++ * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the given {@link Location} ++ * ++ * @param location The location of the fluid ++ * @return The fluid data at the given location ++ */ ++ @NotNull ++ public io.papermc.paper.block.fluid.FluidData getFluidAt(Location location); ++ // Paper End + + /** + * Gets the {@link BlockData} at the given {@link Location}. diff --git a/patches/server/1051-Add-FluidState-API.patch b/patches/server/1051-Add-FluidState-API.patch new file mode 100644 index 000000000000..3fd25eb9e085 --- /dev/null +++ b/patches/server/1051-Add-FluidState-API.patch @@ -0,0 +1,242 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: vicisacat +Date: Fri, 17 Nov 2023 20:22:43 +0100 +Subject: [PATCH] Add FluidState API + + +diff --git a/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java +new file mode 100644 +index 0000000000000000000000000000000000000000..24f3a6bba3cb32f66e4dbd3eb9aa76eadff5e15a +--- /dev/null ++++ b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java +@@ -0,0 +1,132 @@ ++package io.papermc.paper.block.fluid; ++ ++import com.google.common.base.Preconditions; ++import io.papermc.paper.block.fluid.type.PaperFlowing; ++import io.papermc.paper.block.fluid.type.PaperFallingFluid; ++import java.util.HashMap; ++import java.util.Map; ++import java.util.function.Function; ++import net.minecraft.core.BlockPos; ++import net.minecraft.world.level.block.state.properties.Property; ++import net.minecraft.world.level.material.FluidState; ++import net.minecraft.world.level.material.LavaFluid; ++import net.minecraft.world.level.material.WaterFluid; ++import org.bukkit.Fluid; ++import org.bukkit.Location; ++import org.bukkit.World; ++import org.bukkit.craftbukkit.CraftFluid; ++import org.bukkit.craftbukkit.CraftWorld; ++import org.bukkit.craftbukkit.util.CraftVector; ++import org.bukkit.util.Vector; ++ ++public class PaperFluidData implements FluidData { ++ ++ private static final Map, Function> MAP = new HashMap<>(); ++ ++ private final FluidState state; ++ ++ protected PaperFluidData(final FluidState state) { ++ this.state = state; ++ } ++ ++ /* Registry */ ++ ++ static { ++ // ++ register(LavaFluid.Source.class, PaperFallingFluid::new); ++ register(WaterFluid.Source.class, PaperFallingFluid::new); ++ register(LavaFluid.Flowing.class, PaperFlowing::new); ++ register(WaterFluid.Flowing.class, PaperFlowing::new); ++ // ++ } ++ ++ static void register(final Class fluid, final Function creator) { ++ Preconditions.checkState(MAP.put(fluid, creator) == null, "Duplicate mapping %s->%s", fluid, creator); ++ MAP.put(fluid, creator); ++ } ++ ++ public static PaperFluidData createData(final FluidState state) { ++ return MAP.getOrDefault(state.getType().getClass(), PaperFluidData::new).apply(state); ++ } ++ ++ /* Impl */ ++ ++ public FluidState getState() { ++ return this.state; ++ } ++ ++ protected > T get(final Property property) { ++ return this.state.getValue(property); ++ } ++ /* API */ ++ ++ @Override ++ public final Fluid getFluidType() { ++ return CraftFluid.minecraftToBukkit(this.state.getType()); ++ } ++ ++ @Override ++ public PaperFluidData clone() { ++ try { ++ return (PaperFluidData) super.clone(); ++ } catch (CloneNotSupportedException ex) { ++ throw new AssertionError("Clone not supported", ex); ++ } ++ } ++ ++ @Override ++ public Vector getFlowDirection(World world, Location location) { ++ return CraftVector.toBukkit(this.state.getFlow( ++ ((CraftWorld) world).getHandle(), ++ new BlockPos( ++ location.getBlockX(), ++ location.getBlockY(), ++ location.getBlockZ() ++ ))); ++ } ++ ++ @Override ++ public int getAmount() { ++ return this.state.getAmount(); ++ } ++ ++ @Override ++ public float getHeight() { ++ return this.state.getOwnHeight(); ++ } ++ ++ @Override ++ public boolean is(final Fluid fluid) { ++ return this.state.is(CraftFluid.bukkitToMinecraft(fluid)); ++ } ++ ++ @Override ++ public boolean isSource() { ++ return this.state.isSource(); ++ } ++ ++ @Override ++ public boolean isWater() { ++ return this.is(Fluid.WATER) || this.is(Fluid.FLOWING_WATER); ++ } ++ ++ @Override ++ public boolean isLava() { ++ return this.is(Fluid.LAVA) || this.is(Fluid.FLOWING_LAVA); ++ } ++ ++ @Override ++ public int hashCode() { ++ return this.state.hashCode(); ++ } ++ ++ @Override ++ public boolean equals(Object obj) { ++ return obj instanceof PaperFluidData paperFluidData && this.state.equals(paperFluidData.state); ++ } ++ ++ @Override ++ public String toString() { ++ return "PaperFluidData{" + this.state + "}"; ++ } ++} +diff --git a/src/main/java/io/papermc/paper/block/fluid/package-info.java b/src/main/java/io/papermc/paper/block/fluid/package-info.java +new file mode 100644 +index 0000000000000000000000000000000000000000..cfabb814ebd281aab299c6c655266ff357e08806 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/block/fluid/package-info.java +@@ -0,0 +1,5 @@ ++@DefaultQualifier(NonNull.class) ++package io.papermc.paper.block.fluid; ++ ++import org.checkerframework.checker.nullness.qual.NonNull; ++import org.checkerframework.framework.qual.DefaultQualifier; +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluid.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluid.java +new file mode 100644 +index 0000000000000000000000000000000000000000..bf4b5e1b1c1cd13ed65c3b3fe1af13b8101e8d97 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluid.java +@@ -0,0 +1,18 @@ ++ ++package io.papermc.paper.block.fluid.type; ++ ++import io.papermc.paper.block.fluid.PaperFluidData; ++import net.minecraft.world.level.material.FlowingFluid; ++import net.minecraft.world.level.material.FluidState; ++ ++public class PaperFallingFluid extends PaperFluidData implements FallingFluid { ++ ++ public PaperFallingFluid(final FluidState state) { ++ super(state); ++ } ++ ++ @Override ++ public boolean isFalling() { ++ return this.get(FlowingFluid.FALLING); ++ } ++} +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java +new file mode 100644 +index 0000000000000000000000000000000000000000..017fe1e6892f1cd06e6a9beee53a91efa183be5e +--- /dev/null ++++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java +@@ -0,0 +1,27 @@ ++package io.papermc.paper.block.fluid.type; ++ ++import net.minecraft.world.level.material.FlowingFluid; ++import net.minecraft.world.level.material.FluidState; ++import org.bukkit.util.Vector; ++ ++public class PaperFlowing extends PaperFallingFluid implements Flowing { ++ ++ public PaperFlowing(final FluidState state) { ++ super(state); ++ } ++ ++ @Override ++ public int getLevel() { ++ return this.get(FlowingFluid.LEVEL); ++ } ++ ++ @Override ++ public int getMinimumLevel() { ++ return FlowingFluid.LEVEL.min; ++ } ++ ++ @Override ++ public int getMaximumLevel() { ++ return FlowingFluid.LEVEL.max; ++ } ++} +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +index 1a17875426468b287c8ea3f559ea516d0218f7a0..93f0da9f106ade765a4661ca44bed49b70731b3f 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +@@ -202,6 +202,7 @@ import org.bukkit.inventory.ItemStack; + import org.bukkit.potion.PotionData; + import org.bukkit.potion.PotionType; + import org.bukkit.util.Vector; ++import org.jetbrains.annotations.NotNull; + + public abstract class CraftRegionAccessor implements RegionAccessor { + +@@ -251,6 +252,17 @@ public abstract class CraftRegionAccessor implements RegionAccessor { + public BlockState getBlockState(int x, int y, int z) { + return CraftBlock.at(this.getHandle(), new BlockPos(x, y, z)).getState(); + } ++ // Paper Start - FluidState API ++ @Override ++ public @NotNull io.papermc.paper.block.fluid.FluidData getFluidAt(final int x, final int y, final int z) { ++ return io.papermc.paper.block.fluid.PaperFluidData.createData(getHandle().getFluidState(new BlockPos(x, y, z))); ++ } ++ ++ @Override ++ public @NotNull io.papermc.paper.block.fluid.FluidData getFluidAt(final Location location) { ++ return getFluidAt(location.getBlockX(), location.getBlockY(), location.getBlockZ()); ++ } ++ // Paper End + + @Override + public BlockData getBlockData(Location location) { From ff6c3f94c65a92ed4c4e2f3cad18e3c16a0ec05e Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sun, 19 Nov 2023 13:28:55 +0100 Subject: [PATCH 02/12] Do requested changes oh god I hope I did this right --- ...PI.patch => 0446-Add-FluidState-API.patch} | 14 ++++++------- ...PI.patch => 1047-Add-FluidState-API.patch} | 21 ++++++++----------- 2 files changed, 16 insertions(+), 19 deletions(-) rename patches/api/{0447-Add-FluidState-API.patch => 0446-Add-FluidState-API.patch} (91%) rename patches/server/{1051-Add-FluidState-API.patch => 1047-Add-FluidState-API.patch} (92%) diff --git a/patches/api/0447-Add-FluidState-API.patch b/patches/api/0446-Add-FluidState-API.patch similarity index 91% rename from patches/api/0447-Add-FluidState-API.patch rename to patches/api/0446-Add-FluidState-API.patch index da955e30482a..4a459bd98695 100644 --- a/patches/api/0447-Add-FluidState-API.patch +++ b/patches/api/0446-Add-FluidState-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..9a8be16dc1f12cb6b91e2d6d177a2e16e0ea2975 +index 0000000000000000000000000000000000000000..ece4b71a5882d43f8149e559c746f4dba56648e1 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java @@ -0,0 +1,75 @@ @@ -40,12 +40,12 @@ index 0000000000000000000000000000000000000000..9a8be16dc1f12cb6b91e2d6d177a2e16 + * + * @return the flow direction vector + */ -+ Vector getFlowDirection(World world, Location location); ++ Vector getFlowDirection(Location location); + + /** + * Returns the amount of liquid is in the fluid, as in the number of layers. + * -+ * @return the amount as an integer, between 0 and 9 ++ * @return the amount as an integer, between 0 and 8 + */ + int getAmount(); + @@ -137,7 +137,7 @@ index 0000000000000000000000000000000000000000..14589b2de95e0f679fe9785e06648ace + +} diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java -index cbb51dde78f792db4ddac43f144d23ff4b12d25f..440af5ed52bed8fac0d9fa47b9cb1eaf1716f8bd 100644 +index cbb51dde78f792db4ddac43f144d23ff4b12d25f..6ff313102952fc7c9a94737d16fd7640ed6ba336 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java +++ b/src/main/java/org/bukkit/RegionAccessor.java @@ -102,6 +102,28 @@ public interface RegionAccessor extends Keyed { // Paper @@ -158,13 +158,13 @@ index cbb51dde78f792db4ddac43f144d23ff4b12d25f..440af5ed52bed8fac0d9fa47b9cb1eaf + public io.papermc.paper.block.fluid.FluidData getFluidAt(int x, int y, int z); + + /** -+ * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the given {@link Location} ++ * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the given position + * -+ * @param location The location of the fluid ++ * @param position The location of the fluid + * @return The fluid data at the given location + */ + @NotNull -+ public io.papermc.paper.block.fluid.FluidData getFluidAt(Location location); ++ public io.papermc.paper.block.fluid.FluidData getFluidAt(io.papermc.paper.math.Position position); + // Paper End /** diff --git a/patches/server/1051-Add-FluidState-API.patch b/patches/server/1047-Add-FluidState-API.patch similarity index 92% rename from patches/server/1051-Add-FluidState-API.patch rename to patches/server/1047-Add-FluidState-API.patch index 3fd25eb9e085..602c1d3f62aa 100644 --- a/patches/server/1051-Add-FluidState-API.patch +++ b/patches/server/1047-Add-FluidState-API.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..24f3a6bba3cb32f66e4dbd3eb9aa76eadff5e15a +index 0000000000000000000000000000000000000000..1c7e4d2ce511e916226c6afabcd9be83edbda391 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java -@@ -0,0 +1,132 @@ +@@ -0,0 +1,129 @@ +package io.papermc.paper.block.fluid; + +import com.google.common.base.Preconditions; @@ -18,6 +18,7 @@ index 0000000000000000000000000000000000000000..24f3a6bba3cb32f66e4dbd3eb9aa76ea +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; ++import io.papermc.paper.util.MCUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.material.FluidState; @@ -87,14 +88,10 @@ index 0000000000000000000000000000000000000000..24f3a6bba3cb32f66e4dbd3eb9aa76ea + } + + @Override -+ public Vector getFlowDirection(World world, Location location) { ++ public Vector getFlowDirection(Location location) { ++ Preconditions.checkNotNull(location.getWorld()); + return CraftVector.toBukkit(this.state.getFlow( -+ ((CraftWorld) world).getHandle(), -+ new BlockPos( -+ location.getBlockX(), -+ location.getBlockY(), -+ location.getBlockZ() -+ ))); ++ ((CraftWorld) location.getWorld()).getHandle(), MCUtil.toBlockPosition(location))); + } + + @Override @@ -211,7 +208,7 @@ index 0000000000000000000000000000000000000000..017fe1e6892f1cd06e6a9beee53a91ef + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -index 1a17875426468b287c8ea3f559ea516d0218f7a0..93f0da9f106ade765a4661ca44bed49b70731b3f 100644 +index 1a17875426468b287c8ea3f559ea516d0218f7a0..0bd63e98501fcfbfddadda9bd5b7e9340dbf3950 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java @@ -202,6 +202,7 @@ import org.bukkit.inventory.ItemStack; @@ -233,8 +230,8 @@ index 1a17875426468b287c8ea3f559ea516d0218f7a0..93f0da9f106ade765a4661ca44bed49b + } + + @Override -+ public @NotNull io.papermc.paper.block.fluid.FluidData getFluidAt(final Location location) { -+ return getFluidAt(location.getBlockX(), location.getBlockY(), location.getBlockZ()); ++ public @NotNull io.papermc.paper.block.fluid.FluidData getFluidAt(final io.papermc.paper.math.Position position) { ++ return getFluidAt(position.blockX(), position.blockY(), position.blockZ()); + } + // Paper End From f3df5e0552463a6e93acf2055abf263127b844c0 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Tue, 21 Nov 2023 16:51:49 +0100 Subject: [PATCH 03/12] move isWater, isLava and make is() default --- patches/api/0446-Add-FluidState-API.patch | 64 ++++++++++++++------ patches/server/1047-Add-FluidState-API.patch | 21 +------ 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/patches/api/0446-Add-FluidState-API.patch b/patches/api/0446-Add-FluidState-API.patch index 4a459bd98695..390cfcd9c4b8 100644 --- a/patches/api/0446-Add-FluidState-API.patch +++ b/patches/api/0446-Add-FluidState-API.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..ece4b71a5882d43f8149e559c746f4dba56648e1 +index 0000000000000000000000000000000000000000..17c94569268c8998b159eba8ec160eea8d075a29 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java -@@ -0,0 +1,75 @@ +@@ -0,0 +1,63 @@ +package io.papermc.paper.block.fluid; + +import io.papermc.paper.math.Position; @@ -62,7 +62,9 @@ index 0000000000000000000000000000000000000000..ece4b71a5882d43f8149e559c746f4db + * @param fluid a fluid + * @return true if they are the same, false otherwise + */ -+ boolean is(Fluid fluid); ++ default boolean is(Fluid fluid) { ++ return getFluidType() == fluid; ++ } + + /** + * Returns whether this fluid is a source block @@ -70,20 +72,6 @@ index 0000000000000000000000000000000000000000..ece4b71a5882d43f8149e559c746f4db + * @return true if the fluid is a source block, false otherwise + */ + boolean isSource(); -+ -+ /** -+ * Returns whether this fluid is water. -+ * -+ * @return true if the fluid is water, false otherwise -+ */ -+ boolean isWater(); -+ -+ /** -+ * Returns whether this fluid is lava. -+ * -+ * @return true if the fluid is lava, false otherwise -+ */ -+ boolean isLava(); +} diff --git a/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java b/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java new file mode 100644 @@ -136,6 +124,48 @@ index 0000000000000000000000000000000000000000..14589b2de95e0f679fe9785e06648ace + int getMaximumLevel(); + +} +diff --git a/src/main/java/org/bukkit/Fluid.java b/src/main/java/org/bukkit/Fluid.java +index 7202b44a65e8699cf64329e441e83d4dd1779c19..8879f905d1c806ee35ac89ceebd346eea93913a7 100644 +--- a/src/main/java/org/bukkit/Fluid.java ++++ b/src/main/java/org/bukkit/Fluid.java +@@ -17,19 +17,19 @@ public enum Fluid implements Keyed { + /** + * Stationary water. + */ +- WATER, ++ WATER{public boolean isWater() {return true;}}, // Paper + /** + * Flowing water. + */ +- FLOWING_WATER, ++ FLOWING_WATER{public boolean isWater() {return true;}}, // Paper + /** + * Stationary lava. + */ +- LAVA, ++ LAVA{public boolean isLava() {return true;}}, // Paper + /** + * Flowing lava. + */ +- FLOWING_LAVA; ++ FLOWING_LAVA{public boolean isLava() {return true;}}; // Paper + + private final NamespacedKey key; + +@@ -42,4 +42,13 @@ public enum Fluid implements Keyed { + public NamespacedKey getKey() { + return key; + } ++ // Paper start ++ public boolean isWater() { ++ return false; ++ } ++ ++ public boolean isLava() { ++ return false; ++ } ++ // Paper end + } diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java index cbb51dde78f792db4ddac43f144d23ff4b12d25f..6ff313102952fc7c9a94737d16fd7640ed6ba336 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java diff --git a/patches/server/1047-Add-FluidState-API.patch b/patches/server/1047-Add-FluidState-API.patch index 602c1d3f62aa..c6561522d6d1 100644 --- a/patches/server/1047-Add-FluidState-API.patch +++ b/patches/server/1047-Add-FluidState-API.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..1c7e4d2ce511e916226c6afabcd9be83edbda391 +index 0000000000000000000000000000000000000000..18ce07fb6fdf01b16499563396bccffac5eeed0c --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java -@@ -0,0 +1,129 @@ +@@ -0,0 +1,112 @@ +package io.papermc.paper.block.fluid; + +import com.google.common.base.Preconditions; @@ -19,14 +19,12 @@ index 0000000000000000000000000000000000000000..1c7e4d2ce511e916226c6afabcd9be83 +import java.util.Map; +import java.util.function.Function; +import io.papermc.paper.util.MCUtil; -+import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.LavaFluid; +import net.minecraft.world.level.material.WaterFluid; +import org.bukkit.Fluid; +import org.bukkit.Location; -+import org.bukkit.World; +import org.bukkit.craftbukkit.CraftFluid; +import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.util.CraftVector; @@ -105,26 +103,11 @@ index 0000000000000000000000000000000000000000..1c7e4d2ce511e916226c6afabcd9be83 + } + + @Override -+ public boolean is(final Fluid fluid) { -+ return this.state.is(CraftFluid.bukkitToMinecraft(fluid)); -+ } -+ -+ @Override + public boolean isSource() { + return this.state.isSource(); + } + + @Override -+ public boolean isWater() { -+ return this.is(Fluid.WATER) || this.is(Fluid.FLOWING_WATER); -+ } -+ -+ @Override -+ public boolean isLava() { -+ return this.is(Fluid.LAVA) || this.is(Fluid.FLOWING_LAVA); -+ } -+ -+ @Override + public int hashCode() { + return this.state.hashCode(); + } From 3393ba2f2a295c40a4c511504c53df888ccae309 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Wed, 22 Nov 2023 16:33:00 +0100 Subject: [PATCH 04/12] remove "is" methods, rename getFluidAt to getFluidData --- patches/api/0446-Add-FluidState-API.patch | 64 ++------------------ patches/server/1047-Add-FluidState-API.patch | 18 ++---- 2 files changed, 10 insertions(+), 72 deletions(-) diff --git a/patches/api/0446-Add-FluidState-API.patch b/patches/api/0446-Add-FluidState-API.patch index 390cfcd9c4b8..9a78af9a2f42 100644 --- a/patches/api/0446-Add-FluidState-API.patch +++ b/patches/api/0446-Add-FluidState-API.patch @@ -6,16 +6,14 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..17c94569268c8998b159eba8ec160eea8d075a29 +index 0000000000000000000000000000000000000000..847d9be73fc2cfe09bdc7c09423601ca5c9023d2 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java -@@ -0,0 +1,63 @@ +@@ -0,0 +1,51 @@ +package io.papermc.paper.block.fluid; + -+import io.papermc.paper.math.Position; +import org.bukkit.Fluid; +import org.bukkit.Location; -+import org.bukkit.World; +import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; + @@ -57,16 +55,6 @@ index 0000000000000000000000000000000000000000..17c94569268c8998b159eba8ec160eea + float getHeight(); + + /** -+ * Returns whether this fluid is the same fluid as the one passed in the parameter -+ * -+ * @param fluid a fluid -+ * @return true if they are the same, false otherwise -+ */ -+ default boolean is(Fluid fluid) { -+ return getFluidType() == fluid; -+ } -+ -+ /** + * Returns whether this fluid is a source block + * + * @return true if the fluid is a source block, false otherwise @@ -124,50 +112,8 @@ index 0000000000000000000000000000000000000000..14589b2de95e0f679fe9785e06648ace + int getMaximumLevel(); + +} -diff --git a/src/main/java/org/bukkit/Fluid.java b/src/main/java/org/bukkit/Fluid.java -index 7202b44a65e8699cf64329e441e83d4dd1779c19..8879f905d1c806ee35ac89ceebd346eea93913a7 100644 ---- a/src/main/java/org/bukkit/Fluid.java -+++ b/src/main/java/org/bukkit/Fluid.java -@@ -17,19 +17,19 @@ public enum Fluid implements Keyed { - /** - * Stationary water. - */ -- WATER, -+ WATER{public boolean isWater() {return true;}}, // Paper - /** - * Flowing water. - */ -- FLOWING_WATER, -+ FLOWING_WATER{public boolean isWater() {return true;}}, // Paper - /** - * Stationary lava. - */ -- LAVA, -+ LAVA{public boolean isLava() {return true;}}, // Paper - /** - * Flowing lava. - */ -- FLOWING_LAVA; -+ FLOWING_LAVA{public boolean isLava() {return true;}}; // Paper - - private final NamespacedKey key; - -@@ -42,4 +42,13 @@ public enum Fluid implements Keyed { - public NamespacedKey getKey() { - return key; - } -+ // Paper start -+ public boolean isWater() { -+ return false; -+ } -+ -+ public boolean isLava() { -+ return false; -+ } -+ // Paper end - } diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java -index cbb51dde78f792db4ddac43f144d23ff4b12d25f..6ff313102952fc7c9a94737d16fd7640ed6ba336 100644 +index cbb51dde78f792db4ddac43f144d23ff4b12d25f..938737b2f7b343fec814f6c9d5386b2161cf25f3 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java +++ b/src/main/java/org/bukkit/RegionAccessor.java @@ -102,6 +102,28 @@ public interface RegionAccessor extends Keyed { // Paper @@ -185,7 +131,7 @@ index cbb51dde78f792db4ddac43f144d23ff4b12d25f..6ff313102952fc7c9a94737d16fd7640 + * @return The {@link io.papermc.paper.block.fluid.FluidData} at the specified position + */ + @NotNull -+ public io.papermc.paper.block.fluid.FluidData getFluidAt(int x, int y, int z); ++ io.papermc.paper.block.fluid.FluidData getFluidData(int x, int y, int z); + + /** + * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the given position @@ -194,7 +140,7 @@ index cbb51dde78f792db4ddac43f144d23ff4b12d25f..6ff313102952fc7c9a94737d16fd7640 + * @return The fluid data at the given location + */ + @NotNull -+ public io.papermc.paper.block.fluid.FluidData getFluidAt(io.papermc.paper.math.Position position); ++ io.papermc.paper.block.fluid.FluidData getFluidData(io.papermc.paper.math.Position position); + // Paper End /** diff --git a/patches/server/1047-Add-FluidState-API.patch b/patches/server/1047-Add-FluidState-API.patch index c6561522d6d1..6882e3ee022f 100644 --- a/patches/server/1047-Add-FluidState-API.patch +++ b/patches/server/1047-Add-FluidState-API.patch @@ -191,30 +191,22 @@ index 0000000000000000000000000000000000000000..017fe1e6892f1cd06e6a9beee53a91ef + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -index 1a17875426468b287c8ea3f559ea516d0218f7a0..0bd63e98501fcfbfddadda9bd5b7e9340dbf3950 100644 +index 1a17875426468b287c8ea3f559ea516d0218f7a0..16113f76db453a5cf82cbe8b8c936dd2d8d768f6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -@@ -202,6 +202,7 @@ import org.bukkit.inventory.ItemStack; - import org.bukkit.potion.PotionData; - import org.bukkit.potion.PotionType; - import org.bukkit.util.Vector; -+import org.jetbrains.annotations.NotNull; - - public abstract class CraftRegionAccessor implements RegionAccessor { - -@@ -251,6 +252,17 @@ public abstract class CraftRegionAccessor implements RegionAccessor { +@@ -251,6 +251,17 @@ public abstract class CraftRegionAccessor implements RegionAccessor { public BlockState getBlockState(int x, int y, int z) { return CraftBlock.at(this.getHandle(), new BlockPos(x, y, z)).getState(); } + // Paper Start - FluidState API + @Override -+ public @NotNull io.papermc.paper.block.fluid.FluidData getFluidAt(final int x, final int y, final int z) { ++ public io.papermc.paper.block.fluid.FluidData getFluidData(final int x, final int y, final int z) { + return io.papermc.paper.block.fluid.PaperFluidData.createData(getHandle().getFluidState(new BlockPos(x, y, z))); + } + + @Override -+ public @NotNull io.papermc.paper.block.fluid.FluidData getFluidAt(final io.papermc.paper.math.Position position) { -+ return getFluidAt(position.blockX(), position.blockY(), position.blockZ()); ++ public io.papermc.paper.block.fluid.FluidData getFluidData(final io.papermc.paper.math.Position position) { ++ return getFluidData(position.blockX(), position.blockY(), position.blockZ()); + } + // Paper End From 670f81fb8af68e0ea0b827a3f5a2569cd69675f2 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Thu, 30 Nov 2023 18:38:09 +0100 Subject: [PATCH 05/12] do requested changes --- patches/api/0446-Add-FluidState-API.patch | 30 ++++++++++++-------- patches/server/1047-Add-FluidState-API.patch | 20 ++++++------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/patches/api/0446-Add-FluidState-API.patch b/patches/api/0446-Add-FluidState-API.patch index 9a78af9a2f42..48da5bb68499 100644 --- a/patches/api/0446-Add-FluidState-API.patch +++ b/patches/api/0446-Add-FluidState-API.patch @@ -6,16 +6,17 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..847d9be73fc2cfe09bdc7c09423601ca5c9023d2 +index 0000000000000000000000000000000000000000..544c419efdb093e4309dacaa156d72870e45ee59 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java -@@ -0,0 +1,51 @@ +@@ -0,0 +1,54 @@ +package io.papermc.paper.block.fluid; + +import org.bukkit.Fluid; +import org.bukkit.Location; +import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Range; + +public interface FluidData extends Cloneable { + @@ -34,9 +35,10 @@ index 0000000000000000000000000000000000000000..847d9be73fc2cfe09bdc7c09423601ca + @NotNull FluidData clone(); + + /** -+ * Returns the flowing direction the liquid as a vector ++ * Returns the direction of the flow of the liquid at the given location as a vector. + * -+ * @return the flow direction vector ++ * @param location - the location to check the liquid flow ++ * @return the flow direction vector at the given location + */ + Vector getFlowDirection(Location location); + @@ -45,6 +47,7 @@ index 0000000000000000000000000000000000000000..847d9be73fc2cfe09bdc7c09423601ca + * + * @return the amount as an integer, between 0 and 8 + */ ++ @Range(from = 0, to = 8) + int getAmount(); + + /** @@ -113,14 +116,14 @@ index 0000000000000000000000000000000000000000..14589b2de95e0f679fe9785e06648ace + +} diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java -index cbb51dde78f792db4ddac43f144d23ff4b12d25f..938737b2f7b343fec814f6c9d5386b2161cf25f3 100644 +index cbb51dde78f792db4ddac43f144d23ff4b12d25f..49dacfa80dec3dc61d019694534da5c5f4b47857 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java +++ b/src/main/java/org/bukkit/RegionAccessor.java -@@ -102,6 +102,28 @@ public interface RegionAccessor extends Keyed { // Paper - */ +@@ -103,6 +103,31 @@ public interface RegionAccessor extends Keyed { // Paper @NotNull BlockState getBlockState(int x, int y, int z); -+ // Paper Start - FluidState API + ++ // Paper start - FluidState API + + /** + * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the specified position. @@ -137,11 +140,14 @@ index cbb51dde78f792db4ddac43f144d23ff4b12d25f..938737b2f7b343fec814f6c9d5386b21 + * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the given position + * + * @param position The location of the fluid -+ * @return The fluid data at the given location ++ * @return The fluid data at the given position + */ + @NotNull -+ io.papermc.paper.block.fluid.FluidData getFluidData(io.papermc.paper.math.Position position); -+ // Paper End - ++ default io.papermc.paper.block.fluid.FluidData getFluidData(io.papermc.paper.math.Position position) { ++ return getFluidData(position.blockX(), position.blockY(), position.blockZ()); ++ }; ++ // Paper end ++ /** * Gets the {@link BlockData} at the given {@link Location}. + * diff --git a/patches/server/1047-Add-FluidState-API.patch b/patches/server/1047-Add-FluidState-API.patch index 6882e3ee022f..af3cf5660b2d 100644 --- a/patches/server/1047-Add-FluidState-API.patch +++ b/patches/server/1047-Add-FluidState-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..18ce07fb6fdf01b16499563396bccffac5eeed0c +index 0000000000000000000000000000000000000000..daab396d0cbb12d23a1db126551027301a319a22 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java @@ -0,0 +1,112 @@ @@ -87,7 +87,7 @@ index 0000000000000000000000000000000000000000..18ce07fb6fdf01b16499563396bccffa + + @Override + public Vector getFlowDirection(Location location) { -+ Preconditions.checkNotNull(location.getWorld()); ++ Preconditions.checkArgument(location.getWorld() != null, "The location must contain a World!"); + return CraftVector.toBukkit(this.state.getFlow( + ((CraftWorld) location.getWorld()).getHandle(), MCUtil.toBlockPosition(location))); + } @@ -191,24 +191,20 @@ index 0000000000000000000000000000000000000000..017fe1e6892f1cd06e6a9beee53a91ef + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -index 1a17875426468b287c8ea3f559ea516d0218f7a0..16113f76db453a5cf82cbe8b8c936dd2d8d768f6 100644 +index 1a17875426468b287c8ea3f559ea516d0218f7a0..e7d78cd33e3de92fe49c0de6a9f6722ce7b8736d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -@@ -251,6 +251,17 @@ public abstract class CraftRegionAccessor implements RegionAccessor { - public BlockState getBlockState(int x, int y, int z) { +@@ -252,6 +252,13 @@ public abstract class CraftRegionAccessor implements RegionAccessor { return CraftBlock.at(this.getHandle(), new BlockPos(x, y, z)).getState(); } -+ // Paper Start - FluidState API + ++ // Paper start - FluidState API + @Override + public io.papermc.paper.block.fluid.FluidData getFluidData(final int x, final int y, final int z) { + return io.papermc.paper.block.fluid.PaperFluidData.createData(getHandle().getFluidState(new BlockPos(x, y, z))); + } ++ // Paper end + -+ @Override -+ public io.papermc.paper.block.fluid.FluidData getFluidData(final io.papermc.paper.math.Position position) { -+ return getFluidData(position.blockX(), position.blockY(), position.blockZ()); -+ } -+ // Paper End - @Override public BlockData getBlockData(Location location) { + return this.getBlockData(location.getBlockX(), location.getBlockY(), location.getBlockZ()); From 8107c3a53560c7449995a241df0c4b0738f09562 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sat, 16 Dec 2023 21:59:44 +0100 Subject: [PATCH 06/12] do requested changes again, and move patch number up I guess. --- ...PI.patch => 0449-Add-FluidState-API.patch} | 23 +++++++------------ ...PI.patch => 1052-Add-FluidState-API.patch} | 14 ++++------- 2 files changed, 12 insertions(+), 25 deletions(-) rename patches/api/{0446-Add-FluidState-API.patch => 0449-Add-FluidState-API.patch} (87%) rename patches/server/{1047-Add-FluidState-API.patch => 1052-Add-FluidState-API.patch} (94%) diff --git a/patches/api/0446-Add-FluidState-API.patch b/patches/api/0449-Add-FluidState-API.patch similarity index 87% rename from patches/api/0446-Add-FluidState-API.patch rename to patches/api/0449-Add-FluidState-API.patch index 48da5bb68499..88b4d0d5a752 100644 --- a/patches/api/0446-Add-FluidState-API.patch +++ b/patches/api/0449-Add-FluidState-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..544c419efdb093e4309dacaa156d72870e45ee59 +index 0000000000000000000000000000000000000000..68734f196f45c8d8bdec905762c234aaf9f97582 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java @@ -0,0 +1,54 @@ @@ -51,9 +51,9 @@ index 0000000000000000000000000000000000000000..544c419efdb093e4309dacaa156d7287 + int getAmount(); + + /** -+ * Returns the height of the fluid in blocks ++ * Returns the height of the fluid + * -+ * @return the height as a float value, representing the height in blocks ++ * @return the height as a float value + */ + float getHeight(); + @@ -85,22 +85,15 @@ index 0000000000000000000000000000000000000000..360a27fca76b0e63aa458aa3425a9872 +} diff --git a/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java b/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java new file mode 100644 -index 0000000000000000000000000000000000000000..14589b2de95e0f679fe9785e06648ace56449885 +index 0000000000000000000000000000000000000000..7a4126d316839581a652ac9cba12a01c279d053e --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java -@@ -0,0 +1,26 @@ +@@ -0,0 +1,19 @@ +package io.papermc.paper.block.fluid.type; + +public interface Flowing extends FallingFluid { + + /** -+ * Get the level of the flowing liquid. -+ * -+ * @return the level -+ */ -+ int getLevel(); -+ -+ /** + * Get the minimum possible level for the liquid. + * + * @return the minimum level @@ -116,10 +109,10 @@ index 0000000000000000000000000000000000000000..14589b2de95e0f679fe9785e06648ace + +} diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java -index cbb51dde78f792db4ddac43f144d23ff4b12d25f..49dacfa80dec3dc61d019694534da5c5f4b47857 100644 +index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..9be3d603908f22514a507887d5150fe487e0a186 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java +++ b/src/main/java/org/bukkit/RegionAccessor.java -@@ -103,6 +103,31 @@ public interface RegionAccessor extends Keyed { // Paper +@@ -102,6 +102,31 @@ public interface RegionAccessor extends Keyed { // Paper @NotNull BlockState getBlockState(int x, int y, int z); @@ -145,7 +138,7 @@ index cbb51dde78f792db4ddac43f144d23ff4b12d25f..49dacfa80dec3dc61d019694534da5c5 + @NotNull + default io.papermc.paper.block.fluid.FluidData getFluidData(io.papermc.paper.math.Position position) { + return getFluidData(position.blockX(), position.blockY(), position.blockZ()); -+ }; ++ } + // Paper end + /** diff --git a/patches/server/1047-Add-FluidState-API.patch b/patches/server/1052-Add-FluidState-API.patch similarity index 94% rename from patches/server/1047-Add-FluidState-API.patch rename to patches/server/1052-Add-FluidState-API.patch index af3cf5660b2d..99af2f91c038 100644 --- a/patches/server/1047-Add-FluidState-API.patch +++ b/patches/server/1052-Add-FluidState-API.patch @@ -159,15 +159,14 @@ index 0000000000000000000000000000000000000000..bf4b5e1b1c1cd13ed65c3b3fe1af13b8 +} diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java new file mode 100644 -index 0000000000000000000000000000000000000000..017fe1e6892f1cd06e6a9beee53a91efa183be5e +index 0000000000000000000000000000000000000000..d4ffc3bd801fdcd889fd85f3448dd25a732c209e --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java -@@ -0,0 +1,27 @@ +@@ -0,0 +1,21 @@ +package io.papermc.paper.block.fluid.type; + +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.FluidState; -+import org.bukkit.util.Vector; + +public class PaperFlowing extends PaperFallingFluid implements Flowing { + @@ -176,11 +175,6 @@ index 0000000000000000000000000000000000000000..017fe1e6892f1cd06e6a9beee53a91ef + } + + @Override -+ public int getLevel() { -+ return this.get(FlowingFluid.LEVEL); -+ } -+ -+ @Override + public int getMinimumLevel() { + return FlowingFluid.LEVEL.min; + } @@ -191,10 +185,10 @@ index 0000000000000000000000000000000000000000..017fe1e6892f1cd06e6a9beee53a91ef + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -index 1a17875426468b287c8ea3f559ea516d0218f7a0..e7d78cd33e3de92fe49c0de6a9f6722ce7b8736d 100644 +index 87698a123ce027b4f7b0dcc9eaf034a5b8de6de3..3091aec84959cd859266c88b7e623f62c1ae2759 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -@@ -252,6 +252,13 @@ public abstract class CraftRegionAccessor implements RegionAccessor { +@@ -255,6 +255,13 @@ public abstract class CraftRegionAccessor implements RegionAccessor { return CraftBlock.at(this.getHandle(), new BlockPos(x, y, z)).getState(); } From 109a8a878b3e724127b7057f5976a710d3caf5f1 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sun, 17 Dec 2023 14:34:11 +0100 Subject: [PATCH 07/12] add annotations and remove that stupid newline --- patches/api/0449-Add-FluidState-API.patch | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/patches/api/0449-Add-FluidState-API.patch b/patches/api/0449-Add-FluidState-API.patch index 88b4d0d5a752..3af85ea0eb5a 100644 --- a/patches/api/0449-Add-FluidState-API.patch +++ b/patches/api/0449-Add-FluidState-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..68734f196f45c8d8bdec905762c234aaf9f97582 +index 0000000000000000000000000000000000000000..337626ad58dd2be2ed9770e7b1f3fb37161e5140 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java @@ -0,0 +1,54 @@ @@ -40,7 +40,7 @@ index 0000000000000000000000000000000000000000..68734f196f45c8d8bdec905762c234aa + * @param location - the location to check the liquid flow + * @return the flow direction vector at the given location + */ -+ Vector getFlowDirection(Location location); ++ @NotNull Vector getFlowDirection(@NotNull Location location); + + /** + * Returns the amount of liquid is in the fluid, as in the number of layers. @@ -109,15 +109,14 @@ index 0000000000000000000000000000000000000000..7a4126d316839581a652ac9cba12a01c + +} diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java -index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..9be3d603908f22514a507887d5150fe487e0a186 100644 +index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..7ffbda2c53121ba111e3e6ca7034438292f87b94 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java +++ b/src/main/java/org/bukkit/RegionAccessor.java -@@ -102,6 +102,31 @@ public interface RegionAccessor extends Keyed { // Paper +@@ -102,6 +102,30 @@ public interface RegionAccessor extends Keyed { // Paper @NotNull BlockState getBlockState(int x, int y, int z); + // Paper start - FluidState API -+ + /** + * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the specified position. + * @@ -136,7 +135,7 @@ index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..9be3d603908f22514a507887d5150fe4 + * @return The fluid data at the given position + */ + @NotNull -+ default io.papermc.paper.block.fluid.FluidData getFluidData(io.papermc.paper.math.Position position) { ++ default io.papermc.paper.block.fluid.FluidData getFluidData(@NotNull io.papermc.paper.math.Position position) { + return getFluidData(position.blockX(), position.blockY(), position.blockZ()); + } + // Paper end From cea020dd2c1132cd384b28bea7e6be7ff23060c2 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sun, 17 Dec 2023 22:02:02 +0100 Subject: [PATCH 08/12] changed 3 characters --- patches/api/0449-Add-FluidState-API.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/api/0449-Add-FluidState-API.patch b/patches/api/0449-Add-FluidState-API.patch index 3af85ea0eb5a..68c3ec6bba5b 100644 --- a/patches/api/0449-Add-FluidState-API.patch +++ b/patches/api/0449-Add-FluidState-API.patch @@ -131,7 +131,7 @@ index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..7ffbda2c53121ba111e3e6ca70344382 + /** + * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the given position + * -+ * @param position The location of the fluid ++ * @param position The position of the fluid + * @return The fluid data at the given position + */ + @NotNull From 757b644b04f1d7672a62e4511b0dc9b1df8a062f Mon Sep 17 00:00:00 2001 From: Bjarne Koll Date: Fri, 29 Dec 2023 22:03:55 +0100 Subject: [PATCH 09/12] Rebase --- ...PI.patch => 0457-Add-FluidState-API.patch} | 72 ++++++----- ...PI.patch => 1058-Add-FluidState-API.patch} | 115 +++++++++--------- 2 files changed, 97 insertions(+), 90 deletions(-) rename patches/api/{0449-Add-FluidState-API.patch => 0457-Add-FluidState-API.patch} (59%) rename patches/server/{1052-Add-FluidState-API.patch => 1058-Add-FluidState-API.patch} (67%) diff --git a/patches/api/0449-Add-FluidState-API.patch b/patches/api/0457-Add-FluidState-API.patch similarity index 59% rename from patches/api/0449-Add-FluidState-API.patch rename to patches/api/0457-Add-FluidState-API.patch index 68c3ec6bba5b..b5ef2d0d33f8 100644 --- a/patches/api/0449-Add-FluidState-API.patch +++ b/patches/api/0457-Add-FluidState-API.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/FluidData.java b/src/main/java/io/papermc/paper/block/fluid/FluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..337626ad58dd2be2ed9770e7b1f3fb37161e5140 +index 0000000000000000000000000000000000000000..913acd58547d97cafc1466f6e2b3b4d22cf0b02d --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/FluidData.java -@@ -0,0 +1,54 @@ +@@ -0,0 +1,68 @@ +package io.papermc.paper.block.fluid; + +import org.bukkit.Fluid; @@ -18,6 +18,10 @@ index 0000000000000000000000000000000000000000..337626ad58dd2be2ed9770e7b1f3fb37 +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Range; + ++/** ++ * A representation of a fluid in a specific state of data. ++ * This type is not linked to a specific location and hence mostly resembles a {@link org.bukkit.block.data.BlockData}. ++ */ +public interface FluidData extends Cloneable { + + /** @@ -35,27 +39,37 @@ index 0000000000000000000000000000000000000000..337626ad58dd2be2ed9770e7b1f3fb37 + @NotNull FluidData clone(); + + /** -+ * Returns the direction of the flow of the liquid at the given location as a vector. ++ * Computes the direction of the flow of the liquid at the given location as a vector. ++ *

++ * This method requires the passed location's chunk to be loaded. ++ * If said chunk is not loaded when this method is called, the chunk will first be loaded prior to the computation ++ * which leads to a potentially slow sync chunk load. + * + * @param location - the location to check the liquid flow + * @return the flow direction vector at the given location + */ -+ @NotNull Vector getFlowDirection(@NotNull Location location); ++ @NotNull Vector computeFlowDirection(@NotNull Location location); + + /** -+ * Returns the amount of liquid is in the fluid, as in the number of layers. ++ * Returns the level of liquid this fluid data holds. + * + * @return the amount as an integer, between 0 and 8 + */ + @Range(from = 0, to = 8) -+ int getAmount(); ++ int getLevel(); + + /** -+ * Returns the height of the fluid ++ * Computes the height of the fluid in the world. ++ *

++ * This method requires the passed location's chunk to be loaded. ++ * If said chunk is not loaded when this method is called, the chunk will first be loaded prior to the computation ++ * which leads to a potentially slow sync chunk load. + * ++ * @param location the location at which to check the high of this fluid data. + * @return the height as a float value + */ -+ float getHeight(); ++ @Range(from = 0, to = 1) ++ float computeHeight(@NotNull Location location); + + /** + * Returns whether this fluid is a source block @@ -64,17 +78,20 @@ index 0000000000000000000000000000000000000000..337626ad58dd2be2ed9770e7b1f3fb37 + */ + boolean isSource(); +} -diff --git a/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java b/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/FallingFluidData.java b/src/main/java/io/papermc/paper/block/fluid/type/FallingFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..360a27fca76b0e63aa458aa3425a987224a4ac79 +index 0000000000000000000000000000000000000000..7bd9f28ba646f09080b5c29b9d3be5af676c912e --- /dev/null -+++ b/src/main/java/io/papermc/paper/block/fluid/type/FallingFluid.java -@@ -0,0 +1,13 @@ ++++ b/src/main/java/io/papermc/paper/block/fluid/type/FallingFluidData.java +@@ -0,0 +1,16 @@ +package io.papermc.paper.block.fluid.type; + +import io.papermc.paper.block.fluid.FluidData; + -+public interface FallingFluid extends FluidData { ++/** ++ * A specific subtype of {@link FluidData} that is returned by the API for fluid data of potentially falling fluids. ++ */ ++public interface FallingFluidData extends FluidData { + + /** + * Get if this liquid is falling. @@ -83,33 +100,24 @@ index 0000000000000000000000000000000000000000..360a27fca76b0e63aa458aa3425a9872 + */ + boolean isFalling(); +} -diff --git a/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java b/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidDataData.java b/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidDataData.java new file mode 100644 -index 0000000000000000000000000000000000000000..7a4126d316839581a652ac9cba12a01c279d053e +index 0000000000000000000000000000000000000000..f3a0bc7d4b5539e1dd0785831f04ad539826769b --- /dev/null -+++ b/src/main/java/io/papermc/paper/block/fluid/type/Flowing.java -@@ -0,0 +1,19 @@ ++++ b/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidDataData.java +@@ -0,0 +1,10 @@ +package io.papermc.paper.block.fluid.type; + -+public interface Flowing extends FallingFluid { -+ -+ /** -+ * Get the minimum possible level for the liquid. -+ * -+ * @return the minimum level -+ */ -+ int getMinimumLevel(); ++import io.papermc.paper.block.fluid.FluidData; + -+ /** -+ * Get the maximum possible level for the liquid. -+ * -+ * @return the maximum level -+ */ -+ int getMaximumLevel(); ++/** ++ * A specific subtype of {@link FluidData} that is returned by the API for fluid data of potentially falling fluids. ++ */ ++public interface FlowingFluidDataData extends FallingFluidData { + +} diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java -index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..7ffbda2c53121ba111e3e6ca7034438292f87b94 100644 +index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..d705c2b0015875de3bf2e8122a3008061c40ad02 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java +++ b/src/main/java/org/bukkit/RegionAccessor.java @@ -102,6 +102,30 @@ public interface RegionAccessor extends Keyed { // Paper diff --git a/patches/server/1052-Add-FluidState-API.patch b/patches/server/1058-Add-FluidState-API.patch similarity index 67% rename from patches/server/1052-Add-FluidState-API.patch rename to patches/server/1058-Add-FluidState-API.patch index 99af2f91c038..aad78f5e8591 100644 --- a/patches/server/1052-Add-FluidState-API.patch +++ b/patches/server/1058-Add-FluidState-API.patch @@ -6,19 +6,19 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..daab396d0cbb12d23a1db126551027301a319a22 +index 0000000000000000000000000000000000000000..17fdff8ce72baf2ea1b7dd6b6849c89e6c7267ee --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java -@@ -0,0 +1,112 @@ +@@ -0,0 +1,111 @@ +package io.papermc.paper.block.fluid; + +import com.google.common.base.Preconditions; -+import io.papermc.paper.block.fluid.type.PaperFlowing; -+import io.papermc.paper.block.fluid.type.PaperFallingFluid; ++import io.papermc.paper.block.fluid.type.PaperFallingFluidData; ++import io.papermc.paper.block.fluid.type.PaperFlowingFluidDataData; ++import io.papermc.paper.util.MCUtil; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; -+import io.papermc.paper.util.MCUtil; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.LavaFluid; @@ -29,77 +29,56 @@ index 0000000000000000000000000000000000000000..daab396d0cbb12d23a1db12655102730 +import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.util.CraftVector; +import org.bukkit.util.Vector; ++import org.jetbrains.annotations.NotNull; + +public class PaperFluidData implements FluidData { + -+ private static final Map, Function> MAP = new HashMap<>(); -+ + private final FluidState state; + + protected PaperFluidData(final FluidState state) { + this.state = state; + } + -+ /* Registry */ -+ -+ static { -+ // -+ register(LavaFluid.Source.class, PaperFallingFluid::new); -+ register(WaterFluid.Source.class, PaperFallingFluid::new); -+ register(LavaFluid.Flowing.class, PaperFlowing::new); -+ register(WaterFluid.Flowing.class, PaperFlowing::new); -+ // -+ } -+ -+ static void register(final Class fluid, final Function creator) { -+ Preconditions.checkState(MAP.put(fluid, creator) == null, "Duplicate mapping %s->%s", fluid, creator); -+ MAP.put(fluid, creator); -+ } -+ -+ public static PaperFluidData createData(final FluidState state) { -+ return MAP.getOrDefault(state.getType().getClass(), PaperFluidData::new).apply(state); -+ } -+ -+ /* Impl */ -+ ++ /** ++ * Provides the internal server representation of this fluid data. ++ * @return the fluid state. ++ */ + public FluidState getState() { + return this.state; + } + -+ protected > T get(final Property property) { -+ return this.state.getValue(property); -+ } -+ /* API */ -+ + @Override -+ public final Fluid getFluidType() { ++ public final @NotNull Fluid getFluidType() { + return CraftFluid.minecraftToBukkit(this.state.getType()); + } + + @Override -+ public PaperFluidData clone() { ++ public @NotNull PaperFluidData clone() { + try { + return (PaperFluidData) super.clone(); -+ } catch (CloneNotSupportedException ex) { ++ } catch (final CloneNotSupportedException ex) { + throw new AssertionError("Clone not supported", ex); + } + } + + @Override -+ public Vector getFlowDirection(Location location) { -+ Preconditions.checkArgument(location.getWorld() != null, "The location must contain a World!"); ++ public @NotNull Vector computeFlowDirection(final Location location) { ++ Preconditions.checkArgument(location.getWorld() != null, "Cannot compute flow direction on world-less location"); + return CraftVector.toBukkit(this.state.getFlow( -+ ((CraftWorld) location.getWorld()).getHandle(), MCUtil.toBlockPosition(location))); ++ ((CraftWorld) location.getWorld()).getHandle(), ++ MCUtil.toBlockPosition(location) ++ )); + } + + @Override -+ public int getAmount() { ++ public int getLevel() { + return this.state.getAmount(); + } + + @Override -+ public float getHeight() { -+ return this.state.getOwnHeight(); ++ public float computeHeight(@NotNull final Location location) { ++ Preconditions.checkArgument(location.getWorld() != null, "Cannot compute height on world-less location"); ++ return this.state.getHeight(((CraftWorld) location.getWorld()).getHandle(), MCUtil.toBlockPos(location)); + } + + @Override @@ -113,14 +92,34 @@ index 0000000000000000000000000000000000000000..daab396d0cbb12d23a1db12655102730 + } + + @Override -+ public boolean equals(Object obj) { -+ return obj instanceof PaperFluidData paperFluidData && this.state.equals(paperFluidData.state); ++ public boolean equals(final Object obj) { ++ return obj instanceof final PaperFluidData paperFluidData && this.state.equals(paperFluidData.state); + } + + @Override + public String toString() { + return "PaperFluidData{" + this.state + "}"; + } ++ ++ /* Registry */ ++ private static final Map, Function> MAP = new HashMap<>(); ++ static { ++ // ++ register(LavaFluid.Source.class, PaperFallingFluidData::new); ++ register(WaterFluid.Source.class, PaperFallingFluidData::new); ++ register(LavaFluid.Flowing.class, PaperFlowingFluidDataData::new); ++ register(WaterFluid.Flowing.class, PaperFlowingFluidDataData::new); ++ // ++ } ++ ++ static void register(final Class fluid, final Function creator) { ++ Preconditions.checkState(MAP.put(fluid, creator) == null, "Duplicate mapping %s->%s", fluid, creator); ++ MAP.put(fluid, creator); ++ } ++ ++ public static PaperFluidData createData(final FluidState state) { ++ return MAP.getOrDefault(state.getType().getClass(), PaperFluidData::new).apply(state); ++ } +} diff --git a/src/main/java/io/papermc/paper/block/fluid/package-info.java b/src/main/java/io/papermc/paper/block/fluid/package-info.java new file mode 100644 @@ -133,11 +132,11 @@ index 0000000000000000000000000000000000000000..cfabb814ebd281aab299c6c655266ff3 + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.framework.qual.DefaultQualifier; -diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluid.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluid.java +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluidData.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..bf4b5e1b1c1cd13ed65c3b3fe1af13b8101e8d97 +index 0000000000000000000000000000000000000000..655dbd83ff4e632f1168b75e9b402b05aa9d8edf --- /dev/null -+++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluid.java ++++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFallingFluidData.java @@ -0,0 +1,18 @@ + +package io.papermc.paper.block.fluid.type; @@ -146,31 +145,31 @@ index 0000000000000000000000000000000000000000..bf4b5e1b1c1cd13ed65c3b3fe1af13b8 +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.FluidState; + -+public class PaperFallingFluid extends PaperFluidData implements FallingFluid { ++public class PaperFallingFluidData extends PaperFluidData implements FallingFluidData { + -+ public PaperFallingFluid(final FluidState state) { ++ public PaperFallingFluidData(final FluidState state) { + super(state); + } + + @Override + public boolean isFalling() { -+ return this.get(FlowingFluid.FALLING); ++ return this.getState().getValue(FlowingFluid.FALLING); + } +} -diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidDataData.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidDataData.java new file mode 100644 -index 0000000000000000000000000000000000000000..d4ffc3bd801fdcd889fd85f3448dd25a732c209e +index 0000000000000000000000000000000000000000..7315ba8fde5054a60e1a297aaa4db9b7b2814be7 --- /dev/null -+++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowing.java ++++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidDataData.java @@ -0,0 +1,21 @@ +package io.papermc.paper.block.fluid.type; + +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.FluidState; + -+public class PaperFlowing extends PaperFallingFluid implements Flowing { ++public class PaperFlowingFluidDataData extends PaperFallingFluidData implements FlowingFluidDataData { + -+ public PaperFlowing(final FluidState state) { ++ public PaperFlowingFluidDataData(final FluidState state) { + super(state); + } + @@ -185,10 +184,10 @@ index 0000000000000000000000000000000000000000..d4ffc3bd801fdcd889fd85f3448dd25a + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -index 87698a123ce027b4f7b0dcc9eaf034a5b8de6de3..3091aec84959cd859266c88b7e623f62c1ae2759 100644 +index 45fd28f26aa2e53785919abbfe42bb237131e453..dbfa9b181055d1aac445d82e8950674451098439 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -@@ -255,6 +255,13 @@ public abstract class CraftRegionAccessor implements RegionAccessor { +@@ -107,6 +107,13 @@ public abstract class CraftRegionAccessor implements RegionAccessor { return CraftBlock.at(this.getHandle(), new BlockPos(x, y, z)).getState(); } From 9c9e39584b9e6d421f10edfabd3c38fa1ec189c2 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Fri, 29 Dec 2023 17:14:28 -0500 Subject: [PATCH 10/12] update --- patches/api/0457-Add-FluidState-API.patch | 8 ++--- patches/server/1058-Add-FluidState-API.patch | 33 +++++++------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/patches/api/0457-Add-FluidState-API.patch b/patches/api/0457-Add-FluidState-API.patch index b5ef2d0d33f8..c71cf22a1e42 100644 --- a/patches/api/0457-Add-FluidState-API.patch +++ b/patches/api/0457-Add-FluidState-API.patch @@ -100,11 +100,11 @@ index 0000000000000000000000000000000000000000..7bd9f28ba646f09080b5c29b9d3be5af + */ + boolean isFalling(); +} -diff --git a/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidDataData.java b/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidDataData.java +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidData.java b/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..f3a0bc7d4b5539e1dd0785831f04ad539826769b +index 0000000000000000000000000000000000000000..fbccdffe8d73e517204081c73bca9154f8c7d69f --- /dev/null -+++ b/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidDataData.java ++++ b/src/main/java/io/papermc/paper/block/fluid/type/FlowingFluidData.java @@ -0,0 +1,10 @@ +package io.papermc.paper.block.fluid.type; + @@ -113,7 +113,7 @@ index 0000000000000000000000000000000000000000..f3a0bc7d4b5539e1dd0785831f04ad53 +/** + * A specific subtype of {@link FluidData} that is returned by the API for fluid data of potentially falling fluids. + */ -+public interface FlowingFluidDataData extends FallingFluidData { ++public interface FlowingFluidData extends FallingFluidData { + +} diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java diff --git a/patches/server/1058-Add-FluidState-API.patch b/patches/server/1058-Add-FluidState-API.patch index aad78f5e8591..9b74bf1c8d33 100644 --- a/patches/server/1058-Add-FluidState-API.patch +++ b/patches/server/1058-Add-FluidState-API.patch @@ -6,20 +6,19 @@ Subject: [PATCH] Add FluidState API diff --git a/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..17fdff8ce72baf2ea1b7dd6b6849c89e6c7267ee +index 0000000000000000000000000000000000000000..479bc32241ebadf8bbc1080b601f61391ad37fa4 --- /dev/null +++ b/src/main/java/io/papermc/paper/block/fluid/PaperFluidData.java -@@ -0,0 +1,111 @@ +@@ -0,0 +1,110 @@ +package io.papermc.paper.block.fluid; + +import com.google.common.base.Preconditions; +import io.papermc.paper.block.fluid.type.PaperFallingFluidData; -+import io.papermc.paper.block.fluid.type.PaperFlowingFluidDataData; ++import io.papermc.paper.block.fluid.type.PaperFlowingFluidData; +import io.papermc.paper.util.MCUtil; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; -+import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.LavaFluid; +import net.minecraft.world.level.material.WaterFluid; @@ -107,8 +106,8 @@ index 0000000000000000000000000000000000000000..17fdff8ce72baf2ea1b7dd6b6849c89e + // + register(LavaFluid.Source.class, PaperFallingFluidData::new); + register(WaterFluid.Source.class, PaperFallingFluidData::new); -+ register(LavaFluid.Flowing.class, PaperFlowingFluidDataData::new); -+ register(WaterFluid.Flowing.class, PaperFlowingFluidDataData::new); ++ register(LavaFluid.Flowing.class, PaperFlowingFluidData::new); ++ register(WaterFluid.Flowing.class, PaperFlowingFluidData::new); + // + } + @@ -156,32 +155,22 @@ index 0000000000000000000000000000000000000000..655dbd83ff4e632f1168b75e9b402b05 + return this.getState().getValue(FlowingFluid.FALLING); + } +} -diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidDataData.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidDataData.java +diff --git a/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidData.java b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidData.java new file mode 100644 -index 0000000000000000000000000000000000000000..7315ba8fde5054a60e1a297aaa4db9b7b2814be7 +index 0000000000000000000000000000000000000000..c0c2805cb045cdd835b402776a6923fe2ecc2a99 --- /dev/null -+++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidDataData.java -@@ -0,0 +1,21 @@ ++++ b/src/main/java/io/papermc/paper/block/fluid/type/PaperFlowingFluidData.java +@@ -0,0 +1,11 @@ +package io.papermc.paper.block.fluid.type; + -+import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.FluidState; + -+public class PaperFlowingFluidDataData extends PaperFallingFluidData implements FlowingFluidDataData { ++public class PaperFlowingFluidData extends PaperFallingFluidData implements FlowingFluidData { + -+ public PaperFlowingFluidDataData(final FluidState state) { ++ public PaperFlowingFluidData(final FluidState state) { + super(state); + } + -+ @Override -+ public int getMinimumLevel() { -+ return FlowingFluid.LEVEL.min; -+ } -+ -+ @Override -+ public int getMaximumLevel() { -+ return FlowingFluid.LEVEL.max; -+ } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java index 45fd28f26aa2e53785919abbfe42bb237131e453..dbfa9b181055d1aac445d82e8950674451098439 100644 From 987e01aa84675e7cfb89fe460c647d00a81d8b15 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Sat, 17 Feb 2024 15:28:17 -0500 Subject: [PATCH 11/12] Update --- ...PI.patch => 0463-Add-FluidState-API.patch} | 0 ...PI.patch => 1046-Add-FluidState-API.patch} | 24 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) rename patches/api/{0457-Add-FluidState-API.patch => 0463-Add-FluidState-API.patch} (100%) rename patches/server/{1058-Add-FluidState-API.patch => 1046-Add-FluidState-API.patch} (84%) diff --git a/patches/api/0457-Add-FluidState-API.patch b/patches/api/0463-Add-FluidState-API.patch similarity index 100% rename from patches/api/0457-Add-FluidState-API.patch rename to patches/api/0463-Add-FluidState-API.patch diff --git a/patches/server/1058-Add-FluidState-API.patch b/patches/server/1046-Add-FluidState-API.patch similarity index 84% rename from patches/server/1058-Add-FluidState-API.patch rename to patches/server/1046-Add-FluidState-API.patch index 9b74bf1c8d33..0b55bd89fe61 100644 --- a/patches/server/1058-Add-FluidState-API.patch +++ b/patches/server/1046-Add-FluidState-API.patch @@ -173,7 +173,7 @@ index 0000000000000000000000000000000000000000..c0c2805cb045cdd835b402776a6923fe + +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -index 45fd28f26aa2e53785919abbfe42bb237131e453..dbfa9b181055d1aac445d82e8950674451098439 100644 +index 9dd6012556979514f9879f867138bc836c58ef3f..1df2202277ab58d7de844f7bebc07e494a0ecdf3 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java @@ -107,6 +107,13 @@ public abstract class CraftRegionAccessor implements RegionAccessor { @@ -190,3 +190,25 @@ index 45fd28f26aa2e53785919abbfe42bb237131e453..dbfa9b181055d1aac445d82e89506744 @Override public BlockData getBlockData(Location location) { return this.getBlockData(location.getBlockX(), location.getBlockY(), location.getBlockZ()); +diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java +index ca9bb98ccfc3863c2ba538953470ab9e2b8a2f29..7df9cc8fa96a7ba2b60fa442f2a622843345b4e5 100644 +--- a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java ++++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java +@@ -303,4 +303,17 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe + return centerChunkZ; + } + // Paper end - Add more LimitedRegion API ++ // Paper start - Fluid API ++ @Override ++ public io.papermc.paper.block.fluid.FluidData getFluidData(int x, int y, int z) { ++ Preconditions.checkArgument(this.isInRegion(x, y, z), "Coordinates %s, %s, %s are not in the region", x, y, z); ++ return super.getFluidData(x, y, z); ++ } ++ ++ @Override ++ public io.papermc.paper.block.fluid.FluidData getFluidData(io.papermc.paper.math.Position position) { ++ Preconditions.checkArgument(this.isInRegion(position.blockX(), position.blockY(), position.blockZ()), "Coordinates %s, %s, %s are not in the region", position.blockX(), position.blockY(), position.blockZ()); ++ return super.getFluidData(position); ++ } ++ // Paper end + } From 8d4c9ef22eed9669782c8a7405b6f82e3e03d6b2 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Sat, 17 Feb 2024 15:30:24 -0500 Subject: [PATCH 12/12] Update --- patches/api/0463-Add-FluidState-API.patch | 15 +++++++++++++-- patches/server/1046-Add-FluidState-API.patch | 10 ++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/patches/api/0463-Add-FluidState-API.patch b/patches/api/0463-Add-FluidState-API.patch index c71cf22a1e42..3235c393f5f9 100644 --- a/patches/api/0463-Add-FluidState-API.patch +++ b/patches/api/0463-Add-FluidState-API.patch @@ -117,10 +117,10 @@ index 0000000000000000000000000000000000000000..fbccdffe8d73e517204081c73bca9154 + +} diff --git a/src/main/java/org/bukkit/RegionAccessor.java b/src/main/java/org/bukkit/RegionAccessor.java -index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..d705c2b0015875de3bf2e8122a3008061c40ad02 100644 +index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..eb33e8e671972aa308ad75a7ce9aa9ac526f470f 100644 --- a/src/main/java/org/bukkit/RegionAccessor.java +++ b/src/main/java/org/bukkit/RegionAccessor.java -@@ -102,6 +102,30 @@ public interface RegionAccessor extends Keyed { // Paper +@@ -102,6 +102,41 @@ public interface RegionAccessor extends Keyed { // Paper @NotNull BlockState getBlockState(int x, int y, int z); @@ -146,6 +146,17 @@ index 43dd6c59cceba12f27e6b265acc3ad97eea37abd..d705c2b0015875de3bf2e8122a300806 + default io.papermc.paper.block.fluid.FluidData getFluidData(@NotNull io.papermc.paper.math.Position position) { + return getFluidData(position.blockX(), position.blockY(), position.blockZ()); + } ++ ++ /** ++ * Gets the {@link io.papermc.paper.block.fluid.FluidData} at the given position ++ * ++ * @param location The location of the fluid ++ * @return The fluid data at the given position ++ */ ++ @NotNull ++ default io.papermc.paper.block.fluid.FluidData getFluidData(@NotNull Location location) { ++ return getFluidData(location.blockX(), location.blockY(), location.blockZ()); ++ } + // Paper end + /** diff --git a/patches/server/1046-Add-FluidState-API.patch b/patches/server/1046-Add-FluidState-API.patch index 0b55bd89fe61..93e022238dbd 100644 --- a/patches/server/1046-Add-FluidState-API.patch +++ b/patches/server/1046-Add-FluidState-API.patch @@ -191,10 +191,10 @@ index 9dd6012556979514f9879f867138bc836c58ef3f..1df2202277ab58d7de844f7bebc07e49 public BlockData getBlockData(Location location) { return this.getBlockData(location.getBlockX(), location.getBlockY(), location.getBlockZ()); diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java -index ca9bb98ccfc3863c2ba538953470ab9e2b8a2f29..7df9cc8fa96a7ba2b60fa442f2a622843345b4e5 100644 +index ca9bb98ccfc3863c2ba538953470ab9e2b8a2f29..a2edef9739bad941f8e581da126bbfeac7cab5d8 100644 --- a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java +++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java -@@ -303,4 +303,17 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe +@@ -303,4 +303,11 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe return centerChunkZ; } // Paper end - Add more LimitedRegion API @@ -204,11 +204,5 @@ index ca9bb98ccfc3863c2ba538953470ab9e2b8a2f29..7df9cc8fa96a7ba2b60fa442f2a62284 + Preconditions.checkArgument(this.isInRegion(x, y, z), "Coordinates %s, %s, %s are not in the region", x, y, z); + return super.getFluidData(x, y, z); + } -+ -+ @Override -+ public io.papermc.paper.block.fluid.FluidData getFluidData(io.papermc.paper.math.Position position) { -+ Preconditions.checkArgument(this.isInRegion(position.blockX(), position.blockY(), position.blockZ()), "Coordinates %s, %s, %s are not in the region", position.blockX(), position.blockY(), position.blockZ()); -+ return super.getFluidData(position); -+ } + // Paper end }