Skip to content

Commit 1ea9d82

Browse files
authored
Merge pull request #255 from Oondanomala/1.8-less-abstractions
[1.8] Remove unnecessary mod class abstraction
2 parents da8a3d2 + 6b9f37d commit 1ea9d82

File tree

7 files changed

+123
-149
lines changed

7 files changed

+123
-149
lines changed

src/main/java/dev/tr7zw/entityculling/CullTask.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.ConcurrentModificationException;
44
import java.util.Iterator;
5-
import java.util.Map.Entry;
65
import java.util.Set;
76

87
import com.logisticscraft.occlusionculling.OcclusionCullingInstance;
@@ -16,16 +15,15 @@
1615
import net.minecraft.util.AxisAlignedBB;
1716
import net.minecraft.util.BlockPos;
1817
import net.minecraft.util.Vec3;
19-
import net.minecraft.world.chunk.Chunk;
2018

2119
public class CullTask implements Runnable {
2220

2321
public boolean requestCull = false;
2422

2523
private final OcclusionCullingInstance culling;
2624
private final Minecraft client = Minecraft.getMinecraft();
27-
private final int sleepDelay = EntityCullingModBase.instance.config.sleepDelay;
28-
private final int hitboxLimit = EntityCullingModBase.instance.config.hitboxLimit;
25+
private final int sleepDelay = EntityCullingMod.instance.config.sleepDelay;
26+
private final int hitboxLimit = EntityCullingMod.instance.config.hitboxLimit;
2927
private final Set<String> unCullable;
3028
public long lastTime = 0;
3129

@@ -45,9 +43,9 @@ public void run() {
4543
try {
4644
Thread.sleep(sleepDelay);
4745

48-
if (EntityCullingModBase.enabled && client.theWorld != null && client.thePlayer != null && client.thePlayer.ticksExisted > 10 && client.getRenderViewEntity() != null) {
46+
if (EntityCullingMod.enabled && client.theWorld != null && client.thePlayer != null && client.thePlayer.ticksExisted > 10 && client.getRenderViewEntity() != null) {
4947
Vec3 cameraMC;
50-
if(EntityCullingModBase.instance.config.debugMode) {
48+
if(EntityCullingMod.instance.config.debugMode) {
5149
cameraMC = client.thePlayer.getPositionEyes(0);
5250
} else {
5351
cameraMC = getCameraPos();
@@ -105,7 +103,7 @@ public void run() {
105103
cullable.setCulled(false);
106104
continue;
107105
}
108-
if(entity.getPositionVector().squareDistanceTo(cameraMC) > EntityCullingModBase.instance.config.tracingDistance * EntityCullingModBase.instance.config.tracingDistance) {
106+
if(entity.getPositionVector().squareDistanceTo(cameraMC) > EntityCullingMod.instance.config.tracingDistance * EntityCullingMod.instance.config.tracingDistance) {
109107
cullable.setCulled(false); // If your entity view distance is larger than tracingDistance just render it
110108
continue;
111109
}
@@ -177,7 +175,7 @@ private Vec3 getCameraPos() {
177175
}
178176

179177
private boolean isSkippableArmorstand(Entity entity) {
180-
if(!EntityCullingModBase.instance.config.skipMarkerArmorStands)return false;
178+
if(!EntityCullingMod.instance.config.skipMarkerArmorStands)return false;
181179
return entity instanceof EntityArmorStand && ((EntityArmorStand) entity).hasMarker();
182180
}
183181
}
Lines changed: 97 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,107 @@
11
package dev.tr7zw.entityculling;
22

3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.nio.charset.StandardCharsets;
6+
import java.nio.file.Files;
7+
8+
import com.google.gson.Gson;
9+
import com.google.gson.GsonBuilder;
10+
import com.logisticscraft.occlusionculling.OcclusionCullingInstance;
11+
12+
import net.minecraft.client.Minecraft;
13+
import net.minecraft.client.entity.EntityPlayerSP;
14+
import net.minecraft.client.settings.KeyBinding;
15+
import net.minecraft.util.ChatComponentText;
16+
import net.minecraft.util.EnumChatFormatting;
317
import net.minecraftforge.common.MinecraftForge;
418
import net.minecraftforge.fml.client.registry.ClientRegistry;
519
import net.minecraftforge.fml.common.Mod;
6-
import net.minecraftforge.fml.common.Mod.EventHandler;
720
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
821
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
922
import net.minecraftforge.fml.common.gameevent.InputEvent;
10-
import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
11-
import net.minecraftforge.fml.common.gameevent.TickEvent.WorldTickEvent;
23+
import net.minecraftforge.fml.common.gameevent.TickEvent;
24+
import org.lwjgl.input.Keyboard;
1225

1326
@Mod(modid = "entityculling", name = "EntityCulling", version = "@VER@", clientSideOnly = true)
14-
public class EntityCullingMod extends EntityCullingModBase {
27+
public class EntityCullingMod {
28+
29+
public static EntityCullingMod instance = new EntityCullingMod();
30+
public OcclusionCullingInstance culling;
31+
public boolean debugHitboxes = false;
32+
public static boolean enabled = true; // public static to make it faster for the jvm
33+
public CullTask cullTask;
34+
private Thread cullThread;
35+
protected KeyBinding keybind = new KeyBinding("key.entityculling.toggle", Keyboard.KEY_NONE, "text.entityculling.title");
36+
37+
public Config config;
38+
private final File settingsFile = new File("config", "entityculling.json");
39+
private final Gson gson = new GsonBuilder().setPrettyPrinting().create();
40+
41+
//stats
42+
public int renderedBlockEntities = 0;
43+
public int skippedBlockEntities = 0;
44+
public int renderedEntities = 0;
45+
public int skippedEntities = 0;
46+
//public int tickedEntities = 0;
47+
//public int skippedEntityTicks = 0;
48+
49+
// TODO: Should probably be using FMLPreInitializationEvent
1550
public EntityCullingMod() {
16-
onInitialize();
17-
}
51+
instance = this;
52+
if (settingsFile.exists()) {
53+
try {
54+
config = gson.fromJson(new String(Files.readAllBytes(settingsFile.toPath()), StandardCharsets.UTF_8),
55+
Config.class);
56+
} catch (Exception ex) {
57+
System.out.println("Error while loading config! Creating a new one!");
58+
ex.printStackTrace();
59+
}
60+
}
61+
if (config == null) {
62+
config = new Config();
63+
writeConfig();
64+
} else {
65+
if (ConfigUpgrader.upgradeConfig(config)) {
66+
writeConfig(); // Config got modified
67+
}
68+
}
69+
culling = new OcclusionCullingInstance(config.tracingDistance, new Provider());
70+
cullTask = new CullTask(culling, config.blockEntityWhitelist);
1871

19-
@Override
20-
public void initModloader() {
72+
cullThread = new Thread(cullTask, "CullThread");
73+
cullThread.setUncaughtExceptionHandler((thread, ex) -> {
74+
System.out.println("The CullingThread has crashed! Please report the following stacktrace!");
75+
ex.printStackTrace();
76+
});
77+
cullThread.start();
2178
}
2279

23-
@EventHandler
80+
@Mod.EventHandler
2481
public void onPostInit(FMLPostInitializationEvent event) {
2582
ClientRegistry.registerKeyBinding(keybind);
2683
MinecraftForge.EVENT_BUS.register(this);
2784
}
2885

86+
public void writeConfig() {
87+
if (settingsFile.exists()) {
88+
settingsFile.delete();
89+
}
90+
try {
91+
Files.write(settingsFile.toPath(), gson.toJson(config).getBytes(StandardCharsets.UTF_8));
92+
} catch (IOException e1) {
93+
e1.printStackTrace();
94+
}
95+
}
96+
2997
@SubscribeEvent
30-
public void doClientTick(ClientTickEvent event) {
31-
this.clientTick();
98+
public void onWorldTick(TickEvent.WorldTickEvent event) {
99+
cullTask.requestCull = true;
32100
}
33101

34102
@SubscribeEvent
35-
public void doWorldTick(WorldTickEvent event) {
36-
this.worldTick();
103+
public void onClientTick(TickEvent.ClientTickEvent event) {
104+
cullTask.requestCull = true;
37105
}
38106

39107
@SubscribeEvent
@@ -45,4 +113,20 @@ public void onKeyInput(InputEvent.KeyInputEvent event) {
45113
public void onMouseInput(InputEvent.MouseInputEvent event) {
46114
keyBindPressed();
47115
}
116+
117+
public void keyBindPressed() {
118+
if (keybind.isPressed()) {
119+
enabled = !enabled;
120+
EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
121+
if (enabled) {
122+
if (player != null) {
123+
player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Culling on"));
124+
}
125+
} else {
126+
if (player != null) {
127+
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Culling off"));
128+
}
129+
}
130+
}
131+
}
48132
}

src/main/java/dev/tr7zw/entityculling/EntityCullingModBase.java

Lines changed: 0 additions & 108 deletions
This file was deleted.

src/main/java/dev/tr7zw/entityculling/mixin/BlockEntityRenderDispatcherMixin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import org.spongepowered.asm.mixin.injection.Inject;
66
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
77

8-
import dev.tr7zw.entityculling.EntityCullingModBase;
8+
import dev.tr7zw.entityculling.EntityCullingMod;
99
import dev.tr7zw.entityculling.access.Cullable;
1010
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
1111
import net.minecraft.tileentity.TileEntity;
@@ -17,11 +17,11 @@ public class BlockEntityRenderDispatcherMixin {
1717
public void renderTileEntityAt(TileEntity blockEntity, double p_renderTileEntityAt_2_, double d1,
1818
double d2, float f1, int p_renderTileEntityAt_9_, CallbackInfo info) {
1919
if (!((Cullable) blockEntity).isForcedVisible() && ((Cullable) blockEntity).isCulled()) {
20-
EntityCullingModBase.instance.skippedBlockEntities++;
20+
EntityCullingMod.instance.skippedBlockEntities++;
2121
info.cancel();
2222
return;
2323
}
24-
EntityCullingModBase.instance.renderedBlockEntities++;
24+
EntityCullingMod.instance.renderedBlockEntities++;
2525
}
2626

2727
}

src/main/java/dev/tr7zw/entityculling/mixin/CullableMixin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.spongepowered.asm.mixin.Mixin;
44

5-
import dev.tr7zw.entityculling.EntityCullingModBase;
5+
import dev.tr7zw.entityculling.EntityCullingMod;
66
import dev.tr7zw.entityculling.access.Cullable;
77
import net.minecraft.entity.Entity;
88
import net.minecraft.tileentity.TileEntity;
@@ -34,7 +34,7 @@ public void setCulled(boolean value) {
3434

3535
@Override
3636
public boolean isCulled() {
37-
if(!EntityCullingModBase.enabled)return false;
37+
if(!EntityCullingMod.enabled)return false;
3838
return culled;
3939
}
4040

@@ -45,7 +45,7 @@ public void setOutOfCamera(boolean value) {
4545

4646
@Override
4747
public boolean isOutOfCamera() {
48-
if(!EntityCullingModBase.enabled)return false;
48+
if(!EntityCullingMod.enabled)return false;
4949
return outOfCamera;
5050
}
5151

src/main/java/dev/tr7zw/entityculling/mixin/DebugHudMixin.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,29 @@
77
import org.spongepowered.asm.mixin.injection.Inject;
88
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
99

10-
import dev.tr7zw.entityculling.EntityCullingModBase;
10+
import dev.tr7zw.entityculling.EntityCullingMod;
1111
import net.minecraft.client.gui.GuiOverlayDebug;
1212

1313
@Mixin(GuiOverlayDebug.class)
1414
public class DebugHudMixin {
1515

1616
public DebugHudMixin() {
17-
EntityCullingModBase.instance.clientTick();
17+
// This is an ugly hack, but it's fine for now
18+
EntityCullingMod.instance.onClientTick(null);
1819
}
1920

2021
@Inject(method = "call", at = @At("RETURN"))
2122
public List<String> getLeftText(CallbackInfoReturnable<List<String>> callback) {
2223
List<String> list = callback.getReturnValue();
23-
list.add("[Culling] Last pass: " + EntityCullingModBase.instance.cullTask.lastTime + "ms");
24-
list.add("[Culling] Rendered Block Entities: " + EntityCullingModBase.instance.renderedBlockEntities + " Skipped: " + EntityCullingModBase.instance.skippedBlockEntities);
25-
list.add("[Culling] Rendered Entities: " + EntityCullingModBase.instance.renderedEntities + " Skipped: " + EntityCullingModBase.instance.skippedEntities);
24+
list.add("[Culling] Last pass: " + EntityCullingMod.instance.cullTask.lastTime + "ms");
25+
list.add("[Culling] Rendered Block Entities: " + EntityCullingMod.instance.renderedBlockEntities + " Skipped: " + EntityCullingMod.instance.skippedBlockEntities);
26+
list.add("[Culling] Rendered Entities: " + EntityCullingMod.instance.renderedEntities + " Skipped: " + EntityCullingMod.instance.skippedEntities);
2627
//list.add("[Culling] Ticked Entities: " + lastTickedEntities + " Skipped: " + lastSkippedEntityTicks);
2728

28-
EntityCullingModBase.instance.renderedBlockEntities = 0;
29-
EntityCullingModBase.instance.skippedBlockEntities = 0;
30-
EntityCullingModBase.instance.renderedEntities = 0;
31-
EntityCullingModBase.instance.skippedEntities = 0;
29+
EntityCullingMod.instance.renderedBlockEntities = 0;
30+
EntityCullingMod.instance.skippedBlockEntities = 0;
31+
EntityCullingMod.instance.renderedEntities = 0;
32+
EntityCullingMod.instance.skippedEntities = 0;
3233

3334
return list;
3435
}

0 commit comments

Comments
 (0)