Skip to content

Commit

Permalink
Merge pull request #925 from ZhuRuoLing/dev
Browse files Browse the repository at this point in the history
修复监督者不加载区块坏档的bug
  • Loading branch information
Gu-ZT authored Jun 18, 2024
2 parents 9a84adc + 65c5a40 commit 73948a6
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.Level;

public class LevelLoadManager {
private static final Map<BlockPos, LoadChuckData> LEVEL_LOAD_CHUCK_AREA_MAP = new HashMap<>();
Expand All @@ -22,11 +21,15 @@ public class LevelLoadManager {
* @param level 世界
*/
public static void register(BlockPos centerPos, LoadChuckData loadChuckData, ServerLevel level) {
if (LEVEL_LOAD_CHUCK_AREA_MAP.containsKey(centerPos)) unregister(centerPos, level);
if (LEVEL_LOAD_CHUCK_AREA_MAP.containsKey(centerPos)) return;
LEVEL_LOAD_CHUCK_AREA_MAP.put(centerPos, loadChuckData);
loadChuckData.load(level);
}

public static boolean checkRegistered(BlockPos pos) {
return LEVEL_LOAD_CHUCK_AREA_MAP.containsKey(pos);
}

static void lazy(Runnable runnable) {
if (serverStarted) {
runnable.run();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ private LoadChuckData(
* @param isNeedRandomTick 是否需要随机刻加载
* @return 强加载区块区域数据
*/
public static LoadChuckData creatLoadChuckData(
public static LoadChuckData createLoadChuckData(
int level,
BlockPos centerPos,
boolean isNeedRandomTick,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public OverseerBlockEntity(BlockPos pos, BlockState blockState) {
}

public static @NotNull OverseerBlockEntity createBlockEntity(
BlockEntityType<?> type, BlockPos pos, BlockState blockState
BlockEntityType<?> type, BlockPos pos, BlockState blockState
) {
return new OverseerBlockEntity(type, pos, blockState);
}
Expand All @@ -48,23 +48,22 @@ public void tick(Level level, @NotNull BlockPos pos, BlockState state) {
if (level instanceof ServerLevel serverLevel) {
// 如果底座上方不是监督者,直接破坏底座,结束方法
if (checkBase(level, pos, state)) {
LevelLoadManager.unregister(pos, (ServerLevel) level);
return;
}
BlockState updatedState = level.getBlockState(pos);
if (state == updatedState && this.waterLoggerBlockNum == this.lastWaterLoggerBlockNum) {
return;
if (!LevelLoadManager.checkRegistered(pos)) {
LevelLoadManager.register(
pos,
LoadChuckData.createLoadChuckData(
updatedState.getValue(OverseerBlock.LEVEL),
pos,
(this.waterLoggerBlockNum >= 4),
serverLevel
),
serverLevel
);
}
this.lastWaterLoggerBlockNum = this.waterLoggerBlockNum;
LevelLoadManager.register(
pos,
LoadChuckData.creatLoadChuckData(
updatedState.getValue(OverseerBlock.LEVEL),
pos,
(this.waterLoggerBlockNum >= 4),
serverLevel
),
serverLevel
);
}
}

Expand All @@ -85,14 +84,14 @@ private boolean checkBase(Level level, @NotNull BlockPos pos, BlockState state)
return true;
}
level.setBlockAndUpdate(pos.above(),
state
.setValue(OverseerBlock.LEVEL, laminar)
.setValue(OverseerBlock.HALF, Vertical3PartHalf.MID)
state
.setValue(OverseerBlock.LEVEL, laminar)
.setValue(OverseerBlock.HALF, Vertical3PartHalf.MID)
);
level.setBlockAndUpdate(pos.above(2),
state
.setValue(OverseerBlock.LEVEL, laminar)
.setValue(OverseerBlock.HALF, Vertical3PartHalf.TOP)
state
.setValue(OverseerBlock.LEVEL, laminar)
.setValue(OverseerBlock.HALF, Vertical3PartHalf.TOP)
);
for (int x = pos.getX() - 1; x <= pos.getX() + 1; x++) {
for (int z = pos.getZ() - 1; z <= pos.getZ() + 1; z++) {
Expand All @@ -102,7 +101,7 @@ private boolean checkBase(Level level, @NotNull BlockPos pos, BlockState state)
return false;
}
if (level.getBlockState(basePos).hasProperty(BlockStateProperties.WATERLOGGED)
&& level.getBlockState(basePos).getValue(BlockStateProperties.WATERLOGGED))
&& level.getBlockState(basePos).getValue(BlockStateProperties.WATERLOGGED))
waterLoggerBlockNum++;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,6 @@ public static void onLoad(@NotNull BlockEntityEvent.ServerLoad event) {
if (event.getEntity() instanceof ChargeCollectorBlockEntity chargeCollector) {
ChargeCollectorManager.addChargeCollector(chargeCollector);
}
if (event.getEntity() instanceof OverseerBlockEntity overseerBlockEntity
&& event.getLevel() instanceof ServerLevel serverLevel) {
LevelLoadManager.register(overseerBlockEntity.getBlockPos(),
LoadChuckData.creatLoadChuckData(
overseerBlockEntity.getBlockState().getValue(OverseerBlock.LEVEL),
overseerBlockEntity.getBlockPos(),
false,
serverLevel
),
(ServerLevel) event.getLevel());
}
}

/**
Expand Down

0 comments on commit 73948a6

Please sign in to comment.