我正在创建一个插件,用于显示 Minecraft Bedrock 中的时间、日期和年份。它在多人游戏和单人游戏世界中都能正常工作,但当放置在领域中时,操作栏文本在上午 7 点到 10 点之间为空。上午 10 点后,该文本重新出现,但在上午 7 点再次消失,如此循环下去。可能是什么问题?
上午 7 点:
上午 10 点:
import { world, system } from '@minecraft/server';
function formatGameTime(ticks) {
let hours = Math.floor((ticks / 1000 + 6) % 24);
let minutes = Math.floor((ticks % 1000) / 16.6667);
return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
}
function calculateDate(days) {
const startYear = 500;
const daysPerYear = 360;
const daysPerMonth = 30;
const yearsPassed = Math.floor(days / daysPerYear);
const currentYear = startYear + yearsPassed;
const remainingDaysAfterYears = days % daysPerYear;
const monthsPassed = Math.floor(remainingDaysAfterYears / daysPerMonth);
const currentMonth = monthsPassed + 1;
const currentDay = remainingDaysAfterYears % daysPerMonth + 1;
return { day: currentDay, month: currentMonth, year: currentYear };
}
function calculateDayOfWeek(days) {
const daysOfWeek = ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"];
return daysOfWeek[days % 7];
}
function updateGameTime() {
const players = world.getAllPlayers();
const gameTime = world.getTimeOfDay();
const formattedTime = formatGameTime(gameTime);
const currentDayInGame = world.getDay();
const currentDate = calculateDate(currentDayInGame);
const dayOfWeek = calculateDayOfWeek(currentDayInGame);
const spacePadding = " ".repeat(20);
const timeText = `${spacePadding}${formattedTime}${spacePadding}`;
const dateText = `${dayOfWeek} ${currentDate.day.toString().padStart(2, '0')}/${currentDate.month.toString().padStart(2, '0')}/${currentDate.year}`;
// Enviar mensagem de log para o chat do jogo
players.forEach(player => {
player.runCommand(`title @s actionbar ${timeText}\\n${dateText}`);
});
}
system.runInterval(updateGameTime, 20);
我没有找到任何解决该问题的文档。
我通过合并文本并删除换行符解决了这个问题。
const combinedText = ${formattedTime} - ${dayOfWeek} ${currentDate.day.toString().padStart(2, '0')}/${currentDate.month.toString().padStart(2, '0')}/${currentDate.year};
players.forEach(player => {
player.runCommand(`title @s actionbar ${combinedText}`);
});