diff --git a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java index e900fe5..02acc7c 100644 --- a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java +++ b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java @@ -19,14 +19,25 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.Nullable; import java.util.UUID; public class WirelessTransceiverBlock extends Block implements EntityBlock { + public static final IntegerProperty STATE = IntegerProperty.create("state", 0, 5); + public WirelessTransceiverBlock(Properties props) { super(props); + this.registerDefaultState(this.stateDefinition.any().setValue(STATE, 5)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(STATE); } @Override diff --git a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java index 7335acd..3e9eb97 100644 --- a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java +++ b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java @@ -207,6 +207,51 @@ public class WirelessTransceiverBlockEntity extends AEBaseBlockEntity implements // 从端需要周期检查与维护连接 be.slaveLink.updateStatus(); } + // 更新状态 + be.updateState(); + } + + /** + * 根据连接状态和频道数更新方块状态 + */ + private void updateState() { + if (this.level == null || this.level.isClientSide) return; + + IGridNode node = this.getGridNode(); + int newState = 5; // 默认状态:无连接 + + if (node != null && node.isActive()) { + // 获取该节点使用的频道数(与 jade 中获取频道使用量的方式一致) + int usedChannels = 0; + for (var connection : node.getConnections()) { + usedChannels = Math.max(connection.getUsedChannels(), usedChannels); + } + + // 根据频道数计算状态: + // 有连接但频道数 < 8:状态0(创建连接时) + // 频道数 >= 8 且 < 16:状态1 + // 频道数 >= 16 且 < 24:状态2 + // 频道数 >= 24 且 < 32:状态3 + // 频道数 >= 32:状态4 + if (usedChannels >= 32) { + newState = 4; + } else if (usedChannels >= 24) { + newState = 3; + } else if (usedChannels >= 16) { + newState = 2; + } else if (usedChannels >= 8) { + newState = 1; + } else if (usedChannels >= 0) { + newState = 0; // 有连接但频道数 < 8 + } + // 如果 usedChannels == 0,保持 newState = 5(无连接状态) + } + + // 更新方块状态 + BlockState currentState = this.getBlockState(); + if (currentState.getValue(WirelessTransceiverBlock.STATE) != newState) { + this.level.setBlock(this.worldPosition, currentState.setValue(WirelessTransceiverBlock.STATE, newState), 3); + } } @Override @@ -284,11 +329,18 @@ public class WirelessTransceiverBlockEntity extends AEBaseBlockEntity implements @Override public void onStateChanged(WirelessTransceiverBlockEntity host, IGridNode node, State state) { // 可在此响应 POWER/CHANNEL 等变化,刷新显示等 + host.updateState(); } @Override - public void onInWorldConnectionChanged(WirelessTransceiverBlockEntity host, IGridNode node) {} + public void onInWorldConnectionChanged(WirelessTransceiverBlockEntity host, IGridNode node) { + // 连接变化时更新状态 + host.updateState(); + } @Override - public void onGridChanged(WirelessTransceiverBlockEntity host, IGridNode node) {} + public void onGridChanged(WirelessTransceiverBlockEntity host, IGridNode node) { + // 网格变化时更新状态 + host.updateState(); + } @Override public void onOwnerChanged(WirelessTransceiverBlockEntity host, IGridNode node) {} } diff --git a/src/main/resources/assets/extendedae_plus/blockstates/wireless_transceiver.json b/src/main/resources/assets/extendedae_plus/blockstates/wireless_transceiver.json index 7dedc1a..c3b755c 100644 --- a/src/main/resources/assets/extendedae_plus/blockstates/wireless_transceiver.json +++ b/src/main/resources/assets/extendedae_plus/blockstates/wireless_transceiver.json @@ -1,5 +1,10 @@ { "variants": { - "": { "model": "extendedae_plus:block/wireless_transceiver" } + "state=0": { "model": "extendedae_plus:block/wireless_transceiver_0" }, + "state=1": { "model": "extendedae_plus:block/wireless_transceiver_1" }, + "state=2": { "model": "extendedae_plus:block/wireless_transceiver_2" }, + "state=3": { "model": "extendedae_plus:block/wireless_transceiver_3" }, + "state=4": { "model": "extendedae_plus:block/wireless_transceiver_4" }, + "state=5": { "model": "extendedae_plus:block/wireless_transceiver_5" } } } diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver.json deleted file mode 100644 index b7f5686..0000000 --- a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "extendedae_plus:block/wireless_transceiver" - } -} diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_0.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_0.json new file mode 100644 index 0000000..c53e744 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_0.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extendedae_plus:block/wireless_transceiver/wireless_transceiver_0" + } +} + diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_1.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_1.json new file mode 100644 index 0000000..77fdadd --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_1.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extendedae_plus:block/wireless_transceiver/wireless_transceiver_1" + } +} + diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_2.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_2.json new file mode 100644 index 0000000..c5bfd2b --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_2.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extendedae_plus:block/wireless_transceiver/wireless_transceiver_2" + } +} + diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_3.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_3.json new file mode 100644 index 0000000..350e6ac --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_3.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extendedae_plus:block/wireless_transceiver/wireless_transceiver_3" + } +} + diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_4.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_4.json new file mode 100644 index 0000000..d5eac6b --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extendedae_plus:block/wireless_transceiver/wireless_transceiver_4" + } +} + diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_5.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_5.json new file mode 100644 index 0000000..79de149 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver_5.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "extendedae_plus:block/wireless_transceiver/wireless_transceiver_5" + } +} + diff --git a/src/main/resources/assets/extendedae_plus/textures/block/network_pattern_controller.png b/src/main/resources/assets/extendedae_plus/textures/block/network_pattern_controller.png index 56c43c2..e9c985b 100644 Binary files a/src/main/resources/assets/extendedae_plus/textures/block/network_pattern_controller.png and b/src/main/resources/assets/extendedae_plus/textures/block/network_pattern_controller.png differ diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver.png index 842eabe..29c5b31 100644 Binary files a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver.png and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver.png differ diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_0.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_0.png new file mode 100644 index 0000000..29c5b31 Binary files /dev/null and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_0.png differ diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_1.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_1.png new file mode 100644 index 0000000..942caf4 Binary files /dev/null and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_1.png differ diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_2.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_2.png new file mode 100644 index 0000000..5516203 Binary files /dev/null and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_2.png differ diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_3.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_3.png new file mode 100644 index 0000000..716e8ae Binary files /dev/null and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_3.png differ diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_4.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_4.png new file mode 100644 index 0000000..61595f5 Binary files /dev/null and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_4.png differ diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_5.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_5.png new file mode 100644 index 0000000..a4e942d Binary files /dev/null and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver/wireless_transceiver_5.png differ