最近研究游戏开发,发现《心动小镇》和《星布谷地》有相关时间同步机制,将游戏时间与现实时间同步,太阳随现实东升日落,能更有点代入感。意识到 Minecraft 也可以实现类似功能,以下是 KubeJS 脚本,放置在服务端脚本 server_scripts 目录即可。
注意关闭日夜循环,否则客户端会看到太阳和月亮持续跳动。
实现功能:将现实时间 6时0分0秒 至 次日5时59分59秒 映射为 Minecraft 时间刻 0 到 23999 平均分布,实现游戏时间与现实时间同步。现实12:00时刻为游戏第6000刻。
const CONFIG = {
timeZoneOffset: 8, //设置时区
enableSync: true, //启用同步
syncTickRate: 200 // 每多少刻同步一次时间
}
let tickCounter = 0;
ServerEvents.tick(event => {
if (!CONFIG.enableSync) return;
tickCounter++;
if(tickCounter < CONFIG.syncTickRate) return;
tickCounter = 0;
let now = new Date();
let utcHour = now.getUTCHours();
let realHour = (utcHour + CONFIG.timeZoneOffset) % 24;
let realMin = now.getUTCMinutes();
let realSec = now.getUTCSeconds();
let totalRealHour = realHour + realMin / 60 + realSec / 3600;
let mcDayTick = (totalRealHour * 1000 - 6000 + 24000) % 24000;
event.server.getLevel('minecraft:overworld').setDayTime(mcDayTick);
})





