Skip to content

Commit dbf8a94

Browse files
committed
overcomplicated everything
1 parent 316de9c commit dbf8a94

File tree

20 files changed

+342
-38
lines changed

20 files changed

+342
-38
lines changed
58.4 KB
Binary file not shown.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
distributionBase=GRADLE_USER_HOME
2+
distributionPath=wrapper/dists
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
4+
zipStoreBase=GRADLE_USER_HOME
5+
zipStorePath=wrapper/dists

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import net.fabricmc.loader.api.FabricLoader;
55
import org.slf4j.Logger;
66
import org.slf4j.LoggerFactory;
7+
import simpleclient.adapter.TranslationAdapter;
8+
import simpleclient.adapter.TranslationAdapterImpl;
79
import simpleclient.feature.FeatureManager;
10+
import simpleclient.feature.FeatureManagerImpl;
811

912
public class SimpleClient implements ClientModInitializer {
1013
public static final Logger LOGGER = LoggerFactory.getLogger("simpleclient");
@@ -13,7 +16,9 @@ public class SimpleClient implements ClientModInitializer {
1316
@Override
1417
public void onInitializeClient() {
1518
VERSION = loadVersion();
16-
FeatureManager.init();
19+
TranslationAdapter.INSTANCE = new TranslationAdapterImpl();
20+
FeatureManager.INSTANCE = new FeatureManagerImpl();
21+
FeatureManager.INSTANCE.init();
1722
}
1823

1924
public String loadVersion() {

simpleclient-1.19.4/src/main/java/simpleclient/adapter/ItemRendererAdapterImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import simpleclient.item.ItemStack;
66

77
public class ItemRendererAdapterImpl extends ItemRendererAdapter {
8-
private PoseStack poseStack;
8+
private final PoseStack poseStack;
99

1010
public ItemRendererAdapterImpl(PoseStack poseStack) {
1111
this.poseStack = poseStack;
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,51 @@
11
package simpleclient.adapter;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
4-
import net.minecraft.client.Minecraft;
4+
import net.minecraft.client.gui.Font;
55
import simpleclient.text.Text;
66

77
public class TextRendererAdapterImpl extends TextRendererAdapter {
8-
private PoseStack poseStack;
8+
private final PoseStack poseStack;
9+
private final Font font;
910

10-
public TextRendererAdapterImpl(PoseStack poseStack) {
11+
public TextRendererAdapterImpl(PoseStack poseStack, Font font) {
1112
this.poseStack = poseStack;
13+
this.font = font;
1214
}
1315

1416
@Override
1517
public void render(Text text, int x, int y) {
16-
Minecraft.getInstance().font.draw(poseStack, TextAdapter.adapt(text), x, y, text.getStyle().getColor().getARGB());
18+
font.draw(poseStack, TextAdapter.adapt(text), x, y, text.getStyle().getColor().getARGB());
19+
//font.draw(poseStack, TextAdapter.adapt(text), 50, 50, 0xFFFFFFFF);
1720
}
1821

1922
@Override
2023
public void render(Text text, int x, int y, int color) {
21-
Minecraft.getInstance().font.draw(poseStack, TextAdapter.adapt(text), x, y, color);
24+
font.draw(poseStack, TextAdapter.adapt(text), x, y, color);
2225
}
2326

2427
@Override
2528
public void renderWithShadow(Text text, int x, int y) {
26-
Minecraft.getInstance().font.drawShadow(poseStack, TextAdapter.adapt(text), x, y, text.getStyle().getColor().getARGB());
29+
font.drawShadow(poseStack, TextAdapter.adapt(text), x, y, text.getStyle().getColor().getARGB());
2730
}
2831

2932
@Override
3033
public void renderWithShadow(Text text, int x, int y, int color) {
31-
Minecraft.getInstance().font.drawShadow(poseStack, TextAdapter.adapt(text), x, y, color);
34+
font.drawShadow(poseStack, TextAdapter.adapt(text), x, y, color);
3235
}
3336

3437
@Override
3538
public int getWidth(Text text) {
36-
return Minecraft.getInstance().font.width(TextAdapter.adapt(text));
39+
return font.width(TextAdapter.adapt(text));
3740
}
3841

3942
@Override
4043
public int getWidth(String text) {
41-
return Minecraft.getInstance().font.width(text);
44+
return font.width(text);
4245
}
4346

4447
@Override
4548
public int getHeight() {
46-
return Minecraft.getInstance().font.lineHeight;
49+
return font.lineHeight;
4750
}
4851
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package simpleclient.adapter;
22

3-
import net.minecraft.util.Language;
3+
import net.minecraft.locale.Language;
44

55
public class TranslationAdapterImpl extends TranslationAdapter {
66
@Override
77
public String translate(String key, Object... args) {
8-
String value = Language.getInstance().get(key);
8+
String value = Language.getInstance().getOrDefault(key);
99
return value.formatted(args);
1010
}
1111
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package simpleclient.feature;
2+
3+
import com.google.gson.JsonArray;
4+
import net.minecraft.client.Minecraft;
5+
import simpleclient.text.Style;
6+
7+
public class FPS extends DraggableTextFeature {
8+
public FPS() {
9+
super(FeatureType.FPS);
10+
}
11+
12+
@Override
13+
public String valueForParameter(String parameter) {
14+
if (parameter.equals("fps")) return "" + Minecraft.getInstance().getFps();
15+
else return "";
16+
}
17+
18+
@Override
19+
public String valueForDummyParameter(String parameter) {
20+
if (parameter.equals("fps")) return "" + Minecraft.getInstance().getFps();
21+
else return "";
22+
}
23+
24+
@Override
25+
public JsonArray getDefaultFormat() {
26+
JsonArray format = new JsonArray();
27+
format.add(text("FPS: ", new Style()));
28+
format.add(parameter("fps", new Style()));
29+
return format;
30+
}
31+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package simpleclient.feature;
2+
3+
import com.mojang.blaze3d.platform.InputConstants;
4+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
5+
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
6+
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
7+
import net.minecraft.client.KeyMapping;
8+
import net.minecraft.client.Minecraft;
9+
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;
14+
import simpleclient.gui.EditFeaturesScreen;
15+
16+
public class FeatureManagerImpl extends FeatureManager {
17+
public FeatureManagerImpl() {
18+
super();
19+
Minecraft mc = Minecraft.getInstance();
20+
KeyMapping editFeaturesKey = KeyBindingHelper.registerKeyBinding(new KeyMapping("simpleclient.edit_features", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, "key.categories.simpleclient"));
21+
ClientTickEvents.END_CLIENT_TICK.register(c -> {
22+
if (editFeaturesKey.consumeClick() && mc.screen == null && mc.level != null) {
23+
mc.setScreen(new EditFeaturesScreen());
24+
}
25+
});
26+
}
27+
28+
@Override
29+
public void init() {
30+
addFeature(new FPS());
31+
super.init();
32+
}
33+
}
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package simpleclient.gui;
2+
3+
import com.mojang.blaze3d.vertex.PoseStack;
4+
import net.minecraft.client.gui.screens.Screen;
5+
import net.minecraft.network.chat.Component;
6+
import simpleclient.adapter.ItemRendererAdapter;
7+
import simpleclient.adapter.ItemRendererAdapterImpl;
8+
import simpleclient.adapter.TextRendererAdapter;
9+
import simpleclient.adapter.TextRendererAdapterImpl;
10+
import simpleclient.feature.*;
11+
import simpleclient.text.Text;
12+
13+
import java.util.List;
14+
15+
public class EditFeaturesScreen extends Screen {
16+
public DraggableFeature active;
17+
public double offsetX = 0;
18+
public double offsetY = 0;
19+
public int scroll = 0;
20+
21+
public EditFeaturesScreen() {
22+
super(Component.translatable("simpleclient.edit_features"));
23+
}
24+
25+
@Override
26+
public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) {
27+
TextRendererAdapter textRenderer = new TextRendererAdapterImpl(poseStack, font);
28+
ItemRendererAdapter itemRenderer = new ItemRendererAdapterImpl(poseStack);
29+
// Render Features
30+
for (Feature feature : FeatureManager.INSTANCE.getFeatures()) {
31+
if (feature instanceof RenderableFeature rf && rf.isEnabled()) {
32+
rf.renderDummy(textRenderer, itemRenderer, width, height);
33+
if (rf instanceof DraggableFeature df) {
34+
int x1 = df.getXPos(width) - 1;
35+
int y1 = df.getYPos(height) - 1;
36+
int x2 = df.getXPos(width) + df.getWidth(textRenderer, itemRenderer, width, height) + 1;
37+
int y2 = df.getYPos(height) + df.getHeight(textRenderer, itemRenderer, width, height) + 1;
38+
fill(poseStack, x1 - 1, y1 - 1, x2 + 1, y1, 0xFFAAAAAA);
39+
fill(poseStack, x1 - 1, y2, x2 + 1, y2 + 1, 0xFFAAAAAA);
40+
fill(poseStack, x1 - 1, y1 - 1, x1, y2 + 1, 0xFFAAAAAA);
41+
fill(poseStack, x2, y1 - 1, x2 + 1, y2 + 1, 0xFFAAAAAA);
42+
}
43+
}
44+
}
45+
// Render Buttons
46+
fill(poseStack, 0, 0, width / 4, height, 0x77000000);
47+
List<EnableableFeature> enableableFeatures = FeatureManager.INSTANCE.getEnableableFeatures();
48+
for (int i = 0; i < enableableFeatures.size(); i++) {
49+
EnableableFeature mod = enableableFeatures.get(i);
50+
int x = i % 3;
51+
int y = i / 3;
52+
int wSize = (width / 4 - 8) / 3;
53+
int wX1 = 2 + (2 + wSize) * x;
54+
int wY1 = 2 + 2 + (2 + wSize) * y;
55+
int wX2 = (2 + wSize) * x + wSize;
56+
int wY2 = 2 + (2 + wSize) * y + wSize;
57+
fill(poseStack, wX1, scroll + wY1, wX2, scroll + wY2, 0xff555555);
58+
fill(poseStack, wX1 + wSize / 10, scroll + wY2 - wSize / 10 - wSize / 3 / 2, wX1 + wSize / 10 + wSize / 3, scroll + wY2 - wSize / 10, mod.isEnabled() ? 0xff00ff00 : 0xffff0000);
59+
if (mod.isEnabled()) {
60+
fill(poseStack, wX1 + wSize / 10 + wSize / 3 / 2 + wSize / 20, scroll + wY2 - wSize / 10 - wSize / 3 / 2 + wSize / 20, wX1 + wSize / 10 + wSize / 3 - wSize / 20, scroll + wY2 - wSize / 10 - wSize / 20, 0xff000000);
61+
} else {
62+
fill(poseStack, wX1 + wSize / 10 + wSize / 20, scroll + wY2 - wSize / 10 - wSize / 3 / 2 + wSize / 20, wX1 + wSize / 10 + wSize / 3 / 2 - wSize / 20, scroll + wY2 - wSize / 10 - wSize / 20, 0xff000000);
63+
}
64+
poseStack.pushPose();
65+
float scaleX = (((float) wSize) * 0.8F) / textRenderer.getWidth(mod.getName().split(" - ")[0]);
66+
float scaleY = (((float) wSize) * 0.3F) / textRenderer.getHeight();
67+
float scale = Math.min(scaleX, scaleY);
68+
poseStack.scale(scale, scale, scale);
69+
int yOffset = 0;
70+
for (String str : mod.getName().split(" - ")) {
71+
textRenderer.render(Text.literal(str), (int) ((wX1 + (wSize - textRenderer.getWidth(str) * scale) / 2) / scale), (int) ((scroll + wY1 + wSize * 0.1F + yOffset) / scale), 0xffffff);
72+
yOffset += textRenderer.getHeight();
73+
}
74+
poseStack.popPose();
75+
}
76+
}
77+
78+
@Override
79+
public boolean mouseClicked(double mouseX, double mouseY, int button) {
80+
TextRendererAdapter textRenderer = new TextRendererAdapterImpl(null, font);
81+
ItemRendererAdapter itemRenderer = new ItemRendererAdapterImpl(null);
82+
active = getFeature(textRenderer, itemRenderer, mouseX, mouseY);
83+
if (active != null) {
84+
offsetX = mouseX - active.getXPos(width);
85+
offsetY = mouseY - active.getYPos(height);
86+
}
87+
return super.mouseClicked(mouseX, mouseY, button);
88+
}
89+
90+
@Override
91+
public void mouseMoved(double mouseX, double mouseY) {
92+
if (active != null) {
93+
active.setXPos((int) (mouseX - offsetX), width);
94+
active.setYPos((int) (mouseY - offsetY), height);
95+
}
96+
}
97+
98+
@Override
99+
public boolean mouseReleased(double mouseX, double mouseY, int button) {
100+
if (active == null) {
101+
List<EnableableFeature> enableableFeatures = FeatureManager.INSTANCE.getEnableableFeatures();
102+
for (int i = 0; i < enableableFeatures.size(); i++) {
103+
EnableableFeature mod = enableableFeatures.get(i);
104+
int x = i % 3;
105+
int y = i / 3;
106+
int wSize = (width / 4 - 8) / 3;
107+
int wX1 = 2 + (2 + wSize) * x;
108+
int wY1 = 2 + 2 + (2 + wSize) * y;
109+
int wX2 = (2 + wSize) * x + wSize;
110+
int wY2 = 2 + (2 + wSize) * y + wSize;
111+
if (wX1 <= mouseX && mouseX <= wX2 &&
112+
wY1 + scroll <= mouseY && mouseY <= wY2 + scroll) {
113+
mod.setEnabled(!mod.isEnabled());
114+
}
115+
}
116+
} else active = null;
117+
return super.mouseReleased(mouseX, mouseY, button);
118+
}
119+
120+
private DraggableFeature getFeature(TextRendererAdapter textRenderer, ItemRendererAdapter itemRenderer, double mouseX, double mouseY) {
121+
for (Feature mod : FeatureManager.INSTANCE.getFeatures()) {
122+
if (mod instanceof DraggableFeature df && df.isEnabled()) {
123+
int x1 = df.getXPos(width) - 1;
124+
int y1 = df.getYPos(height) - 1;
125+
int x2 = df.getXPos(width) + df.getWidth(textRenderer, itemRenderer, width, height) + 1;
126+
int y2 = df.getYPos(height) + df.getHeight(textRenderer, itemRenderer, width, height) + 1;
127+
if (x1 <= mouseX && mouseX <= x2 &&
128+
y1 <= mouseY && mouseY <= y2) return df;
129+
}
130+
}
131+
return null;
132+
}
133+
134+
@Override
135+
public void removed() {
136+
FeatureManager.INSTANCE.getJson().save();
137+
}
138+
139+
@Override
140+
public boolean mouseScrolled(double mouseX, double mouseY, double amount) {
141+
scroll += amount * height / 50;
142+
return super.mouseScrolled(mouseX, mouseY, amount);
143+
}
144+
145+
@Override
146+
public boolean isPauseScreen() {
147+
return true;
148+
}
149+
}
Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,42 @@
11
package simpleclient.mixin;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
4+
import net.minecraft.client.Minecraft;
45
import net.minecraft.client.gui.Font;
56
import net.minecraft.client.gui.Gui;
67
import org.spongepowered.asm.mixin.Mixin;
78
import org.spongepowered.asm.mixin.Shadow;
89
import org.spongepowered.asm.mixin.injection.At;
910
import org.spongepowered.asm.mixin.injection.Inject;
1011
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
12+
import simpleclient.SimpleClient;
13+
import simpleclient.adapter.ItemRendererAdapter;
14+
import simpleclient.adapter.ItemRendererAdapterImpl;
15+
import simpleclient.adapter.TextRendererAdapter;
16+
import simpleclient.adapter.TextRendererAdapterImpl;
17+
import simpleclient.feature.Feature;
18+
import simpleclient.feature.FeatureManager;
19+
import simpleclient.feature.RenderableFeature;
20+
import simpleclient.gui.EditFeaturesScreen;
1121

1222
@Mixin(Gui.class)
1323
public abstract class InGameHudMixin {
14-
@Shadow public abstract Font getFont();
15-
1624
@Inject(at = @At("TAIL"), method = "render")
17-
private void renderHud(PoseStack matrices, float tickdelta, CallbackInfo ci) {
18-
//if (!SharedVaribles.hud_enabled || SharedVaribles.buildStatus == SharedVaribles.BUILD_STATUS.RELEASE) return;
19-
//getFont().drawShadow(matrices, SharedVaribles.buildStatus.name + " Build", 1, 1, Color.RED.darker().getRGB());
25+
private void renderHud(PoseStack poseStack, float tickDelta, CallbackInfo ci) {
26+
Minecraft mc = Minecraft.getInstance();
27+
TextRendererAdapter textRenderer = new TextRendererAdapterImpl(poseStack, mc.font);
28+
ItemRendererAdapter itemRenderer = new ItemRendererAdapterImpl(poseStack);
29+
// Watermark
30+
mc.font.drawShadow(poseStack, "SimpleClient " + SimpleClient.VERSION, mc.getWindow().getGuiScaledWidth() - mc.font.width("SimpleClient " + SimpleClient.VERSION) - 1, 1, 0xFFAAAAAA);
31+
// Features
32+
if (!(mc.screen instanceof EditFeaturesScreen)) {
33+
int width = mc.getWindow().getGuiScaledWidth();
34+
int height = mc.getWindow().getGuiScaledHeight();
35+
for (Feature feature : FeatureManager.INSTANCE.getFeatures()) {
36+
if (feature instanceof RenderableFeature rf && rf.isEnabled()) {
37+
rf.render(textRenderer, itemRenderer, width, height);
38+
}
39+
}
40+
}
2041
}
2142
}

0 commit comments

Comments
 (0)