Skip to content

Commit 366487c

Browse files
committed
Improved Entity rendering
1 parent 36aa2d4 commit 366487c

File tree

10 files changed

+103
-20
lines changed

10 files changed

+103
-20
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 & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,21 @@
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 {
17-
public FeatureManagerImpl() {
18-
super();
12+
@Override
13+
public void init() {
1914
Minecraft mc = Minecraft.getInstance();
2015
KeyMapping editFeaturesKey = KeyBindingHelper.registerKeyBinding(new KeyMapping("simpleclient.edit_features", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, "key.categories.simpleclient"));
2116
ClientTickEvents.END_CLIENT_TICK.register(c -> {
2217
if (editFeaturesKey.consumeClick() && mc.screen == null && mc.level != null) {
2318
mc.setScreen(new EditFeaturesScreen());
2419
}
2520
});
26-
}
27-
28-
@Override
29-
public void init() {
3021
addFeature(new FPS());
3122
addFeature(new PerformanceBoost());
3223
super.init();

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22

33
public class PerformanceBoost extends EnableableFeature {
44
public static PerformanceBoost INSTANCE = new PerformanceBoost();
5+
public static boolean ENABLED = INSTANCE.isEnabled();
56
public PerformanceBoost() {
6-
super(FeatureType.FPS);
7+
super(FeatureType.PERFORMANCE_BOOST);
8+
}
9+
10+
@Override
11+
public void setEnabled(boolean enabled) {
12+
super.setEnabled(enabled);
13+
ENABLED = enabled;
714
}
815
}
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: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
@Inject(at = @At("HEAD"), method = "compile", cancellable = true)
24+
public void compile(PoseStack.Pose pose, VertexConsumer vertexConsumer, int light, int overlay, float r, float g, float b, float a, CallbackInfo ci) {
25+
if (PerformanceBoost.INSTANCE.isEnabled()) ci.cancel();
26+
else return;
27+
Matrix4f matrix4f = pose.pose();
28+
Matrix3f matrix3f = pose.normal();
29+
for (ModelPart.Polygon quad : polygons) {
30+
ModelPart.Vertex[] vertices = quad.vertices;
31+
if (VertexUtils.isTriangleInvisible(
32+
VertexUtils.applyTransformation(vertices[0].pos, matrix4f),
33+
VertexUtils.applyTransformation(vertices[1].pos, matrix4f),
34+
VertexUtils.applyTransformation(vertices[2].pos, matrix4f)
35+
)) continue;
36+
Vector3f vector3f = matrix3f.transform(new Vector3f(quad.normal));
37+
float nx = vector3f.x(), ny = vector3f.y(), nz = vector3f.z();
38+
for (ModelPart.Vertex vertex : vertices) {
39+
Vector4f vector4f = matrix4f.transform(new Vector4f(
40+
vertex.pos.x() * VertexUtils.FAST_NORMAL,
41+
vertex.pos.y() * VertexUtils.FAST_NORMAL,
42+
vertex.pos.z() * VertexUtils.FAST_NORMAL,
43+
1.0F
44+
));
45+
vertexConsumer.vertex(vector4f.x(), vector4f.y(), vector4f.z(), r, g, b, a, vertex.u, vertex.v, overlay, light, nx, ny, nz);
46+
}
47+
}
48+
}
49+
}

simpleclient-1.19.4/src/main/java/simpleclient/mixin/SharedConstantsMixin.java renamed to simpleclient-1.19.4/src/main/java/simpleclient/mixin/performance/SharedConstantsMixin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package simpleclient.mixin;
1+
package simpleclient.mixin.performance;
22

33
import net.minecraft.SharedConstants;
44
import org.spongepowered.asm.mixin.Mixin;
@@ -9,7 +9,7 @@
99

1010
@Mixin(SharedConstants.class)
1111
public class SharedConstantsMixin {
12-
@Inject(at = @At("HEAD"), method = "enableDataFixerOptimizations")
12+
@Inject(at = @At("HEAD"), method = "enableDataFixerOptimizations", cancellable = true)
1313
private static void enableDataFixerOptimizations(CallbackInfo ci) {
1414
if (PerformanceBoost.INSTANCE.isEnabled()) ci.cancel();
1515
}

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": "assets/simpleclient/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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package simpleclient.feature;
22

33
public enum FeatureType {
4-
FPS("fps", "FPS");
4+
FPS("fps", "FPS"),
5+
PERFORMANCE_BOOST("performance_boost", "Performance Boost");
56

67
private String id;
78
private String name;

0 commit comments

Comments
 (0)