Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/main/java/dev/tr7zw/entityculling/CullTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -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?!?
Expand Down
66 changes: 34 additions & 32 deletions src/main/java/dev/tr7zw/entityculling/EntityCullingMod.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -18,45 +18,51 @@
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;
public int skippedEntities = 0;
//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) {
Expand All @@ -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);
}
}

Expand Down