diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/AttachedStemBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/AttachedStemBlockBehavior.java index f35d35159..a156a4f61 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/AttachedStemBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/AttachedStemBlockBehavior.java @@ -9,6 +9,7 @@ import net.momirealms.craftengine.core.block.BlockBehavior; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.behavior.IsPathFindableBlockBehavior; import net.momirealms.craftengine.core.block.properties.IntegerProperty; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.util.HorizontalDirection; @@ -20,7 +21,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; -public class AttachedStemBlockBehavior extends BukkitBlockBehavior { +public class AttachedStemBlockBehavior extends BukkitBlockBehavior implements IsPathFindableBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property facingProperty; private final Key fruit; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java index 098092f9f..a93cdf0e3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java @@ -15,6 +15,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.behavior.IsPathFindableBlockBehavior; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.block.properties.type.DoorHinge; import net.momirealms.craftengine.core.block.properties.type.DoubleBlockHalf; @@ -46,7 +47,7 @@ import java.util.Optional; import java.util.concurrent.Callable; @SuppressWarnings("DuplicatedCode") -public class DoorBlockBehavior extends AbstractCanSurviveBlockBehavior { +public class DoorBlockBehavior extends AbstractCanSurviveBlockBehavior implements IsPathFindableBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property halfProperty; private final Property facingProperty; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceBlockBehavior.java index 520c7b37d..bb84f9bd7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceBlockBehavior.java @@ -11,6 +11,7 @@ import net.momirealms.craftengine.core.block.BlockStateWrapper; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.behavior.IsPathFindableBlockBehavior; import net.momirealms.craftengine.core.block.properties.BooleanProperty; import net.momirealms.craftengine.core.entity.player.InteractionHand; import net.momirealms.craftengine.core.entity.player.InteractionResult; @@ -30,7 +31,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; -public class FenceBlockBehavior extends BukkitBlockBehavior { +public class FenceBlockBehavior extends BukkitBlockBehavior implements IsPathFindableBlockBehavior { public static final Factory FACTORY = new Factory(); private final BooleanProperty northProperty; private final BooleanProperty eastProperty; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java index 03f0d1a11..64c86a1ca 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FenceGateBlockBehavior.java @@ -12,6 +12,7 @@ import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.bukkit.world.BukkitWorld; import net.momirealms.craftengine.core.block.*; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.behavior.IsPathFindableBlockBehavior; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.entity.player.InteractionResult; import net.momirealms.craftengine.core.entity.player.Player; @@ -40,7 +41,7 @@ import java.util.Optional; import java.util.concurrent.Callable; @SuppressWarnings("DuplicatedCode") -public class FenceGateBlockBehavior extends BukkitBlockBehavior { +public class FenceGateBlockBehavior extends BukkitBlockBehavior implements IsPathFindableBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property facingProperty; private final Property inWallProperty; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java index cf3137dd0..732aeb27e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java @@ -9,6 +9,7 @@ import net.momirealms.craftengine.core.block.BlockBehavior; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.behavior.IsPathFindableBlockBehavior; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.block.properties.type.SlabType; import net.momirealms.craftengine.core.item.CustomItem; @@ -24,7 +25,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; -public class SlabBlockBehavior extends BukkitBlockBehavior { +public class SlabBlockBehavior extends BukkitBlockBehavior implements IsPathFindableBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property typeProperty; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StemBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StemBlockBehavior.java index 69755b7ac..452528c54 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StemBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StemBlockBehavior.java @@ -13,6 +13,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.behavior.IsPathFindableBlockBehavior; import net.momirealms.craftengine.core.block.properties.IntegerProperty; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.util.*; @@ -21,7 +22,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; -public class StemBlockBehavior extends BukkitBlockBehavior { +public class StemBlockBehavior extends BukkitBlockBehavior implements IsPathFindableBlockBehavior { public static final Factory FACTORY = new Factory(); private final IntegerProperty ageProperty; private final Key fruit; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java index e945d546c..7d2793e02 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java @@ -14,6 +14,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.behavior.IsPathFindableBlockBehavior; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.block.properties.type.SingleBlockHalf; import net.momirealms.craftengine.core.entity.player.InteractionResult; @@ -40,7 +41,7 @@ import java.util.Optional; import java.util.concurrent.Callable; @SuppressWarnings("DuplicatedCode") -public class TrapDoorBlockBehavior extends BukkitBlockBehavior { +public class TrapDoorBlockBehavior extends BukkitBlockBehavior implements IsPathFindableBlockBehavior { public static final Factory FACTORY = new Factory(); private final Property halfProperty; private final Property facingProperty; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/UnsafeCompositeBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/UnsafeCompositeBlockBehavior.java index c487b4ab1..3ddde1aa7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/UnsafeCompositeBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/UnsafeCompositeBlockBehavior.java @@ -2,10 +2,7 @@ package net.momirealms.craftengine.bukkit.block.behavior; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; -import net.momirealms.craftengine.core.block.behavior.AbstractBlockBehavior; -import net.momirealms.craftengine.core.block.behavior.EntityBlockBehavior; -import net.momirealms.craftengine.core.block.behavior.FallOnBlockBehavior; -import net.momirealms.craftengine.core.block.behavior.PlaceLiquidBlockBehavior; +import net.momirealms.craftengine.core.block.behavior.*; import net.momirealms.craftengine.core.entity.player.InteractionResult; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.item.context.UseOnContext; @@ -18,7 +15,7 @@ import java.util.Optional; import java.util.concurrent.Callable; public class UnsafeCompositeBlockBehavior extends BukkitBlockBehavior - implements FallOnBlockBehavior, PlaceLiquidBlockBehavior { + implements FallOnBlockBehavior, PlaceLiquidBlockBehavior, IsPathFindableBlockBehavior { private final AbstractBlockBehavior[] behaviors; public UnsafeCompositeBlockBehavior(CustomBlock customBlock, List behaviors) { @@ -237,12 +234,18 @@ public class UnsafeCompositeBlockBehavior extends BukkitBlockBehavior @Override public boolean isPathFindable(Object thisBlock, Object[] args, Callable superMethod) throws Exception { + boolean processed = false; for (AbstractBlockBehavior behavior : this.behaviors) { - if (!behavior.isPathFindable(thisBlock, args, superMethod)) { - return false; + if (behavior instanceof IsPathFindableBlockBehavior pathFindableBlockBehavior) { + if (!pathFindableBlockBehavior.isPathFindable(thisBlock, args, superMethod)) { + return false; + } else { + processed = true; + } } } - return (boolean) superMethod.call(); + if (!processed) return (boolean) superMethod.call(); + return true; } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/behavior/IsPathFindableBlockBehavior.java b/core/src/main/java/net/momirealms/craftengine/core/block/behavior/IsPathFindableBlockBehavior.java new file mode 100644 index 000000000..7fe7d8e06 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/behavior/IsPathFindableBlockBehavior.java @@ -0,0 +1,10 @@ +package net.momirealms.craftengine.core.block.behavior; + +import java.util.concurrent.Callable; + +public interface IsPathFindableBlockBehavior { + + // 1.20-1.20.4 BlockState state, BlockGetter world, BlockPos pos, PathComputationType type + // 1.20.5+ BlockState state, PathComputationType pathComputationType + boolean isPathFindable(Object thisBlock, Object[] args, Callable superMethod) throws Exception; +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/HandCondition.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/HandCondition.java index 146807f4d..eea93f8c8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/HandCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/HandCondition.java @@ -5,7 +5,6 @@ import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.util.ArrayUtils; import net.momirealms.craftengine.core.util.EnumUtils; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils;