diff --git a/verification/src/changes/accepted-bukkit-public-api-changes.json b/verification/src/changes/accepted-bukkit-public-api-changes.json index 2c63c08510..b0c197718f 100644 --- a/verification/src/changes/accepted-bukkit-public-api-changes.json +++ b/verification/src/changes/accepted-bukkit-public-api-changes.json @@ -1,2 +1,12 @@ { + "Replaced by default method": [ + { + "type": "com.sk89q.worldedit.bukkit.BukkitBlockRegistry", + "member": "Method com.sk89q.worldedit.bukkit.BukkitBlockRegistry.getMaterial(com.sk89q.worldedit.world.block.BlockType)", + "changes": [ + "METHOD_REMOVED", + "ANNOTATION_REMOVED" + ] + } + ] } diff --git a/verification/src/changes/accepted-core-public-api-changes.json b/verification/src/changes/accepted-core-public-api-changes.json index 299d6c18aa..64db03f327 100644 --- a/verification/src/changes/accepted-core-public-api-changes.json +++ b/verification/src/changes/accepted-core-public-api-changes.json @@ -100,6 +100,22 @@ "ANNOTATION_REMOVED" ] }, + { + "type": "com.sk89q.worldedit.world.registry.BlockMaterial", + "member": "Method com.sk89q.worldedit.world.registry.BlockMaterial.isFullCube()", + "changes": [ + "METHOD_ABSTRACT_NOW_DEFAULT", + "ANNOTATION_DEPRECATED_ADDED" + ] + }, + { + "type": "com.sk89q.worldedit.world.registry.BlockRegistry", + "member": "Method com.sk89q.worldedit.world.registry.BlockRegistry.getMaterial(com.sk89q.worldedit.world.block.BlockType)", + "changes": [ + "METHOD_ABSTRACT_NOW_DEFAULT", + "ANNOTATION_DEPRECATED_ADDED" + ] + }, { "type": "com.sk89q.worldedit.world.registry.BlockRegistry", "member": "Method com.sk89q.worldedit.world.registry.BlockRegistry.getName(com.sk89q.worldedit.world.block.BlockType)", diff --git a/verification/src/changes/accepted-sponge-public-api-changes.json b/verification/src/changes/accepted-sponge-public-api-changes.json index 2c63c08510..3afedbaad5 100644 --- a/verification/src/changes/accepted-sponge-public-api-changes.json +++ b/verification/src/changes/accepted-sponge-public-api-changes.json @@ -1,2 +1,18 @@ { + "Replaced by default method": [ + { + "type": "com.sk89q.worldedit.sponge.SpongeBlockRegistry", + "member": "Method com.sk89q.worldedit.sponge.SpongeBlockRegistry.getMaterial(com.sk89q.worldedit.world.block.BlockType)", + "changes": [ + "METHOD_REMOVED" + ] + }, + { + "type": "com.sk89q.worldedit.sponge.SpongeBlockMaterial", + "member": "Method com.sk89q.worldedit.sponge.SpongeBlockMaterial.isFullCube()", + "changes": [ + "METHOD_REMOVED" + ] + } + ] } diff --git a/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightAdapter.java index fdce051ad0..2ef5eae467 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightAdapter.java @@ -606,6 +606,11 @@ public BlockMaterial getBlockMaterial(BlockType blockType) { return new PaperweightBlockMaterial(mcBlockState); } + @Override + public BlockMaterial getBlockMaterial(BlockState blockState) { + return new PaperweightBlockMaterial(adapt(blockState)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static final LoadingCache> PROPERTY_CACHE = CacheBuilder.newBuilder().build(new CacheLoader<>() { @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightBlockMaterial.java index 2113b1ee1d..4a5a4c6713 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.bukkit.adapter.impl.v1_21_11; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,8 +28,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PaperweightBlockMaterial implements BlockMaterial { +public class PaperweightBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -41,9 +44,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightAdapter.java index 07b10f53b5..df8ffa70c8 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightAdapter.java @@ -587,6 +587,11 @@ public BlockMaterial getBlockMaterial(BlockType blockType) { return new PaperweightBlockMaterial(mcBlockState); } + @Override + public BlockMaterial getBlockMaterial(BlockState blockState) { + return new PaperweightBlockMaterial(adapt(blockState)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static final LoadingCache> PROPERTY_CACHE = CacheBuilder.newBuilder().build(new CacheLoader<>() { @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightBlockMaterial.java index 10c1f7d222..9c4bc71ba8 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.bukkit.adapter.impl.v1_21_4; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,8 +28,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PaperweightBlockMaterial implements BlockMaterial { +public class PaperweightBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -41,9 +44,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightAdapter.java index 1dd1595d30..f7cca60ccd 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightAdapter.java @@ -585,6 +585,11 @@ public BlockMaterial getBlockMaterial(BlockType blockType) { return new PaperweightBlockMaterial(mcBlockState); } + @Override + public BlockMaterial getBlockMaterial(BlockState blockState) { + return new PaperweightBlockMaterial(adapt(blockState)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static final LoadingCache> PROPERTY_CACHE = CacheBuilder.newBuilder().build(new CacheLoader<>() { @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightBlockMaterial.java index bb44cd3fec..a79bcee843 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.bukkit.adapter.impl.v1_21_5; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,8 +28,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PaperweightBlockMaterial implements BlockMaterial { +public class PaperweightBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -41,9 +44,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightAdapter.java index dc75fb35e0..9f7a9136ee 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightAdapter.java @@ -607,6 +607,11 @@ public BlockMaterial getBlockMaterial(BlockType blockType) { return new PaperweightBlockMaterial(mcBlockState); } + @Override + public BlockMaterial getBlockMaterial(BlockState blockState) { + return new PaperweightBlockMaterial(adapt(blockState)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static final LoadingCache> PROPERTY_CACHE = CacheBuilder.newBuilder().build(new CacheLoader<>() { @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightBlockMaterial.java index 8042660f50..8bc2087618 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.bukkit.adapter.impl.v1_21_6; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,8 +28,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PaperweightBlockMaterial implements BlockMaterial { +public class PaperweightBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -41,9 +44,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightAdapter.java index c9959eef6f..9321bbc421 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightAdapter.java @@ -606,6 +606,11 @@ public BlockMaterial getBlockMaterial(BlockType blockType) { return new PaperweightBlockMaterial(mcBlockState); } + @Override + public BlockMaterial getBlockMaterial(BlockState blockState) { + return new PaperweightBlockMaterial(adapt(blockState)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static final LoadingCache> PROPERTY_CACHE = CacheBuilder.newBuilder().build(new CacheLoader<>() { @Override diff --git a/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightBlockMaterial.java index 1df238afb7..d3c3e29e5c 100644 --- a/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.bukkit.adapter.impl.v1_21_9; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,8 +28,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PaperweightBlockMaterial implements BlockMaterial { +public class PaperweightBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -41,9 +44,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightAdapter.java index ac79eb3e3a..80b252ec6f 100644 --- a/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightAdapter.java @@ -623,6 +623,11 @@ public BlockMaterial getBlockMaterial(BlockType blockType) { return new PaperweightBlockMaterial(mcBlockState); } + @Override + public BlockMaterial getBlockMaterial(BlockState blockState) { + return new PaperweightBlockMaterial(adapt(blockState)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static final LoadingCache> PROPERTY_CACHE = CacheBuilder.newBuilder().build(new CacheLoader<>() { @Override diff --git a/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java index 157d92e47f..84ef9643df 100644 --- a/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.bukkit.adapter.impl.v26_1; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,8 +28,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PaperweightBlockMaterial implements BlockMaterial { +public class PaperweightBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -41,9 +44,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightAdapter.java index 9d9f0f66d4..3e2ad57b03 100644 --- a/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightAdapter.java @@ -628,6 +628,11 @@ public BlockMaterial getBlockMaterial(BlockType blockType) { return new PaperweightBlockMaterial(mcBlockState); } + @Override + public BlockMaterial getBlockMaterial(BlockState blockState) { + return new PaperweightBlockMaterial(adapt(blockState)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static final LoadingCache> PROPERTY_CACHE = CacheBuilder.newBuilder().build(new CacheLoader<>() { @Override diff --git a/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java index cd738be493..55e02fb9e7 100644 --- a/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.bukkit.adapter.impl.v26_2; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,8 +28,10 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; -public class PaperweightBlockMaterial implements BlockMaterial { +public class PaperweightBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -41,9 +44,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBlockRegistry.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBlockRegistry.java index fe81dbd032..da8b84698b 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBlockRegistry.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBlockRegistry.java @@ -37,7 +37,7 @@ import javax.annotation.Nullable; public class BukkitBlockRegistry implements BlockRegistry { - private final Map materialMap = new HashMap<>(); + private final Map materialMap = new HashMap<>(); @Override public Component getRichName(BlockType blockType) { @@ -49,15 +49,16 @@ public Component getRichName(BlockType blockType) { @Nullable @Override - public BlockMaterial getMaterial(BlockType blockType) { - Material mat = BukkitAdapter.adapt(blockType); - if (mat == null) { - return null; - } - return materialMap.computeIfAbsent(mat, material -> { + public BlockMaterial getMaterial(BlockState blockState) { + return materialMap.computeIfAbsent(blockState, _ -> { + Material material = BukkitAdapter.adapt(blockState.getBlockType()); + if (material == null) { + // return null means create no mapping + return null; + } BlockMaterial platformMaterial = null; if (WorldEditPlugin.getInstance().getBukkitImplAdapter() != null) { - platformMaterial = WorldEditPlugin.getInstance().getBukkitImplAdapter().getBlockMaterial(blockType); + platformMaterial = WorldEditPlugin.getInstance().getBukkitImplAdapter().getBlockMaterial(blockState); } return new BukkitBlockMaterial(platformMaterial, material); }); diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplAdapter.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplAdapter.java index caa8ad3a26..4ac3147a4e 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplAdapter.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplAdapter.java @@ -164,6 +164,17 @@ default void tickWatchdog() { @Nullable BlockMaterial getBlockMaterial(BlockType blockType); + /** + * Gets the block material for the given block state. + * + * @param blockState the block state + * @return the material + */ + @Nullable + default BlockMaterial getBlockMaterial(BlockState blockState) { + return getBlockMaterial(blockState.getBlockType()); + } + /** * Get a map of {@code string -> property}. * diff --git a/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockMaterial.java b/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockMaterial.java index 16c5f731b5..ce8c7480b5 100644 --- a/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockMaterial.java +++ b/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.coremc.internal; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,12 +28,14 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; /** * Minecraft block material implementation for platforms sharing native code. * Pulls as much info as possible from the Minecraft BlockState. */ -public final class CoreMcBlockMaterial implements BlockMaterial { +public final class CoreMcBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -45,9 +48,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockRegistry.java b/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockRegistry.java index cc1399ea0e..b211a3afa3 100644 --- a/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockRegistry.java +++ b/worldedit-core-mc/src/main/java/com/sk89q/worldedit/coremc/internal/CoreMcBlockRegistry.java @@ -56,10 +56,9 @@ public Component getRichName(BlockType blockType) { } @Override - public BlockMaterial getMaterial(BlockType blockType) { - Block block = platform.getAdapter().toNativeBlock(blockType); + public BlockMaterial getMaterial(BlockState blockState) { return materialMap.computeIfAbsent( - block.defaultBlockState(), + platform.getAdapter().toNativeBlockState(blockState), CoreMcBlockMaterial::new ); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ShapeType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ShapeType.java new file mode 100644 index 0000000000..56eb14e3fd --- /dev/null +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/ShapeType.java @@ -0,0 +1,32 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.blocks; + +public enum ShapeType { + /** + * Block shape that's used internally as a default/fallback for many of the others, mostly in less complex blocks. + */ + SHAPE, + + /** + * Block shape that most closely corresponds to what's visible or not. + */ + VISUAL_SHAPE, +} diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FullCubeMask.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FullCubeMask.java index d7a8a8165b..6983c8cb05 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FullCubeMask.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FullCubeMask.java @@ -19,6 +19,7 @@ package com.sk89q.worldedit.function.mask; +import com.sk89q.worldedit.blocks.ShapeType; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.world.block.BlockState; @@ -33,7 +34,7 @@ public FullCubeMask(Extent extent) { public boolean test(BlockVector3 vector) { Extent extent = getExtent(); BlockState block = extent.getBlock(vector); - return block.getBlockType().getMaterial().isFullCube(); + return block.getBlockType().getMaterial().isFullCube(ShapeType.SHAPE); } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/block/AbstractBlockMaterial.java b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/block/AbstractBlockMaterial.java new file mode 100644 index 0000000000..8b9aad0596 --- /dev/null +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/block/AbstractBlockMaterial.java @@ -0,0 +1,47 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.internal.block; + +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.util.concurrency.LazyReference; +import com.sk89q.worldedit.world.registry.BlockMaterial; + +import java.util.EnumSet; + +public abstract class AbstractBlockMaterial implements BlockMaterial { + @SuppressWarnings("this-escape") + public LazyReference> isFullCube = LazyReference.from(() -> { + EnumSet enumSet = EnumSet.noneOf(ShapeType.class); + for (ShapeType shapeType : ShapeType.values()) { + if (isShapeFullBlock(shapeType)) { + enumSet.add(shapeType); + } + } + + return enumSet; + }); + + @Override + public boolean isFullCube(ShapeType shapeType) { + return isFullCube.getValue().contains(shapeType); + } + + protected abstract boolean isShapeFullBlock(ShapeType shapeType); +} diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java index 4a2e9edfe1..102beac7ad 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java @@ -25,6 +25,7 @@ import com.sk89q.worldedit.registry.state.Property; import com.sk89q.worldedit.util.concurrency.LazyReference; import com.sk89q.worldedit.world.fluid.FluidState; +import com.sk89q.worldedit.world.registry.BlockMaterial; import org.enginehub.linbus.tree.LinCompoundTag; import java.util.HashSet; @@ -80,6 +81,11 @@ public BlockType getBlockType() { return this.blockType; } + public BlockMaterial getMaterial() { + return WorldEdit.getInstance().getPlatformManager() + .queryCapability(Capability.GAME_HOOKS).getRegistries().getBlockRegistry().getMaterial(this); + } + @Override public BlockState with(final Property property, final V value) { if (this.stateListIndex == -1) { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockType.java index 37f0da6494..e02eb50d41 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockType.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockType.java @@ -72,7 +72,7 @@ public class BlockType implements Keyed { @SuppressWarnings("this-escape") private final LazyReference blockMaterial = LazyReference.from(() -> WorldEdit.getInstance().getPlatformManager() - .queryCapability(Capability.GAME_HOOKS).getRegistries().getBlockRegistry().getMaterial(this)); + .queryCapability(Capability.GAME_HOOKS).getRegistries().getBlockRegistry().getMaterial(getDefaultState())); @SuppressWarnings("this-escape") private final LazyReference legacyId = LazyReference.from(() -> computeLegacy(0)); @SuppressWarnings("this-escape") diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockMaterial.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockMaterial.java index d280f2cc0e..6bc0e31278 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockMaterial.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockMaterial.java @@ -19,6 +19,8 @@ package com.sk89q.worldedit.world.registry; +import com.sk89q.worldedit.blocks.ShapeType; + /** * Describes the material for a block. */ @@ -35,8 +37,20 @@ public interface BlockMaterial { * Get whether this block is a full sized cube. * * @return the value of the test + * @deprecated Use {@link BlockMaterial#isFullCube(ShapeType)} instead. + */ + @Deprecated + default boolean isFullCube() { + return isFullCube(ShapeType.SHAPE); + } + + /** + * Get whether this block is a full sized cube. + * + * @param shapeType which shape of the block to test + * @return the value of the test */ - boolean isFullCube(); + boolean isFullCube(ShapeType shapeType); /** * Get whether this block is opaque. diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java index 47debab315..74ea8eb0d9 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java @@ -19,6 +19,7 @@ package com.sk89q.worldedit.world.registry; +import com.sk89q.worldedit.internal.util.NonAbstractForCompatibility; import com.sk89q.worldedit.registry.state.Property; import com.sk89q.worldedit.util.formatting.text.Component; import com.sk89q.worldedit.world.block.BlockState; @@ -48,9 +49,30 @@ public interface BlockRegistry { * * @param blockType the block * @return the material, or null if the material information is not known + * @deprecated Use {@link BlockRegistry#getMaterial(BlockState)} instead. */ + @Deprecated @Nullable - BlockMaterial getMaterial(BlockType blockType); + default BlockMaterial getMaterial(BlockType blockType) { + return getMaterial(blockType.getDefaultState()); + } + + /** + * Get the material for the given block state. + * + * @param blockState the block state + * @return the material, or null if the material information is not known + * @apiNote This must be overridden by new subclasses. See {@link NonAbstractForCompatibility} + * for details + */ + @NonAbstractForCompatibility( + delegateName = "getMaterial", + delegateParams = { BlockType.class } + ) + @Nullable + default BlockMaterial getMaterial(BlockState blockState) { + return getMaterial(blockState.getBlockType()); + } /** * Get an unmodifiable map of states for this block. diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java index 799fe94185..e00964aca1 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java @@ -59,8 +59,8 @@ public Component getRichName(BlockType blockType) { @Nullable @Override - public BlockMaterial getMaterial(BlockType blockType) { - return new PassthroughBlockMaterial(BundledBlockData.getInstance().getMaterialById(blockType.id())); + public BlockMaterial getMaterial(BlockType blockState) { + return new PassthroughBlockMaterial(BundledBlockData.getInstance().getMaterialById(blockState.id())); } @Nullable diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/PassthroughBlockMaterial.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/PassthroughBlockMaterial.java index e868276a63..a601bd362d 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/PassthroughBlockMaterial.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/PassthroughBlockMaterial.java @@ -19,6 +19,8 @@ package com.sk89q.worldedit.world.registry; +import com.sk89q.worldedit.blocks.ShapeType; + import javax.annotation.Nullable; import static com.sk89q.worldedit.util.GuavaUtil.firstNonNull; @@ -49,8 +51,8 @@ public boolean isAir() { } @Override - public boolean isFullCube() { - return blockMaterial.isFullCube(); + public boolean isFullCube(ShapeType shapeType) { + return blockMaterial.isFullCube(shapeType); } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java index de70a38619..d2cc6c92d1 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java @@ -19,6 +19,8 @@ package com.sk89q.worldedit.world.registry; +import com.sk89q.worldedit.blocks.ShapeType; + class SimpleBlockMaterial implements BlockMaterial { private boolean isAir; @@ -51,7 +53,7 @@ public void setIsAir(boolean isAir) { } @Override - public boolean isFullCube() { + public boolean isFullCube(ShapeType shapeType) { return fullCube; } diff --git a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockMaterial.java b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockMaterial.java index 4dd6622de4..c7eab6364b 100644 --- a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockMaterial.java +++ b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockMaterial.java @@ -19,7 +19,8 @@ package com.sk89q.worldedit.sponge; -import com.sk89q.worldedit.world.registry.BlockMaterial; +import com.sk89q.worldedit.blocks.ShapeType; +import com.sk89q.worldedit.internal.block.AbstractBlockMaterial; import net.minecraft.core.BlockPos; import net.minecraft.world.Clearable; import net.minecraft.world.level.EmptyBlockGetter; @@ -27,13 +28,15 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; /** * Sponge block material that pulls as much info as possible from the Minecraft * Material, and passes the rest to another implementation, typically the * bundled block info. */ -public class SpongeBlockMaterial implements BlockMaterial { +public class SpongeBlockMaterial extends AbstractBlockMaterial { private final BlockState block; @@ -46,9 +49,16 @@ public boolean isAir() { return block.isAir(); } + private VoxelShape getShape(ShapeType shapeType) { + return switch (shapeType) { + case SHAPE -> block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + case VISUAL_SHAPE -> block.getVisualShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty()); + }; + } + @Override - public boolean isFullCube() { - return Block.isShapeFullBlock(block.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + protected boolean isShapeFullBlock(ShapeType shapeType) { + return Block.isShapeFullBlock(getShape(shapeType)); } @Override diff --git a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockRegistry.java b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockRegistry.java index 1220daa5ef..17ed83787d 100644 --- a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockRegistry.java +++ b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeBlockRegistry.java @@ -54,19 +54,16 @@ public Component getRichName(BlockType blockType) { } @Override - public BlockMaterial getMaterial(BlockType blockType) { - org.spongepowered.api.block.BlockType spongeBlockType = - Sponge.game().registry(RegistryTypes.BLOCK_TYPE) - .value(ResourceKey.resolve(blockType.id())); + public BlockMaterial getMaterial(BlockState blockState) { return materialMap.computeIfAbsent( - spongeBlockType.defaultState(), - m -> { - net.minecraft.world.level.block.state.BlockState blockState = - (net.minecraft.world.level.block.state.BlockState) m; - return new SpongeBlockMaterial( - blockState - ); - } + SpongeAdapter.adapt(blockState), + m -> { + net.minecraft.world.level.block.state.BlockState mcBlockState = + (net.minecraft.world.level.block.state.BlockState) m; + return new SpongeBlockMaterial( + mcBlockState + ); + } ); }