Skip to content

Commit 1300859

Browse files
committed
Added Motion Blur
1 parent dbf8a94 commit 1300859

File tree

13 files changed

+148
-46
lines changed

13 files changed

+148
-46
lines changed

simpleclient-1.19.4/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ plugins {
44
}
55

66
repositories {
7+
maven { url = "https://ladysnake.jfrog.io/artifactory/mods" }
78
}
89

910
dependencies {
@@ -16,6 +17,8 @@ dependencies {
1617
include project(path: ':simpleclient-core')
1718
// Dependencies
1819
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
20+
modImplementation "io.github.ladysnake:satin:${project.satin_version}"
21+
include "io.github.ladysnake:satin:${project.satin_version}"
1922
}
2023

2124
processResources {

simpleclient-1.19.4/gradle.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ minecraft_version=1.19.4
33
fabric_loader_version=0.14.19
44

55
# Dependencies
6-
fabric_api_version=0.77.0+1.19.4
6+
fabric_api_version=0.77.0+1.19.4
7+
satin_version=1.12.1

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,17 @@
1414
import simpleclient.gui.EditFeaturesScreen;
1515

1616
public class FeatureManagerImpl extends FeatureManager {
17-
public FeatureManagerImpl() {
18-
super();
17+
@Override
18+
public void init() {
1919
Minecraft mc = Minecraft.getInstance();
2020
KeyMapping editFeaturesKey = KeyBindingHelper.registerKeyBinding(new KeyMapping("simpleclient.edit_features", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, "key.categories.simpleclient"));
2121
ClientTickEvents.END_CLIENT_TICK.register(c -> {
2222
if (editFeaturesKey.consumeClick() && mc.screen == null && mc.level != null) {
2323
mc.setScreen(new EditFeaturesScreen());
2424
}
2525
});
26-
}
27-
28-
@Override
29-
public void init() {
3026
addFeature(new FPS());
27+
addFeature(new Motionblur());
3128
super.init();
3229
}
3330
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package simpleclient.feature;
2+
3+
import com.google.gson.JsonObject;
4+
import ladysnake.satin.api.event.ShaderEffectRenderCallback;
5+
import ladysnake.satin.api.managed.ManagedShaderEffect;
6+
import ladysnake.satin.api.managed.ShaderEffectManager;
7+
import net.minecraft.resources.ResourceLocation;
8+
9+
public class Motionblur extends EnableableFeature {
10+
private final ManagedShaderEffect shader = ShaderEffectManager.getInstance().manage(new ResourceLocation("simpleclient", "shaders/post/motionblur.json"), shader -> {});
11+
12+
public Motionblur() {
13+
super(FeatureType.MOTIONBLUR);
14+
ShaderEffectRenderCallback.EVENT.register(tickDelta -> {
15+
if (isEnabled()) {
16+
JsonObject data = getData();
17+
if (!data.has("strength")) data.addProperty("strength", 0.2F);
18+
float strength = log(Math.pow(100.0F, 0.01F), data.get("strength").getAsFloat() * 100) / 100;
19+
shader.setUniformValue("strength", strength);
20+
shader.render(tickDelta);
21+
}
22+
});
23+
}
24+
25+
private float log(double base, double number) {
26+
return (float) (Math.log(number) / Math.log(base));
27+
}
28+
}

simpleclient-1.19.4/src/main/java/simpleclient/gui/EditFeaturesScreen.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) {
4646
fill(poseStack, 0, 0, width / 4, height, 0x77000000);
4747
List<EnableableFeature> enableableFeatures = FeatureManager.INSTANCE.getEnableableFeatures();
4848
for (int i = 0; i < enableableFeatures.size(); i++) {
49-
EnableableFeature mod = enableableFeatures.get(i);
49+
EnableableFeature feature = enableableFeatures.get(i);
5050
int x = i % 3;
5151
int y = i / 3;
5252
int wSize = (width / 4 - 8) / 3;
@@ -55,19 +55,19 @@ public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) {
5555
int wX2 = (2 + wSize) * x + wSize;
5656
int wY2 = 2 + (2 + wSize) * y + wSize;
5757
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()) {
58+
fill(poseStack, wX1 + wSize / 10, scroll + wY2 - wSize / 10 - wSize / 3 / 2, wX1 + wSize / 10 + wSize / 3, scroll + wY2 - wSize / 10, feature.isEnabled() ? 0xff00ff00 : 0xffff0000);
59+
if (feature.isEnabled()) {
6060
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);
6161
} else {
6262
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);
6363
}
6464
poseStack.pushPose();
65-
float scaleX = (((float) wSize) * 0.8F) / textRenderer.getWidth(mod.getName().split(" - ")[0]);
65+
float scaleX = (((float) wSize) * 0.8F) / textRenderer.getWidth(feature.getName().split(" - ")[0]);
6666
float scaleY = (((float) wSize) * 0.3F) / textRenderer.getHeight();
6767
float scale = Math.min(scaleX, scaleY);
6868
poseStack.scale(scale, scale, scale);
6969
int yOffset = 0;
70-
for (String str : mod.getName().split(" - ")) {
70+
for (String str : feature.getName().split(" - ")) {
7171
textRenderer.render(Text.literal(str), (int) ((wX1 + (wSize - textRenderer.getWidth(str) * scale) / 2) / scale), (int) ((scroll + wY1 + wSize * 0.1F + yOffset) / scale), 0xffffff);
7272
yOffset += textRenderer.getHeight();
7373
}
@@ -100,7 +100,7 @@ public boolean mouseReleased(double mouseX, double mouseY, int button) {
100100
if (active == null) {
101101
List<EnableableFeature> enableableFeatures = FeatureManager.INSTANCE.getEnableableFeatures();
102102
for (int i = 0; i < enableableFeatures.size(); i++) {
103-
EnableableFeature mod = enableableFeatures.get(i);
103+
EnableableFeature feature = enableableFeatures.get(i);
104104
int x = i % 3;
105105
int y = i / 3;
106106
int wSize = (width / 4 - 8) / 3;
@@ -110,16 +110,16 @@ public boolean mouseReleased(double mouseX, double mouseY, int button) {
110110
int wY2 = 2 + (2 + wSize) * y + wSize;
111111
if (wX1 <= mouseX && mouseX <= wX2 &&
112112
wY1 + scroll <= mouseY && mouseY <= wY2 + scroll) {
113-
mod.setEnabled(!mod.isEnabled());
113+
feature.setEnabled(!feature.isEnabled());
114114
}
115115
}
116116
} else active = null;
117117
return super.mouseReleased(mouseX, mouseY, button);
118118
}
119119

120120
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()) {
121+
for (Feature feature : FeatureManager.INSTANCE.getFeatures()) {
122+
if (feature instanceof DraggableFeature df && df.isEnabled()) {
123123
int x1 = df.getXPos(width) - 1;
124124
int y1 = df.getYPos(height) - 1;
125125
int x2 = df.getXPos(width) + df.getWidth(textRenderer, itemRenderer, width, height) + 1;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"targets": ["swap", "previous"],
3+
"passes": [
4+
{
5+
"name": "simpleclient:motionblur",
6+
"intarget": "minecraft:main",
7+
"outtarget": "swap",
8+
"auxtargets": [
9+
{"name": "PrevSampler", "id": "previous"}
10+
],
11+
"uniforms": [
12+
{"name": "strength", "values": [0.0]}
13+
]
14+
},
15+
{
16+
"name": "blit",
17+
"intarget": "swap",
18+
"outtarget": "previous"
19+
},
20+
{
21+
"name": "blit",
22+
"intarget": "swap",
23+
"outtarget": "minecraft:main"
24+
}
25+
]
26+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#version 120
2+
3+
uniform sampler2D DiffuseSampler;
4+
uniform sampler2D PrevSampler;
5+
6+
varying vec2 texCoord;
7+
varying vec2 oneTexel;
8+
9+
uniform vec2 InSize;
10+
11+
uniform float strength = 0.0;
12+
13+
void main() {
14+
gl_FragColor = mix(texture2D(DiffuseSampler, texCoord), texture2D(PrevSampler, texCoord), strength);
15+
gl_FragColor.w = 1.0;
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"blend": {
3+
"func": "add",
4+
"srcrgb": "one",
5+
"dstrgb": "zero"
6+
},
7+
"vertex": "sobel",
8+
"fragment": "simpleclient:motionblur",
9+
"attributes": ["Position"],
10+
"samplers": [
11+
{"name": "DiffuseSampler"},
12+
{"name": "PrevSampler"}
13+
],
14+
"uniforms": [
15+
{"name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]},
16+
{"name": "InSize", "type": "float", "count": 2, "values": [1.0, 1.0]},
17+
{"name": "OutSize", "type": "float", "count": 2, "values": [1.0, 1.0]},
18+
{"name": "strength", "type": "float", "count": 1, "values": [0.0]}
19+
]
20+
}

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

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,41 +28,39 @@ public void renderDummy(TextRendererAdapter textRenderer, ItemRendererAdapter it
2828
}
2929

3030
public double getX() {
31-
JsonFile json = FeatureManager.INSTANCE.getJson();
32-
if (!json.has(getId())) json.set(getId(), new JsonObject());
33-
if (!json.get(getId()).getAsJsonObject().has("x")) json.get(getId()).getAsJsonObject().addProperty("x", getDefaultX());
34-
return json.get(getId()).getAsJsonObject().get("x").getAsDouble();
31+
JsonObject data = getData();
32+
if (!data.has("x")) data.addProperty("x", getDefaultX());
33+
return data.get("x").getAsDouble();
3534
}
3635

3736
public int getXPos(double width) {
3837
return (int) (width * getX());
3938
}
4039

4140
public void setX(double x) {
42-
JsonObject json = FeatureManager.INSTANCE.getJson().getJson();
43-
if (!json.has(getId())) json.add(getId(), new JsonObject());
44-
json.get(getId()).getAsJsonObject().addProperty("x", x);
41+
JsonObject data = getData();
42+
data.addProperty("x", x);
43+
setData(data);
4544
}
4645

4746
public void setXPos(int x, double width) {
4847
setX(1.0 / width * x);
4948
}
5049

5150
public double getY() {
52-
JsonFile json = FeatureManager.INSTANCE.getJson();
53-
if (!json.has(getId())) json.set(getId(), new JsonObject());
54-
if (!json.get(getId()).getAsJsonObject().has("y")) json.get(getId()).getAsJsonObject().addProperty("y", getDefaultY());
55-
return json.get(getId()).getAsJsonObject().get("y").getAsDouble();
51+
JsonObject data = getData();
52+
if (!data.has("y")) data.addProperty("y", getDefaultY());
53+
return data.get("y").getAsDouble();
5654
}
5755

5856
public int getYPos(double height) {
5957
return (int) (height * getY());
6058
}
6159

6260
public void setY(double y) {
63-
JsonFile json = FeatureManager.INSTANCE.getJson();
64-
if (!json.has(getId())) json.set(getId(), new JsonObject());
65-
json.get(getId()).getAsJsonObject().addProperty("y", y);
61+
JsonObject data = getData();
62+
data.addProperty("y", y);
63+
setData(data);
6664
}
6765

6866
public void setYPos(int y, double height) {

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,17 +106,15 @@ public JsonArray getDefaultFormat() {
106106
}
107107

108108
public JsonArray getFormat() {
109-
JsonObject json = FeatureManager.INSTANCE.getJson().getJson();
110-
if (!json.has(getId())) json.add(getId(), new JsonObject());
111-
if (!json.get(getId()).getAsJsonObject().has("format")) json.get(getId()).getAsJsonObject().add("format", getDefaultFormat());
112-
return json.get(getId()).getAsJsonObject().get("format").getAsJsonArray();
109+
JsonObject data = getData();
110+
if (!data.has("format")) data.add("format", getDefaultFormat());
111+
return data.get("format").getAsJsonArray();
113112
}
114113

115114
public void setFormat(JsonArray format) {
116-
JsonObject json = FeatureManager.INSTANCE.getJson().getJson();
117-
if (!json.has(getId())) json.add(getId(), new JsonObject());
118-
if (json.get(getId()).getAsJsonObject().has("format")) json.get(getId()).getAsJsonObject().remove("format");
119-
json.get(getId()).getAsJsonObject().add("format", format);
115+
JsonObject data = getData();
116+
data.add("format", format);
117+
setData(data);
120118
}
121119

122120
protected JsonObject text(String text, Style style) {

0 commit comments

Comments
 (0)