Skip to content

Commit 3db2f88

Browse files
committed
feat: add lower shield
1 parent 4c6170b commit 3db2f88

11 files changed

Lines changed: 92 additions & 2 deletions

File tree

build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ subprojects {
3232
name 'Xander Maven'
3333
url 'https://maven.isxander.dev/releases'
3434
}
35+
maven {
36+
// Mixson
37+
url 'https://jitpack.io'
38+
}
3539
}
3640

3741
dependencies {

common/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ dependencies {
1212
modImplementation "dev.architectury:architectury:$rootProject.architectury_api_version"
1313

1414
modImplementation("dev.isxander:yet-another-config-lib:${yacl_version}+1.21.9-fabric")
15+
16+
modImplementation "com.github.ramixin:mixson-fabric:${mixson_version}"
1517
}

common/src/main/java/com/euphony/better_client/BetterClient.java

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

33
import com.euphony.better_client.client.BCClientEvents;
44
import com.euphony.better_client.client.init.KeyMapping;
5+
import com.euphony.better_client.client.resource.ResourceModification;
56
import com.euphony.better_client.config.Config;
67
import com.mojang.logging.LogUtils;
78
import org.slf4j.Logger;
@@ -15,6 +16,8 @@ public final class BetterClient {
1516
public static void init() {
1617
KeyMapping.registerKeyMapping();
1718

19+
ResourceModification.init();
20+
1821
BCClientEvents.init();
1922
}
2023
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.euphony.better_client.client.resource;
2+
3+
import com.google.gson.JsonPrimitive;
4+
import net.minecraft.resources.ResourceLocation;
5+
import net.minecraft.world.item.Items;
6+
import net.ramixin.mixson.inline.Mixson;
7+
8+
import java.util.List;
9+
10+
import static com.euphony.better_client.BetterClient.config;
11+
12+
// Copy From https://github.com/pajicadvance/misctweaks/blob/multicutter/src/main/java/me/pajic/misctweaks/mixson/ClientResourceModifications.java
13+
public class ResourceModification {
14+
public static void init() {
15+
if (config.enableLowerShield) List.of(Items.SHIELD).forEach(item -> {
16+
ResourceLocation id = item.arch$registryName();
17+
if (id != null) {
18+
String namespace = id.getNamespace();
19+
String path = id.getPath();
20+
Mixson.registerEvent(
21+
Mixson.DEFAULT_PRIORITY,
22+
rl -> rl.getNamespace().equals(namespace) && rl.getPath().equals("models/item/" + path),
23+
"misctweaks:modify_" + namespace + "_" + path + "_model",
24+
context -> {
25+
if (
26+
context.getFile().getAsJsonObject().has("display") &&
27+
context.getFile().getAsJsonObject().getAsJsonObject("display")
28+
.has("firstperson_lefthand")
29+
) {
30+
context.getFile().getAsJsonObject()
31+
.getAsJsonObject("display")
32+
.getAsJsonObject("firstperson_lefthand")
33+
.getAsJsonArray("translation")
34+
.set(1, new JsonPrimitive(config.shieldOffset));
35+
}
36+
},
37+
true
38+
);
39+
}
40+
});
41+
}
42+
}

common/src/main/java/com/euphony/better_client/config/Config.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ public class Config {
117117

118118
public boolean enableInvisibleItemFrame = true;
119119

120+
public boolean enableLowerShield = true;
121+
public double shieldOffset = -2;
122+
120123
public Config() {}
121124

122125
public static Config create() {

common/src/main/java/com/euphony/better_client/config/screen/category/ScreenConfigScreen.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class ScreenConfigScreen {
2525
private static final String NO_EXPERIMENTAL_WARNING_GROUP = "no_experimental_warning";
2626
private static final String BOOK_SAVE_CONFIRMATION_GROUP = "book_save_confirmation";
2727
private static final String WORLD_PLAY_TIME_GROUP = "world_play_time";
28+
private static final String LOWER_SHIELD_GROUP = "lower_shield";
2829

2930
public static Screen generateScreen(Screen parent) {
3031
// Better Ping Display
@@ -174,6 +175,19 @@ public static Screen generateScreen(Screen parent) {
174175
.controller(opt -> ColorControllerBuilder.create(opt).allowAlpha(false))
175176
.build();
176177

178+
// Lower Shield
179+
Option<Boolean> enableLowerShieldOpt = ConfigUtils.buildBooleanOption(
180+
"enableLowerShield",
181+
DEFAULTS.enableLowerShield,
182+
() -> config.enableLowerShield,
183+
newVal -> config.enableLowerShield = newVal);
184+
Option<Double> shieldOffsetOpt = ConfigUtils.<Double>getGenericOption("shieldOffset")
185+
.binding(DEFAULTS.shieldOffset, () -> config.shieldOffset, newVal -> config.shieldOffset = newVal)
186+
.controller(opt -> DoubleSliderControllerBuilder.create(opt)
187+
.range(-5.0, 5.0)
188+
.step(0.5))
189+
.build();
190+
177191
return YetAnotherConfigLib.createBuilder()
178192
.title(Component.translatable("yacl3.config.better_client:config"))
179193
.category(ConfigCategory.createBuilder()
@@ -216,6 +230,10 @@ public static Screen generateScreen(Screen parent) {
216230
.name(ConfigUtils.getGroupName(CLIENT_CATEGORY, WORLD_PLAY_TIME_GROUP))
217231
.options(List.of(enableWorldPlayTimeOpt, worldPlayTimeColorOpt))
218232
.build())
233+
.group(OptionGroup.createBuilder()
234+
.name(ConfigUtils.getGroupName(CLIENT_CATEGORY, LOWER_SHIELD_GROUP))
235+
.options(List.of(enableLowerShieldOpt, shieldOffsetOpt))
236+
.build())
219237
.build())
220238
.save(Config::save)
221239
.build()

common/src/main/resources/assets/better_client/lang/en_us.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,5 +228,11 @@
228228

229229
"yacl3.config.better_client:config.category.client.group.invisible_item_frame": "Invisible Item Frame",
230230
"yacl3.config.better_client:config.enableInvisibleItemFrame": "Enable Invisible Item Frame",
231-
"yacl3.config.better_client:config.enableInvisibleItemFrame.desc": "Aim the crosshair at the item frame and press the assigned key to hide it. Holding the item frame allows you to see hidden item frames."
231+
"yacl3.config.better_client:config.enableInvisibleItemFrame.desc": "Aim the crosshair at the item frame and press the assigned key to hide it. Holding the item frame allows you to see hidden item frames.",
232+
233+
"yacl3.config.better_client:config.category.client.group.lower_shield": "Lower Shield",
234+
"yacl3.config.better_client:config.enableLowerShield": "Enable Lower Shield",
235+
"yacl3.config.better_client:config.enableLowerShield.desc": "The shield appears lower, not obstructing the field of view.",
236+
"yacl3.config.better_client:config.shieldOffset": "Shield Offset",
237+
"yacl3.config.better_client:config.shieldOffset.desc": "How much the shield moves up and down."
232238
}

common/src/main/resources/assets/better_client/lang/zh_cn.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,5 +228,11 @@
228228

229229
"yacl3.config.better_client:config.category.client.group.invisible_item_frame": "隐形物品展示框",
230230
"yacl3.config.better_client:config.enableInvisibleItemFrame": "启用隐形物品展示框",
231-
"yacl3.config.better_client:config.enableInvisibleItemFrame.desc": "将准星对准物品展示框并按下对应按键即可隐藏它,持有物品展示框可查看隐藏的物品展示框。"
231+
"yacl3.config.better_client:config.enableInvisibleItemFrame.desc": "将准星对准物品展示框并按下对应按键即可隐藏它,持有物品展示框可查看隐藏的物品展示框。",
232+
233+
"yacl3.config.better_client:config.category.client.group.lower_shield": "更低的盾牌",
234+
"yacl3.config.better_client:config.enableLowerShield": "启用更低的盾牌",
235+
"yacl3.config.better_client:config.enableLowerShield.desc": "盾牌位置更低,不会阻挡视野。",
236+
"yacl3.config.better_client:config.shieldOffset": "盾牌偏移量",
237+
"yacl3.config.better_client:config.shieldOffset.desc": "盾牌上下移动的幅度。"
232238
}

fabric/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ dependencies {
5151

5252
modImplementation("dev.isxander:yet-another-config-lib:${yacl_version}+1.21.9-fabric")
5353

54+
modImplementation "com.github.ramixin:mixson-fabric:${mixson_version}"
55+
5456
modImplementation("com.terraformersmc:modmenu:${rootProject.modmenu_version}")
5557

5658
common(project(path: ':common', configuration: 'namedElements')) { transitive false }

gradle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ neoforge_version=21.10.34-beta
1616
yacl_version=3.8.0
1717

1818
modmenu_version=16.0.0-rc.1
19+
20+
mixson_version=v1.4.0

0 commit comments

Comments
 (0)