Search in sources :

Example 26 with AABB

use of org.spongepowered.api.util.AABB in project LanternServer by LanternPowered.

the class ShulkerBoxInteractionBehavior method validateOpenableSpace.

@Override
protected boolean validateOpenableSpace(BehaviorContext context, Location<World> location, List<Runnable> tasks) {
    final Direction facing = location.getBlock().getTraitValue(LanternEnumTraits.FACING).get();
    final Location<World> relLocation = location.getBlockRelative(facing);
    final AABB aabb = relLocation.getExtent().getBlockSelectionBox(relLocation.getBlockPosition()).orElse(null);
    if (aabb != null && getExtendedAABB(facing).offset(relLocation.getBlockPosition()).intersects(aabb)) {
        final ReplaceableProperty replaceableProperty = relLocation.getProperty(ReplaceableProperty.class).orElse(null);
        // Replaceable blocks will be replaced when opened
        if (replaceableProperty != null && replaceableProperty.getValue()) {
            tasks.add(() -> context.addBlockChange(BlockSnapshotBuilder.create().location(relLocation).blockState(BlockTypes.AIR.getDefaultState()).build()));
            // TODO: Use break block pipeline instead
            return true;
        }
        return false;
    }
    return true;
}
Also used : ReplaceableProperty(org.spongepowered.api.data.property.block.ReplaceableProperty) World(org.spongepowered.api.world.World) Direction(org.spongepowered.api.util.Direction) AABB(org.spongepowered.api.util.AABB)

Aggregations

AABB (org.spongepowered.api.util.AABB)26 Test (org.junit.jupiter.api.Test)14 Vector3d (org.spongepowered.math.vector.Vector3d)13 Vector3d (com.flowpowered.math.vector.Vector3d)3 ImmutableSet (com.google.common.collect.ImmutableSet)3 World (org.spongepowered.api.world.World)3 Vector3i (org.spongepowered.math.vector.Vector3i)3 Vector3i (com.flowpowered.math.vector.Vector3i)2 CachedSimpleObjectProvider (org.lanternpowered.server.block.provider.CachedSimpleObjectProvider)2 ConstantObjectProvider (org.lanternpowered.server.block.provider.ConstantObjectProvider)2 SimpleObjectProvider (org.lanternpowered.server.block.provider.SimpleObjectProvider)2 ReplaceableProperty (org.spongepowered.api.data.property.block.ReplaceableProperty)2 Direction (org.spongepowered.api.util.Direction)2 Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)1 Inject (com.google.inject.Inject)1 ArrayList (java.util.ArrayList)1 BitSet (java.util.BitSet)1 Collection (java.util.Collection)1 List (java.util.List)1 Consumer (java.util.function.Consumer)1