2022-05-31 18:11:50 +02:00

77 lines
3.2 KiB
Java

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<ClientTickEvents.StartWorldTick> 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);
}
}