Skip to content

Commit 1a2f0e5

Browse files
authored
Merge pull request #3 from SimpeClient/performance
Performance Boost
2 parents cc1ee0c + 4fbc134 commit 1a2f0e5

File tree

10 files changed

+125
-10
lines changed

10 files changed

+125
-10
lines changed

simpleclient-1.19.4/src/main/java/simpleclient/SimpleClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public class SimpleClient implements ClientModInitializer {
1717
public void onInitializeClient() {
1818
VERSION = loadVersion();
1919
TranslationAdapter.INSTANCE = new TranslationAdapterImpl();
20-
FeatureManager.INSTANCE = new FeatureManagerImpl();
2120
FeatureManager.INSTANCE.init();
2221
}
2322

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package simpleclient;
2+
3+
import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint;
4+
import simpleclient.feature.FeatureManager;
5+
import simpleclient.feature.FeatureManagerImpl;
6+
7+
public class SimpleClientPreLaunch implements PreLaunchEntrypoint {
8+
@Override
9+
public void onPreLaunch() {
10+
FeatureManager.INSTANCE = new FeatureManagerImpl();
11+
}
12+
}

simpleclient-1.19.4/src/main/java/simpleclient/feature/FeatureManagerImpl.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,23 @@
33
import com.mojang.blaze3d.platform.InputConstants;
44
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
55
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
6-
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
76
import net.minecraft.client.KeyMapping;
87
import net.minecraft.client.Minecraft;
98
import org.lwjgl.glfw.GLFW;
10-
import simpleclient.adapter.ItemRendererAdapter;
11-
import simpleclient.adapter.ItemRendererAdapterImpl;
12-
import simpleclient.adapter.TextRendererAdapter;
13-
import simpleclient.adapter.TextRendererAdapterImpl;
149
import simpleclient.gui.EditFeaturesScreen;
1510

1611
public class FeatureManagerImpl extends FeatureManager {
1712
@Override
1813
public void init() {
14+
Minecraft mc = Minecraft.getInstance();
1915
KeyMapping editFeaturesKey = KeyBindingHelper.registerKeyBinding(new KeyMapping("simpleclient.edit_features", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, "key.categories.simpleclient"));
2016
ClientTickEvents.END_CLIENT_TICK.register(minecraft -> {
2117
if (editFeaturesKey.consumeClick() && minecraft.screen == null && minecraft.level != null) {
2218
minecraft.setScreen(new EditFeaturesScreen());
2319
}
2420
});
2521
addFeature(new FPS());
22+
addFeature(new PerformanceBoost());
2623
addFeature(new Motionblur());
2724
super.init();
2825
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package simpleclient.feature;
2+
3+
public class PerformanceBoost extends EnableableFeature {
4+
public static PerformanceBoost INSTANCE = new PerformanceBoost();
5+
public static boolean ENABLED = INSTANCE.isEnabled();
6+
public PerformanceBoost() {
7+
super(FeatureType.PERFORMANCE_BOOST);
8+
}
9+
10+
@Override
11+
public void setEnabled(boolean enabled) {
12+
super.setEnabled(enabled);
13+
ENABLED = enabled;
14+
}
15+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package simpleclient.math;
2+
3+
import org.joml.Matrix4f;
4+
import org.joml.Vector3f;
5+
6+
public class VertexUtils {
7+
public static final float FAST_NORMAL = 0.0625F;
8+
9+
public static boolean isTriangleInvisible(Vector3f p0, Vector3f p1, Vector3f p2) {
10+
return p1.sub(p0).cross(p2.sub(p0)).dot(p0) >= 0;
11+
}
12+
13+
public static Vector3f applyTransformation(Vector3f vector, Matrix4f matrix) {
14+
float x2 = vector.x() * FAST_NORMAL;
15+
float y2 = vector.y() * FAST_NORMAL;
16+
float z2 = vector.z() * FAST_NORMAL;
17+
return new Vector3f(
18+
Math.fma(matrix.m00(), x2, Math.fma(matrix.m10(), y2, Math.fma(matrix.m20(), z2, matrix.m30()))),
19+
Math.fma(matrix.m01(), x2, Math.fma(matrix.m11(), y2, Math.fma(matrix.m21(), z2, matrix.m31()))),
20+
Math.fma(matrix.m02(), x2, Math.fma(matrix.m12(), y2, Math.fma(matrix.m22(), z2, matrix.m32())))
21+
);
22+
}
23+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package simpleclient.mixin.performance;
2+
3+
import com.mojang.blaze3d.vertex.PoseStack;
4+
import com.mojang.blaze3d.vertex.VertexConsumer;
5+
import net.minecraft.client.model.geom.ModelPart;
6+
import org.joml.Matrix3f;
7+
import org.joml.Matrix4f;
8+
import org.joml.Vector3f;
9+
import org.joml.Vector4f;
10+
import org.spongepowered.asm.mixin.Final;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.Shadow;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
import org.spongepowered.asm.mixin.injection.Inject;
15+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
16+
import simpleclient.feature.PerformanceBoost;
17+
import simpleclient.math.VertexUtils;
18+
19+
@Mixin(ModelPart.Cube.class)
20+
public class CubeMixin {
21+
@Shadow @Final private ModelPart.Polygon[] polygons;
22+
23+
// +5 FPS with many Entities
24+
@Inject(at = @At("HEAD"), method = "compile", cancellable = true)
25+
public void compile(PoseStack.Pose pose, VertexConsumer vertexConsumer, int light, int overlay, float r, float g, float b, float a, CallbackInfo ci) {
26+
if (PerformanceBoost.INSTANCE.isEnabled()) ci.cancel();
27+
else return;
28+
Matrix4f matrix4f = pose.pose();
29+
Matrix3f matrix3f = pose.normal();
30+
for (ModelPart.Polygon quad : polygons) {
31+
ModelPart.Vertex[] vertices = quad.vertices;
32+
if (VertexUtils.isTriangleInvisible(
33+
VertexUtils.applyTransformation(vertices[0].pos, matrix4f),
34+
VertexUtils.applyTransformation(vertices[1].pos, matrix4f),
35+
VertexUtils.applyTransformation(vertices[2].pos, matrix4f)
36+
)) continue;
37+
Vector3f vector3f = matrix3f.transform(new Vector3f(quad.normal));
38+
float nx = vector3f.x(), ny = vector3f.y(), nz = vector3f.z();
39+
for (ModelPart.Vertex vertex : vertices) {
40+
Vector4f vector4f = matrix4f.transform(new Vector4f(
41+
vertex.pos.x() * VertexUtils.FAST_NORMAL,
42+
vertex.pos.y() * VertexUtils.FAST_NORMAL,
43+
vertex.pos.z() * VertexUtils.FAST_NORMAL,
44+
1.0F
45+
));
46+
vertexConsumer.vertex(vector4f.x(), vector4f.y(), vector4f.z(), r, g, b, a, vertex.u, vertex.v, overlay, light, nx, ny, nz);
47+
}
48+
}
49+
}
50+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package simpleclient.mixin.performance;
2+
3+
import net.minecraft.SharedConstants;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.injection.At;
6+
import org.spongepowered.asm.mixin.injection.Inject;
7+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
8+
import simpleclient.feature.PerformanceBoost;
9+
10+
@Mixin(SharedConstants.class)
11+
public class SharedConstantsMixin {
12+
// Faster starting
13+
@Inject(at = @At("HEAD"), method = "enableDataFixerOptimizations", cancellable = true)
14+
private static void enableDataFixerOptimizations(CallbackInfo ci) {
15+
if (PerformanceBoost.INSTANCE.isEnabled()) ci.cancel();
16+
}
17+
}

simpleclient-1.19.4/src/main/resources/fabric.mod.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616
"icon": "icon.png",
1717
"environment": "*",
1818
"entrypoints": {
19-
"client": [
20-
"simpleclient.SimpleClient"
21-
]
19+
"client": ["simpleclient.SimpleClient"],
20+
"preLaunch": ["simpleclient.SimpleClientPreLaunch"]
2221
},
2322
"mixins": [
2423
"simpleclient.mixins.json"

simpleclient-1.19.4/src/main/resources/simpleclient.mixins.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
"mixins": [
77
],
88
"client": [
9-
"InGameHudMixin"
9+
"InGameHudMixin",
10+
"performance.CubeMixin",
11+
"performance.SharedConstantsMixin"
1012
],
1113
"injectors": {
1214
"defaultRequire": 1

simpleclient-core/src/main/java/simpleclient/feature/FeatureType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
public enum FeatureType {
44
FPS("fps", "FPS"),
5+
PERFORMANCE_BOOST("performance_boost", "Performance Boost"),
56
MOTIONBLUR("motionblur", "Motionblur");
67

78
private String id;

0 commit comments

Comments
 (0)