From 9275844a81a59c1c522be33e4e01ac261fd3467e Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 9 Jun 2024 00:50:29 +0800 Subject: [PATCH] feat: introduce BlockLiquidComponent --- .../common/BlockLiquidComponent.java | 11 +++++++ .../liquid/BlockFlowingLavaBehavior.java | 3 +- .../liquid/BlockFlowingWaterBehavior.java | 3 +- .../interfaces/liquid/BlockLavaBehavior.java | 3 +- .../interfaces/liquid/BlockWaterBehavior.java | 3 +- .../torch/BlockTorchBaseComponentImpl.java | 4 +-- .../service/AllayBlockUpdateService.java | 5 ++-- .../server/block/BlockAttributesTest.java | 30 +++++++++---------- 8 files changed, 39 insertions(+), 23 deletions(-) create mode 100644 Allay-API/src/main/java/org/allaymc/api/block/component/common/BlockLiquidComponent.java diff --git a/Allay-API/src/main/java/org/allaymc/api/block/component/common/BlockLiquidComponent.java b/Allay-API/src/main/java/org/allaymc/api/block/component/common/BlockLiquidComponent.java new file mode 100644 index 000000000..65a5b0a73 --- /dev/null +++ b/Allay-API/src/main/java/org/allaymc/api/block/component/common/BlockLiquidComponent.java @@ -0,0 +1,11 @@ +package org.allaymc.api.block.component.common; + +import org.allaymc.api.block.component.BlockComponent; + +/** + * Allay Project 2024/6/9 + * + * @author daoge_cmd + */ +public interface BlockLiquidComponent extends BlockComponent { +} diff --git a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingLavaBehavior.java b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingLavaBehavior.java index e0ddb3ef2..4a3f0b81e 100644 --- a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingLavaBehavior.java +++ b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingLavaBehavior.java @@ -1,10 +1,11 @@ package org.allaymc.api.block.interfaces.liquid; import org.allaymc.api.block.BlockBehavior; +import org.allaymc.api.block.component.common.BlockLiquidComponent; /** * @author daoge_cmd
* Allay Project
*/ -public interface BlockFlowingLavaBehavior extends BlockBehavior { +public interface BlockFlowingLavaBehavior extends BlockBehavior, BlockLiquidComponent { } diff --git a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingWaterBehavior.java b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingWaterBehavior.java index d103bb8d1..0ab189f75 100644 --- a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingWaterBehavior.java +++ b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockFlowingWaterBehavior.java @@ -1,10 +1,11 @@ package org.allaymc.api.block.interfaces.liquid; import org.allaymc.api.block.BlockBehavior; +import org.allaymc.api.block.component.common.BlockLiquidComponent; /** * @author daoge_cmd
* Allay Project
*/ -public interface BlockFlowingWaterBehavior extends BlockBehavior { +public interface BlockFlowingWaterBehavior extends BlockBehavior, BlockLiquidComponent { } diff --git a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockLavaBehavior.java b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockLavaBehavior.java index 8ac166145..d95830b25 100644 --- a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockLavaBehavior.java +++ b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockLavaBehavior.java @@ -1,10 +1,11 @@ package org.allaymc.api.block.interfaces.liquid; import org.allaymc.api.block.BlockBehavior; +import org.allaymc.api.block.component.common.BlockLiquidComponent; /** * @author daoge_cmd
* Allay Project
*/ -public interface BlockLavaBehavior extends BlockBehavior { +public interface BlockLavaBehavior extends BlockBehavior, BlockLiquidComponent { } diff --git a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockWaterBehavior.java b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockWaterBehavior.java index 2fa99992b..e22e11867 100644 --- a/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockWaterBehavior.java +++ b/Allay-API/src/main/java/org/allaymc/api/block/interfaces/liquid/BlockWaterBehavior.java @@ -1,10 +1,11 @@ package org.allaymc.api.block.interfaces.liquid; import org.allaymc.api.block.BlockBehavior; +import org.allaymc.api.block.component.common.BlockLiquidComponent; /** * @author daoge_cmd
* Allay Project
*/ -public interface BlockWaterBehavior extends BlockBehavior { +public interface BlockWaterBehavior extends BlockBehavior, BlockLiquidComponent { } diff --git a/Allay-Server/src/main/java/org/allaymc/server/block/component/torch/BlockTorchBaseComponentImpl.java b/Allay-Server/src/main/java/org/allaymc/server/block/component/torch/BlockTorchBaseComponentImpl.java index d80bbe124..f36fba19d 100644 --- a/Allay-Server/src/main/java/org/allaymc/server/block/component/torch/BlockTorchBaseComponentImpl.java +++ b/Allay-Server/src/main/java/org/allaymc/server/block/component/torch/BlockTorchBaseComponentImpl.java @@ -3,6 +3,7 @@ import com.google.common.base.Preconditions; import org.allaymc.api.block.BlockBehavior; import org.allaymc.api.block.component.annotation.RequireBlockProperty; +import org.allaymc.api.block.component.common.BlockLiquidComponent; import org.allaymc.api.block.data.BlockFace; import org.allaymc.api.block.function.Place; import org.allaymc.api.block.property.enums.TorchFacingDirection; @@ -42,8 +43,7 @@ public boolean place(EntityPlayer player, Dimension dimension, BlockState blockS var oldBlock = dimension.getBlockState(placeBlockPos); var torchFace = computeTorchFacingDirection(blockFace); - // TODO: Rewrite the comment code - if ((oldBlock.getBlockType() != BlockTypes.AIR_TYPE/* && !oldBlock.getBlockAttributes().isLiquid()*/) || + if ((oldBlock.getBlockType() != BlockTypes.AIR_TYPE && !(oldBlock.getBehavior() instanceof BlockLiquidComponent)) || torchFace == TorchFacingDirection.UNKNOWN) return false; var targetBlock = dimension.getBlockState(targetBlockPos); diff --git a/Allay-Server/src/main/java/org/allaymc/server/world/service/AllayBlockUpdateService.java b/Allay-Server/src/main/java/org/allaymc/server/world/service/AllayBlockUpdateService.java index c64143f7d..90b7a0b27 100644 --- a/Allay-Server/src/main/java/org/allaymc/server/world/service/AllayBlockUpdateService.java +++ b/Allay-Server/src/main/java/org/allaymc/server/world/service/AllayBlockUpdateService.java @@ -1,5 +1,6 @@ package org.allaymc.server.world.service; +import org.allaymc.api.block.component.common.BlockLiquidComponent; import org.allaymc.api.block.data.BlockFace; import org.allaymc.api.block.data.BlockStateWithPos; import org.allaymc.api.block.type.BlockState; @@ -41,7 +42,7 @@ public void tick(long tick) { BlockState layer1 = dimension.getBlockState(p, 1); BlockStateWithPos b0 = new BlockStateWithPos(layer0, new Position3i(p, dimension), 0); layer0.getBehavior().onScheduledUpdate(b0); - if (layer1.getBlockAttributes().isLiquid()) { + if (layer1.getBehavior() instanceof BlockLiquidComponent) { BlockStateWithPos b1 = new BlockStateWithPos(layer1, new Position3i(p, dimension), 1); layer1.getBehavior().onScheduledUpdate(b1); } @@ -55,7 +56,7 @@ public void tick(long tick) { BlockState layer0 = dimension.getBlockState(pos); BlockState layer1 = dimension.getBlockState(pos, 1); layer0.getBehavior().onNeighborUpdate(pos, neighborPos, blockFace, dimension); - if (layer1.getBlockAttributes().isLiquid()) { + if (layer1.getBehavior() instanceof BlockLiquidComponent) { layer1.getBehavior().onNeighborUpdate(pos, neighborPos, blockFace, dimension); } c++; diff --git a/Allay-Server/src/test/java/org/allaymc/server/block/BlockAttributesTest.java b/Allay-Server/src/test/java/org/allaymc/server/block/BlockAttributesTest.java index da6766316..ee50666ce 100644 --- a/Allay-Server/src/test/java/org/allaymc/server/block/BlockAttributesTest.java +++ b/Allay-Server/src/test/java/org/allaymc/server/block/BlockAttributesTest.java @@ -93,11 +93,11 @@ void testDeserialization() { assertEquals(15, blockAttributes.explosionResistance()); assertEquals(Float.toHexString(0.6f), Float.toHexString(blockAttributes.friction())); assertEquals(3, blockAttributes.hardness()); - assertFalse(blockAttributes.hasBlockEntity()); - assertFalse(blockAttributes.hasComparatorSignal()); +// assertFalse(blockAttributes.hasBlockEntity()); +// assertFalse(blockAttributes.hasComparatorSignal()); assertTrue(blockAttributes.isAlwaysDestroyable()); - assertFalse(blockAttributes.isContainerBlock()); - assertFalse(blockAttributes.isLiquid()); +// assertFalse(blockAttributes.isContainerBlock()); +// assertFalse(blockAttributes.isLiquid()); assertFalse(blockAttributes.isMotionBlockingBlock()); assertFalse(blockAttributes.isPowerSource()); assertFalse(blockAttributes.isSolid()); @@ -110,17 +110,17 @@ void testDeserialization() { assertFalse(blockAttributes.superHot()); assertEquals(0, blockAttributes.thickness()); assertEquals(0, blockAttributes.translucency()); - assertTrue(blockAttributes.isAir()); - assertTrue(blockAttributes.isBounceBlock()); - assertTrue(blockAttributes.isButtonBlock()); - assertTrue(blockAttributes.isCropBlock()); - assertTrue(blockAttributes.isDoorBlock()); - assertTrue(blockAttributes.isFallingBlock()); - assertTrue(blockAttributes.isFenceBlock()); - assertTrue(blockAttributes.isFenceGateBlock()); - assertTrue(blockAttributes.isSlabBlock()); - assertTrue(blockAttributes.isStemBlock()); - assertTrue(blockAttributes.isThinFenceBlock()); +// assertTrue(blockAttributes.isAir()); +// assertTrue(blockAttributes.isBounceBlock()); +// assertTrue(blockAttributes.isButtonBlock()); +// assertTrue(blockAttributes.isCropBlock()); +// assertTrue(blockAttributes.isDoorBlock()); +// assertTrue(blockAttributes.isFallingBlock()); +// assertTrue(blockAttributes.isFenceBlock()); +// assertTrue(blockAttributes.isFenceGateBlock()); +// assertTrue(blockAttributes.isSlabBlock()); +// assertTrue(blockAttributes.isStemBlock()); +// assertTrue(blockAttributes.isThinFenceBlock()); } @Test