From 2d5e1c71c6d867c83a2fa4858b1dd95a8c2a91f0 Mon Sep 17 00:00:00 2001 From: Oondanomala <87101222+Oondanomala@users.noreply.github.com> Date: Mon, 12 Jan 2026 20:36:49 +0100 Subject: [PATCH] Rework the main mod class to use Forge initialization events Also uses a proper logger --- .../dev/tr7zw/entityculling/CullTask.java | 4 +- .../tr7zw/entityculling/EntityCullingMod.java | 66 ++++++++++--------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/main/java/dev/tr7zw/entityculling/CullTask.java b/src/main/java/dev/tr7zw/entityculling/CullTask.java index 19b63aa..824c93c 100644 --- a/src/main/java/dev/tr7zw/entityculling/CullTask.java +++ b/src/main/java/dev/tr7zw/entityculling/CullTask.java @@ -122,10 +122,10 @@ public void run() { } } } catch (Exception e) { - e.printStackTrace(); + EntityCullingMod.LOGGER.error(e); } } - System.out.println("Shutting down culling task!"); + EntityCullingMod.LOGGER.info("Shutting down culling task!"); } // 1.8 doesn't know where the heck the camera is... what?!? diff --git a/src/main/java/dev/tr7zw/entityculling/EntityCullingMod.java b/src/main/java/dev/tr7zw/entityculling/EntityCullingMod.java index dac8cc3..1b937c6 100644 --- a/src/main/java/dev/tr7zw/entityculling/EntityCullingMod.java +++ b/src/main/java/dev/tr7zw/entityculling/EntityCullingMod.java @@ -1,9 +1,9 @@ package dev.tr7zw.entityculling; -import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -18,28 +18,36 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.lwjgl.input.Keyboard; -@Mod(modid = "entityculling", name = "EntityCulling", version = "1.6.2", clientSideOnly = true) +@Mod(modid = EntityCullingMod.MODID, name = EntityCullingMod.NAME, version = "1.6.2", clientSideOnly = true) public class EntityCullingMod { + public static final String MODID = "entityculling"; + public static final String NAME = "EntityCulling"; + public static final Logger LOGGER = LogManager.getLogger(NAME); + + @Mod.Instance(MODID) + public static EntityCullingMod instance; + private Path configFile; + private final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + public Config config; - public static EntityCullingMod instance = new EntityCullingMod(); public OcclusionCullingInstance culling; - public boolean debugHitboxes = false; - public static boolean enabled = true; // public static to make it faster for the jvm public CullTask cullTask; private Thread cullThread; - protected KeyBinding keybind = new KeyBinding("key.entityculling.toggle", Keyboard.KEY_NONE, "text.entityculling.title"); - public Config config; - private final File settingsFile = new File("config", "entityculling.json"); - private final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + public static boolean enabled = true; // public static to make it faster for the jvm + private final KeyBinding keybind = new KeyBinding("key.entityculling.toggle", Keyboard.KEY_NONE, "text.entityculling.title"); + //public boolean debugHitboxes = false; - //stats + // Stats public int renderedBlockEntities = 0; public int skippedBlockEntities = 0; public int renderedEntities = 0; @@ -47,16 +55,14 @@ public class EntityCullingMod { //public int tickedEntities = 0; //public int skippedEntityTicks = 0; - // TODO: Should probably be using FMLPreInitializationEvent - public EntityCullingMod() { - instance = this; - if (settingsFile.exists()) { + @Mod.EventHandler + public void onPreInit(FMLPreInitializationEvent event) { + configFile = event.getModConfigurationDirectory().toPath().resolve(MODID + ".json"); + if (Files.exists(configFile)) { try { - config = gson.fromJson(new String(Files.readAllBytes(settingsFile.toPath()), StandardCharsets.UTF_8), - Config.class); - } catch (Exception ex) { - System.out.println("Error while loading config! Creating a new one!"); - ex.printStackTrace(); + config = gson.fromJson(Files.newBufferedReader(configFile), Config.class); + } catch (IOException e) { + LOGGER.error("Error while loading config! Creating a new one!", e); } } if (config == null) { @@ -67,31 +73,27 @@ public EntityCullingMod() { writeConfig(); // Config got modified } } + } + + @Mod.EventHandler + public void onInit(FMLInitializationEvent event) { culling = new OcclusionCullingInstance(config.tracingDistance, new Provider()); cullTask = new CullTask(culling, config.blockEntityWhitelist); - cullThread = new Thread(cullTask, "CullThread"); cullThread.setUncaughtExceptionHandler((thread, ex) -> { - System.out.println("The CullingThread has crashed! Please report the following stacktrace!"); - ex.printStackTrace(); + LOGGER.error("The CullingThread has crashed! Please report the following stacktrace!", ex); }); cullThread.start(); - } - @Mod.EventHandler - public void onPostInit(FMLPostInitializationEvent event) { ClientRegistry.registerKeyBinding(keybind); MinecraftForge.EVENT_BUS.register(this); } public void writeConfig() { - if (settingsFile.exists()) { - settingsFile.delete(); - } try { - Files.write(settingsFile.toPath(), gson.toJson(config).getBytes(StandardCharsets.UTF_8)); - } catch (IOException e1) { - e1.printStackTrace(); + Files.write(configFile, gson.toJson(config).getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + LOGGER.error(e); } }