This commit is contained in:
BRanulf 2025-07-08 20:58:15 +08:00
parent 5d3f71cef5
commit b928cb9956
16 changed files with 133 additions and 23 deletions

View File

@ -5,8 +5,10 @@ Download the mod at [Modrinth](https://modrinth.com/mod/disc-jockey) or [CurseFo
此 Mod 是基于 [Disc-Jockey](https://github.com/SemmieDev/Disc-Jockey)(由 [SemmieDev](https://github.com/SemmieDev/) 开发)的修改版本,适配了 Minecraft 1.21.4。 此 Mod 是基于 [Disc-Jockey](https://github.com/SemmieDev/Disc-Jockey)(由 [SemmieDev](https://github.com/SemmieDev/) 开发)的修改版本,适配了 Minecraft 1.21.4。
原始代码版权归原作者所有,修改部分版权归 BRanulf 所有。 原始代码版权归原作者所有,修改部分版权归 BRanulf 所有。
同时,该二改版本我本人并没有上传至任何其他网站(包括 Modrinth 、CurseForge 、Github 等),请勿用于商业用途。 同时,该二改版本我本人并没有上传至任何其他网站(包括 Modrinth 、CurseForge 、Github 等),请勿用于商业用途及其他非法用途
[唯一下载地址](https://git.branulf.top/Branulf/DIsc_Jockey_revive/releases) 目前[Modrinth](https://modrinth.com/mod/disc_jockey_revive)上的这个版本非本人上传就当允许上传了罢毕竟我比较懒XD
[最新版本下载Release](https://git.branulf.top/Branulf/DIsc_Jockey_revive/releases)
~~这边建议去给原作者点个Star~~ ~~这边建议去给原作者点个Star~~

View File

@ -6,7 +6,7 @@ minecraft_version=1.21.4
yarn_mappings=1.21.4+build.8 yarn_mappings=1.21.4+build.8
loader_version=0.16.10 loader_version=0.16.10
# Mod Properties # Mod Properties
mod_version=1.14.514.037 mod_version=1.14.514.038
maven_group=semmiedev maven_group=semmiedev
archives_base_name=disc_jockey_revive archives_base_name=disc_jockey_revive
# Dependencies # Dependencies

View File

@ -48,6 +48,7 @@ public class KeyMappingManager {
} }
public void loadMappings() { public void loadMappings() {
DebugLogger.log("KeyMappingManager: 加载键位预设");
if (!MAPPINGS_FILE.exists()) { if (!MAPPINGS_FILE.exists()) {
Main.LOGGER.info("未找到键映射文件,正在创建默认的类似于 FL Studio 的映射。"); Main.LOGGER.info("未找到键映射文件,正在创建默认的类似于 FL Studio 的映射。");
mappings.clear(); mappings.clear();
@ -91,6 +92,8 @@ public class KeyMappingManager {
mappings.put(InputUtil.fromKeyCode(InputUtil.GLFW_KEY_LEFT_BRACKET, 0), new Note(dirt, (byte) 23)); mappings.put(InputUtil.fromKeyCode(InputUtil.GLFW_KEY_LEFT_BRACKET, 0), new Note(dirt, (byte) 23));
mappings.put(InputUtil.fromKeyCode(InputUtil.GLFW_KEY_EQUAL, 0), new Note(dirt, (byte) 24)); mappings.put(InputUtil.fromKeyCode(InputUtil.GLFW_KEY_EQUAL, 0), new Note(dirt, (byte) 24));
DebugLogger.log("KeyMappingManager: 默认预设创建完成");
saveMappings(); saveMappings();
return; return;
@ -118,6 +121,7 @@ public class KeyMappingManager {
public void saveMappings() { public void saveMappings() {
MAPPINGS_FILE.getParentFile().mkdirs(); MAPPINGS_FILE.getParentFile().mkdirs();
DebugLogger.log("KeyMappingManager: 开始保存按键映射");
try (FileWriter writer = new FileWriter(MAPPINGS_FILE)) { try (FileWriter writer = new FileWriter(MAPPINGS_FILE)) {
HashMap<String, NoteData> dataToSave = new HashMap<>(); HashMap<String, NoteData> dataToSave = new HashMap<>();
for (Map.Entry<InputUtil.Key, Note> entry : mappings.entrySet()) { for (Map.Entry<InputUtil.Key, Note> entry : mappings.entrySet()) {
@ -136,10 +140,12 @@ public class KeyMappingManager {
public void setMapping(InputUtil.Key key, Note note) { public void setMapping(InputUtil.Key key, Note note) {
mappings.put(key, note); mappings.put(key, note);
DebugLogger.log("KeyMappingManager: 已设置按键映射:"+key.getTranslationKey()+""+getNoteDisplayName(note));
} }
public void removeMapping(InputUtil.Key key) { public void removeMapping(InputUtil.Key key) {
mappings.remove(key); mappings.remove(key);
DebugLogger.log("KeyMappingManager: 已移除键位预设:"+key.getTranslationKey());
} }
public Map<InputUtil.Key, Note> getMappings() { public Map<InputUtil.Key, Note> getMappings() {
@ -149,7 +155,7 @@ public class KeyMappingManager {
public static String getNoteDisplayName(Note note) { public static String getNoteDisplayName(Note note) {
if (note == null) return "未设置"; if (note == null) return "未设置";
String instrumentTranslationKey = "block.minecraft.note_block.instrument." + note.instrument().asString(); String instrumentTranslationKey = " " + note.instrument().asString();
String instrumentName = Text.translatable(instrumentTranslationKey).getString(); String instrumentName = Text.translatable(instrumentTranslationKey).getString();
int pitch = note.note(); int pitch = note.note();

View File

@ -51,6 +51,7 @@ public class LiveDjPlayer implements ClientTickEvents.StartWorldTick {
// 调音 // 调音
public synchronized void startTuning() { public synchronized void startTuning() {
DebugLogger.log("LiveDjPlayer: 开始调音。");
if (tuned && noteBlocks != null) { if (tuned && noteBlocks != null) {
MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(Text.translatable(Main.MOD_ID+".player.retuning").formatted(Formatting.YELLOW)); MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(Text.translatable(Main.MOD_ID+".player.retuning").formatted(Formatting.YELLOW));
} else { } else {
@ -75,6 +76,7 @@ public class LiveDjPlayer implements ClientTickEvents.StartWorldTick {
// 停止调音 // 停止调音
public synchronized void stopTuning() { public synchronized void stopTuning() {
tuningRequested = false; tuningRequested = false;
DebugLogger.log("LiveDjPlayer: 停止调音");
} }
// 是否正在调音 // 是否正在调音
@ -93,6 +95,7 @@ public class LiveDjPlayer implements ClientTickEvents.StartWorldTick {
// 播放 // 播放
public boolean playNoteBlock(Note note) { public boolean playNoteBlock(Note note) {
DebugLogger.log("LiveDjPlayer: 触发播放");
MinecraftClient client = MinecraftClient.getInstance(); MinecraftClient client = MinecraftClient.getInstance();
ClientWorld world = client.world; ClientWorld world = client.world;
ClientPlayerEntity player = client.player; ClientPlayerEntity player = client.player;
@ -120,6 +123,7 @@ public class LiveDjPlayer implements ClientTickEvents.StartWorldTick {
// 获取可交互的 // 获取可交互的
private boolean sendNotePacket(BlockPos blockPos) { private boolean sendNotePacket(BlockPos blockPos) {
DebugLogger.log("LiveDjPlayer: 发送播放数据包。");
MinecraftClient client = MinecraftClient.getInstance(); MinecraftClient client = MinecraftClient.getInstance();
ClientPlayerEntity player = client.player; ClientPlayerEntity player = client.player;
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
@ -189,7 +193,7 @@ public class LiveDjPlayer implements ClientTickEvents.StartWorldTick {
return packetsSent; return packetsSent;
} }
@Override @Override
public void onStartTick(ClientWorld world) { public void onStartTick(ClientWorld world) {
MinecraftClient client = MinecraftClient.getInstance(); MinecraftClient client = MinecraftClient.getInstance();
@ -451,6 +455,7 @@ public class LiveDjPlayer implements ClientTickEvents.StartWorldTick {
} }
private HashMap<Byte, BlockPos> getNotesMapForInstrument(NoteBlockInstrument instrument) { private HashMap<Byte, BlockPos> getNotesMapForInstrument(NoteBlockInstrument instrument) {
DebugLogger.log("LiveDjPlayer: 尝试获取音符。");
if (noteBlocks == null) { if (noteBlocks == null) {
noteBlocks = new HashMap<>(); noteBlocks = new HashMap<>();
} }

View File

@ -31,7 +31,7 @@ import java.util.ArrayList;
public class Main implements ClientModInitializer { public class Main implements ClientModInitializer {
public static final String MOD_ID = "disc_jockey_revive"; public static final String MOD_ID = "disc_jockey_revive";
public static final MutableText NAME = Text.literal("Disc Jockey"); public static final MutableText NAME = Text.literal("Disc Jockey");
public static final Logger LOGGER = LogManager.getLogger("Disc Jockey"); public static final Logger LOGGER = LogManager.getLogger("Disc Jockey Revive");
public static final ArrayList<ClientTickEvents.StartWorldTick> TICK_LISTENERS = new ArrayList<>(); public static final ArrayList<ClientTickEvents.StartWorldTick> TICK_LISTENERS = new ArrayList<>();
public static final Previewer PREVIEWER = new Previewer(); public static final Previewer PREVIEWER = new Previewer();
public static final SongPlayer SONG_PLAYER = new SongPlayer(); public static final SongPlayer SONG_PLAYER = new SongPlayer();
@ -45,6 +45,7 @@ public class Main implements ClientModInitializer {
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
DebugLogger.log("Main: 正在进行初始化。");
configHolder = AutoConfig.register(ModConfig.class, JanksonConfigSerializer::new); configHolder = AutoConfig.register(ModConfig.class, JanksonConfigSerializer::new);
config = configHolder.getConfig(); config = configHolder.getConfig();
@ -68,10 +69,12 @@ public class Main implements ClientModInitializer {
PREVIEWER.stop(); PREVIEWER.stop();
SONG_PLAYER.stop(); SONG_PLAYER.stop();
LIVE_DJ_PLAYER.stopTuning(); LIVE_DJ_PLAYER.stopTuning();
DebugLogger.log("Main: 退出世界,停止。");
} }
prevWorld = client.world; prevWorld = client.world;
if (openScreenKeyBind.wasPressed()) { if (openScreenKeyBind.wasPressed()) {
DebugLogger.log("Main: 打开主界面:"+openScreenKeyBind);
if (SongLoader.loadingSongs) { if (SongLoader.loadingSongs) {
client.inGameHud.getChatHud().addMessage(Text.translatable(Main.MOD_ID+".still_loading").formatted(Formatting.RED)); client.inGameHud.getChatHud().addMessage(Text.translatable(Main.MOD_ID+".still_loading").formatted(Formatting.RED));
SongLoader.showToast = true; SongLoader.showToast = true;
@ -80,6 +83,7 @@ public class Main implements ClientModInitializer {
} }
} }
if (openLiveDjScreenKeyBind.wasPressed()) { if (openLiveDjScreenKeyBind.wasPressed()) {
DebugLogger.log("Main: 打开DJ界面"+openLiveDjScreenKeyBind);
if (SongLoader.loadingSongs) { if (SongLoader.loadingSongs) {
client.inGameHud.getChatHud().addMessage(Text.translatable(Main.MOD_ID+".still_loading").formatted(Formatting.RED)); client.inGameHud.getChatHud().addMessage(Text.translatable(Main.MOD_ID+".still_loading").formatted(Formatting.RED));
SongLoader.showToast = true; SongLoader.showToast = true;
@ -102,8 +106,11 @@ public class Main implements ClientModInitializer {
PREVIEWER.stop(); PREVIEWER.stop();
SONG_PLAYER.stop(); SONG_PLAYER.stop();
LIVE_DJ_PLAYER.stopTuning(); LIVE_DJ_PLAYER.stopTuning();
DebugLogger.log("Main: 断开连接,停止。");
}); });
HudRenderCallback.EVENT.register(new PlaybackProgressOverlay()); HudRenderCallback.EVENT.register(new PlaybackProgressOverlay());
DebugLogger.log("Main: 出屎化完成。");
} }
} }

View File

@ -11,12 +11,13 @@ public class Previewer implements ClientTickEvents.StartWorldTick {
private int i; private int i;
private float tick; private float tick;
private Song song; public Song song;
public void start(Song song) { public void start(Song song) {
this.song = song; this.song = song;
Main.TICK_LISTENERS.add(this); Main.TICK_LISTENERS.add(this);
running = true; running = true;
DebugLogger.log("Previewer: 开始播放。");
} }
public void stop() { public void stop() {
@ -24,6 +25,30 @@ public class Previewer implements ClientTickEvents.StartWorldTick {
running = false; running = false;
i = 0; i = 0;
tick = 0; tick = 0;
DebugLogger.log("Previewer: 停止播放。");
}
// 获取当前播放进度 (0.0 - 1.0)
public synchronized float getProgress() {
if (song == null || !running) return 0;
return Math.min(1.0f, (float) (tick / song.length));
}
// 获取格式化时间字符串
public synchronized String getFormattedTime() {
if (song == null) return "00:00 / 00:00";
double totalSeconds = song.getLengthInSeconds();
double currentSeconds = song.ticksToMilliseconds(tick) / 1000.0;
return formatTime((int) currentSeconds) + " / " + formatTime((int) totalSeconds);
}
// 格式化时间为 mm:ss
private String formatTime(int seconds) {
int min = seconds / 60;
int sec = seconds % 60;
return String.format("%02d:%02d", min, sec);
} }
@Override @Override

View File

@ -34,6 +34,7 @@ public class SongLoader {
} }
public static void loadSongs() { public static void loadSongs() {
DebugLogger.log("SongLoader: 加载歌曲");
if (loadingSongs) return; if (loadingSongs) return;
new Thread(() -> { new Thread(() -> {
loadingSongs = true; loadingSongs = true;
@ -55,6 +56,7 @@ public class SongLoader {
} }
private static void loadFolder(File folder, SongFolder parentFolder) { private static void loadFolder(File folder, SongFolder parentFolder) {
DebugLogger.log("SongLoader: 加载文件夹");
if (!folder.isDirectory()) return; if (!folder.isDirectory()) return;
SongFolder songFolder = new SongFolder(folder.getName(), folder.getPath()); SongFolder songFolder = new SongFolder(folder.getName(), folder.getPath());
@ -86,6 +88,7 @@ public class SongLoader {
} }
public static Song loadSong(File file) throws IOException { public static Song loadSong(File file) throws IOException {
DebugLogger.log("SongLoader: 加载歌曲:"+file.getName());
if (file.isFile()) { if (file.isFile()) {
BinaryReader reader = new BinaryReader(Files.newInputStream(file.toPath())); BinaryReader reader = new BinaryReader(Files.newInputStream(file.toPath()));
Song song = new Song(); Song song = new Song();

View File

@ -78,6 +78,7 @@ public class SongPlayer implements ClientTickEvents.StartWorldTick {
this.playbackThread = new Thread(() -> { this.playbackThread = new Thread(() -> {
Thread ownThread = this.playbackThread; Thread ownThread = this.playbackThread;
DebugLogger.log("SongPlayer: 开始播放线程。");
while(ownThread == this.playbackThread) { while(ownThread == this.playbackThread) {
try { try {
// Accuracy doesn't really matter at this precision imo // Accuracy doesn't really matter at this precision imo
@ -104,9 +105,11 @@ public class SongPlayer implements ClientTickEvents.StartWorldTick {
public synchronized void stopPlaybackThread() { public synchronized void stopPlaybackThread() {
this.playbackThread = null; // Should stop on its own then this.playbackThread = null; // Should stop on its own then
DebugLogger.log("SongPlayer: 停止播放线程。");
} }
public synchronized void start(Song song) { public synchronized void start(Song song) {
DebugLogger.log("SongPlayer: 开始播放。");
if (!Main.config.hideWarning && !warned) { if (!Main.config.hideWarning && !warned) {
MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(Text.translatable("disc_jockey_revive.warning").formatted(Formatting.BOLD, Formatting.RED)); MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(Text.translatable("disc_jockey_revive.warning").formatted(Formatting.BOLD, Formatting.RED));
warned = true; warned = true;
@ -141,6 +144,7 @@ public class SongPlayer implements ClientTickEvents.StartWorldTick {
} }
public synchronized void stop() { public synchronized void stop() {
DebugLogger.log("SongPlayer: 停止播放。");
//MinecraftClient.getInstance().send(() -> Main.TICK_LISTENERS.remove(this)); //MinecraftClient.getInstance().send(() -> Main.TICK_LISTENERS.remove(this));
stopPlaybackThread(); stopPlaybackThread();
running = false; running = false;
@ -260,6 +264,7 @@ public class SongPlayer implements ClientTickEvents.StartWorldTick {
public synchronized void setPlayMode(PlayMode mode) { public synchronized void setPlayMode(PlayMode mode) {
this.playMode = mode; this.playMode = mode;
this.loopSong = mode == PlayMode.SINGLE_LOOP; this.loopSong = mode == PlayMode.SINGLE_LOOP;
DebugLogger.log("SongPlayer: 设置播放模式:"+ mode);
} }
// 获取当前播放进度 (0.0 - 1.0) // 获取当前播放进度 (0.0 - 1.0)
@ -294,6 +299,7 @@ public class SongPlayer implements ClientTickEvents.StartWorldTick {
int prevIndex = (currentIndex - 1 + SongLoader.currentFolder.songs.size()) % SongLoader.currentFolder.songs.size(); int prevIndex = (currentIndex - 1 + SongLoader.currentFolder.songs.size()) % SongLoader.currentFolder.songs.size();
start(SongLoader.currentFolder.songs.get(prevIndex)); start(SongLoader.currentFolder.songs.get(prevIndex));
DebugLogger.log("SongPlayer: 切上一首。");
} }
// 播放下一首 // 播放下一首
@ -309,6 +315,7 @@ public class SongPlayer implements ClientTickEvents.StartWorldTick {
int nextIndex = (currentIndex + 1) % SongLoader.currentFolder.songs.size(); int nextIndex = (currentIndex + 1) % SongLoader.currentFolder.songs.size();
start(SongLoader.currentFolder.songs.get(nextIndex)); start(SongLoader.currentFolder.songs.get(nextIndex));
DebugLogger.log("SongPlayer: 切下一首。");
} }
} }

View File

@ -5,10 +5,10 @@ import net.minecraft.client.gui.DrawContext;
public class ProgressBarRenderer { public class ProgressBarRenderer {
private static final int BACKGROUND_COLOR = 0x80808080; private static final int BACKGROUND_COLOR = 0x80808080;
private static final int PROGRESS_COLOR = 0x8000FF00; // 绿色 // private static final int PROGRESS_COLOR = 0x8000FF00;
private static final int TEXT_COLOR = 0xFFFFFF; private static final int TEXT_COLOR = 0xFFFFFF;
public void renderProgressBar(DrawContext context, int x, int y, int width, int height, float progress, String timeText) { public void renderProgressBar(DrawContext context, int x, int y, int width, int height, float progress, String timeText, int PROGRESS_COLOR) {
context.fill(x, y, x + width, y + height, BACKGROUND_COLOR); context.fill(x, y, x + width, y + height, BACKGROUND_COLOR);
int progressWidth = (int) (width * progress); int progressWidth = (int) (width * progress);
@ -17,7 +17,7 @@ public class ProgressBarRenderer {
MinecraftClient client = MinecraftClient.getInstance(); MinecraftClient client = MinecraftClient.getInstance();
int textX = x + (width - client.textRenderer.getWidth(timeText)) / 2; int textX = x + (width - client.textRenderer.getWidth(timeText)) / 2;
int textY = y - client.textRenderer.fontHeight - 2; int textY = y - client.textRenderer.fontHeight - 0;
context.drawTextWithShadow(client.textRenderer, timeText, textX, textY, TEXT_COLOR); context.drawTextWithShadow(client.textRenderer, timeText, textX, textY, TEXT_COLOR);
} }
} }

View File

@ -29,7 +29,7 @@ public class PlaybackProgressOverlay implements HudRenderCallback {
int screenHeight = context.getScaledWindowHeight(); int screenHeight = context.getScaledWindowHeight();
int barX = screenWidth / 2 - PROGRESS_BAR_WIDTH / 2; int barX = screenWidth / 2 - PROGRESS_BAR_WIDTH / 2;
int barY = screenHeight - 55; int barY = screenHeight - 55; // 差不多比护甲值高一点
progressBarRenderer.renderProgressBar( progressBarRenderer.renderProgressBar(
context, context,
@ -38,7 +38,27 @@ public class PlaybackProgressOverlay implements HudRenderCallback {
PROGRESS_BAR_WIDTH, PROGRESS_BAR_WIDTH,
5, 5,
Main.SONG_PLAYER.getProgress(), Main.SONG_PLAYER.getProgress(),
Main.SONG_PLAYER.getFormattedTime() Main.SONG_PLAYER.getFormattedTime(),
0x8000FF00
);
}
if (Main.PREVIEWER.running && Main.PREVIEWER.song != null && isInGame) {
int screenWidth = context.getScaledWindowWidth();
int screenHeight = context.getScaledWindowHeight();
int barX = screenWidth / 2 - PROGRESS_BAR_WIDTH / 2;
int barY = screenHeight - 42; // 差不多比生命值高一点
progressBarRenderer.renderProgressBar(
context,
barX,
barY,
PROGRESS_BAR_WIDTH,
5,
Main.PREVIEWER.getProgress(),
Main.PREVIEWER.getFormattedTime(),
0x80FF0000
); );
} }

View File

@ -9,10 +9,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.text.MutableText; import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import semmiedev.disc_jockey_revive.Main; import semmiedev.disc_jockey_revive.*;
import semmiedev.disc_jockey_revive.Note;
import semmiedev.disc_jockey_revive.Song;
import semmiedev.disc_jockey_revive.SongLoader;
import semmiedev.disc_jockey_revive.gui.ProgressBarRenderer; import semmiedev.disc_jockey_revive.gui.ProgressBarRenderer;
import semmiedev.disc_jockey_revive.gui.SongListWidget; import semmiedev.disc_jockey_revive.gui.SongListWidget;
import semmiedev.disc_jockey_revive.gui.hud.BlocksOverlay; import semmiedev.disc_jockey_revive.gui.hud.BlocksOverlay;
@ -72,6 +69,7 @@ public class DiscJockeyScreen extends Screen {
@Override @Override
protected void init() { protected void init() {
DebugLogger.log("DiscJockeyScreen: 开始初始化界面");
shouldFilter = true; shouldFilter = true;
songListWidget = new SongListWidget(client, width, height - 100, 32, 20, this); songListWidget = new SongListWidget(client, width, height - 100, 32, 20, this);
boolean isLargeScreen = width > 900; boolean isLargeScreen = width > 900;
@ -129,7 +127,7 @@ public class DiscJockeyScreen extends Screen {
int centerX = width / 2; int centerX = width / 2;
// 上一首 // 上一首
addDrawableChild(ButtonWidget.builder(Text.literal("◀◀"), button -> { addDrawableChild(ButtonWidget.builder(Text.literal("|◀◀"), button -> {
Main.SONG_PLAYER.playPreviousSong(); Main.SONG_PLAYER.playPreviousSong();
}).dimensions(centerX - 100, buttonY, 40, 20).build()); }).dimensions(centerX - 100, buttonY, 40, 20).build());
@ -148,7 +146,7 @@ public class DiscJockeyScreen extends Screen {
addDrawableChild(playButton); addDrawableChild(playButton);
// 下一首 // 下一首
addDrawableChild(ButtonWidget.builder(Text.literal("▶▶"), button -> { addDrawableChild(ButtonWidget.builder(Text.literal("▶▶|"), button -> {
Main.SONG_PLAYER.playNextSong(); Main.SONG_PLAYER.playNextSong();
}).dimensions(centerX + 60, buttonY, 40, 20).build()); }).dimensions(centerX + 60, buttonY, 40, 20).build());
@ -287,7 +285,7 @@ public class DiscJockeyScreen extends Screen {
// 进度条 // 进度条
if (Main.SONG_PLAYER.running && Main.SONG_PLAYER.song != null) { if (Main.SONG_PLAYER.running && Main.SONG_PLAYER.song != null) {
int progressBarX = 10; int progressBarX = 10;
int progressBarY = height - 50; // 按钮上方 int progressBarY = height - 52; // 按钮上方
int barWidth = screenWidth - 20; int barWidth = screenWidth - 20;
progressBarRenderer.renderProgressBar( progressBarRenderer.renderProgressBar(
@ -297,9 +295,30 @@ public class DiscJockeyScreen extends Screen {
barWidth, barWidth,
5, 5,
Main.SONG_PLAYER.getProgress(), Main.SONG_PLAYER.getProgress(),
Main.SONG_PLAYER.getFormattedTime() Main.SONG_PLAYER.getFormattedTime(),
0x8000FF00
); );
} }
// 进度条
if (Main.PREVIEWER.running && Main.PREVIEWER.song != null) {
int progressBarX = 10;
int progressBarY = height - 37; // 比上一个低一点
int barWidth = screenWidth - 20;
progressBarRenderer.renderProgressBar(
context,
progressBarX,
progressBarY,
barWidth,
5,
Main.PREVIEWER.getProgress(),
Main.PREVIEWER.getFormattedTime(),
0x80FF0000
);
}
DebugLogger.log("DiscJockeyScreen: 初始化界面完成");
} }
@Override @Override

View File

@ -6,6 +6,7 @@ import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import semmiedev.disc_jockey_revive.DebugLogger;
import semmiedev.disc_jockey_revive.Main; import semmiedev.disc_jockey_revive.Main;
import semmiedev.disc_jockey_revive.Note; import semmiedev.disc_jockey_revive.Note;
import semmiedev.disc_jockey_revive.gui.KeyMappingListWidget; import semmiedev.disc_jockey_revive.gui.KeyMappingListWidget;
@ -34,6 +35,8 @@ public class EditKeyMappingsScreen extends Screen {
protected void init() { protected void init() {
super.init(); super.init();
DebugLogger.log("EditKeyMappingsScreen: 开始初始化界面");
int listTop = 40; int listTop = 40;
int listBottom = this.height - 50; int listBottom = this.height - 50;
int listHeight = listBottom - listTop; int listHeight = listBottom - listTop;
@ -56,6 +59,8 @@ public class EditKeyMappingsScreen extends Screen {
this.client.setScreen(this.parent); this.client.setScreen(this.parent);
}).dimensions(buttonX, buttonY, buttonWidth, buttonHeight).build(); }).dimensions(buttonX, buttonY, buttonWidth, buttonHeight).build();
addDrawableChild(doneButton); addDrawableChild(doneButton);
DebugLogger.log("EditKeyMappingsScreen: 界面初始化完成");
} }
private void refreshMappingList() { private void refreshMappingList() {
@ -90,6 +95,7 @@ public class EditKeyMappingsScreen extends Screen {
@Override @Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) { public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
DebugLogger.log("EditKeyMappingsScreen: 按下按键:"+keyCode);
if (waitingForKeyPress) { if (waitingForKeyPress) {
if (keyCode == GLFW.GLFW_KEY_ESCAPE) { if (keyCode == GLFW.GLFW_KEY_ESCAPE) {

View File

@ -38,6 +38,8 @@ public class LiveDjScreen extends Screen {
protected void init() { protected void init() {
super.init(); super.init();
DebugLogger.log("LiveDjScreen: 开始初始化界面");
int centerX = this.width / 2; int centerX = this.width / 2;
int buttonWidth = 150; int buttonWidth = 150;
int buttonHeight = 20; int buttonHeight = 20;
@ -50,6 +52,7 @@ public class LiveDjScreen extends Screen {
Main.LIVE_DJ_PLAYER.startTuning(); Main.LIVE_DJ_PLAYER.startTuning();
}).dimensions(centerX + margin, buttonY, buttonWidth, buttonHeight).build(); }).dimensions(centerX + margin, buttonY, buttonWidth, buttonHeight).build();
addDrawableChild(startTuningButton); addDrawableChild(startTuningButton);
DebugLogger.log("LiveDjScreen: 界面初始化完成");
} }
@Override @Override
@ -125,6 +128,7 @@ public class LiveDjScreen extends Screen {
@Override @Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) { public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
DebugLogger.log("LiveDjScreen: 按下按键"+keyCode);
InputUtil.Key key = InputUtil.fromKeyCode(keyCode, scanCode); InputUtil.Key key = InputUtil.fromKeyCode(keyCode, scanCode);
if (keyCode == GLFW.GLFW_KEY_ESCAPE) { if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
this.close(); this.close();

View File

@ -15,6 +15,7 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import semmiedev.disc_jockey_revive.DebugLogger;
import semmiedev.disc_jockey_revive.Main; import semmiedev.disc_jockey_revive.Main;
import semmiedev.disc_jockey_revive.Note; import semmiedev.disc_jockey_revive.Note;
import semmiedev.disc_jockey_revive.KeyMappingManager; import semmiedev.disc_jockey_revive.KeyMappingManager;
@ -46,12 +47,14 @@ public class SelectNoteScreen extends Screen {
protected void init() { protected void init() {
super.init(); super.init();
DebugLogger.log("SelectNoteScreen: 开始初始化界面");
int centerX = this.width / 2; int centerX = this.width / 2;
int startY = this.height / 2 - 50; int startY = this.height / 2 - 50;
int widgetWidth = 200; int widgetWidth = 200;
int widgetHeight = 20; int widgetHeight = 20;
int margin = 5; int margin = 5;
CyclingButtonWidget<NoteBlockInstrument> instrumentButton = CyclingButtonWidget.builder((NoteBlockInstrument instrument) -> Text.translatable("block.minecraft.note_block.instrument." + instrument.asString())) CyclingButtonWidget<NoteBlockInstrument> instrumentButton = CyclingButtonWidget.builder((NoteBlockInstrument instrument) -> Text.translatable("" + instrument.asString()))
.values(NoteBlockInstrument.values()) .values(NoteBlockInstrument.values())
.initially(selectedInstrument) .initially(selectedInstrument)
@ -82,6 +85,8 @@ public class SelectNoteScreen extends Screen {
this.client.setScreen(this.parent); this.client.setScreen(this.parent);
parent.stopWaitingForKeyPress(); parent.stopWaitingForKeyPress();
}).dimensions(cancelButtonX, buttonY, buttonWidth, widgetHeight).build()); }).dimensions(cancelButtonX, buttonY, buttonWidth, widgetHeight).build());
DebugLogger.log("SelectNoteScreen: 界面初始化完成");
} }
private class CustomPitchSlider extends SliderWidget { private class CustomPitchSlider extends SliderWidget {
public CustomPitchSlider(int x, int y, int width, int height, Text text, double value) { public CustomPitchSlider(int x, int y, int width, int height, Text text, double value) {
@ -154,6 +159,7 @@ public class SelectNoteScreen extends Screen {
@Override @Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) { public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
DebugLogger.log("SelectNoteScreen: 按下按键"+keyCode);
if (keyCode == GLFW.GLFW_KEY_ESCAPE) { if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
this.client.setScreen(this.parent); this.client.setScreen(this.parent);

View File

@ -93,5 +93,5 @@
"disc_jockey_revive.player.invalid_state_tuning": "Cannot tune: Invalid game state or mode.", "disc_jockey_revive.player.invalid_state_tuning": "Cannot tune: Invalid game state or mode.",
"disc_jockey_revive.player.tuned": "Tuning completed。", "disc_jockey_revive.player.tuned": "Tuning completed。",
"text.autoconfig.disc_jockey_revive.option.debugModeEnabled": "Enable Debug Mode", "text.autoconfig.disc_jockey_revive.option.debugModeEnabled": "Enable Debug Mode",
"text.autoconfig.disc_jockey_revive.option.debugModeEnabled.@Tooltip": "Enables verbose logging for debugging purposes. \nKeep off unless troubleshooting. \nOf course, many debug-related parts have already been removed." "text.autoconfig.disc_jockey_revive.option.debugModeEnabled.@Tooltip": "Enable detailed logging for debugging.\nKeep it off unless troubleshooting.\nOf course, many debug parts have been removed.\nEnabling this may cause the log file to be too large.\nHonestly, it's not really helpful for you."
} }

View File

@ -93,5 +93,5 @@
"disc_jockey_revive.player.invalid_state_tuning": "无法调音:游戏状态或模式无效。", "disc_jockey_revive.player.invalid_state_tuning": "无法调音:游戏状态或模式无效。",
"disc_jockey_revive.player.tuned": "调音完成。", "disc_jockey_revive.player.tuned": "调音完成。",
"text.autoconfig.disc_jockey_revive.option.debugModeEnabled": "启用调试模式", "text.autoconfig.disc_jockey_revive.option.debugModeEnabled": "启用调试模式",
"text.autoconfig.disc_jockey_revive.option.debugModeEnabled.@Tooltip": "启用详细日志输出以进行调试。\n除非排查问题否则请保持关闭。\n当然很多调试用的部分已经移除。" "text.autoconfig.disc_jockey_revive.option.debugModeEnabled.@Tooltip": "启用详细日志输出以进行调试。\n除非排查问题否则请保持关闭。\n当然很多调试用的部分已经移除。\n开启这个可能会导致日志文件占用过大\n老实说其实这对你并没有什么帮助"
} }