package semmiedev.disc_jockey; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.networking.v1.ClientLoginConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; import net.minecraft.client.world.ClientWorld; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.lwjgl.glfw.GLFW; import semmiedev.disc_jockey.gui.hud.BlocksOverlay; import semmiedev.disc_jockey.gui.screen.DiscJockeyScreen; import java.io.File; import java.util.ArrayList; // TODO: 5/31/2022 Add key bind to open disc jockey screen public class Main implements ClientModInitializer { public static final String MOD_ID = "disc_jockey"; public static final MutableText NAME = Text.literal("Disc Jockey"); public static final Logger LOGGER = LogManager.getLogger("Disc Jockey"); public static final ArrayList TICK_LISTENERS = new ArrayList<>(); public static final Previewer PREVIEWER = new Previewer(); public static final SongPlayer SONG_PLAYER = new SongPlayer(); public static File songsFolder; @Override public void onInitializeClient() { songsFolder = new File(FabricLoader.getInstance().getConfigDir()+File.separator+MOD_ID+File.separator+"songs"); if (!songsFolder.isDirectory()) songsFolder.mkdirs(); DiscjockeyCommand.register(); SongLoader.loadSongs(); KeyBinding openScreenKeyBind = KeyBindingHelper.registerKeyBinding(new KeyBinding(MOD_ID+".key_bind.open_screen", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_J, "key.category."+MOD_ID)); ClientTickEvents.START_CLIENT_TICK.register(new ClientTickEvents.StartTick() { private ClientWorld prevWorld; @Override public void onStartTick(MinecraftClient client) { if (prevWorld != client.world) { PREVIEWER.stop(); SONG_PLAYER.stop(); } prevWorld = client.world; if (openScreenKeyBind.wasPressed()) { if (SongLoader.loadingSongs) { client.inGameHud.getChatHud().addMessage(Text.translatable(Main.MOD_ID+".still_loading")); } else { client.setScreen(new DiscJockeyScreen()); } } } }); ClientTickEvents.START_WORLD_TICK.register(world -> { for (ClientTickEvents.StartWorldTick listener : TICK_LISTENERS) listener.onStartTick(world); }); ClientLoginConnectionEvents.DISCONNECT.register((handler, client) -> { PREVIEWER.stop(); SONG_PLAYER.stop(); }); HudRenderCallback.EVENT.register(BlocksOverlay::render); } }