Skip to content

Commit 83f8bb7

Browse files
committed
Make yacl dependency soft
1 parent 1ea1e76 commit 83f8bb7

File tree

7 files changed

+53
-18
lines changed

7 files changed

+53
-18
lines changed

common/src/main/java/cn/zbx1425/minopp/entity/EntityAutoPlayer.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,15 @@ public void tick() {
189189
if (level().isClientSide) {
190190
if (player.hasPermissions(2) && player.isShiftKeyDown()) {
191191
return InteractionResult.SUCCESS;
192+
} else if (getActive() && !player.isShiftKeyDown()) {
193+
return InteractionResult.SUCCESS;
192194
}
193195
} else {
194-
if (player instanceof ServerPlayer serverPlayer && player.hasPermissions(2) && player.isShiftKeyDown()) {
195-
S2CAutoPlayerScreenPacket.sendS2C(serverPlayer, this);
196+
if (player.hasPermissions(2) && player.isShiftKeyDown()) {
197+
S2CAutoPlayerScreenPacket.sendS2C((ServerPlayer) player, this);
198+
return InteractionResult.SUCCESS;
199+
} else if (!getActive() && !player.isShiftKeyDown()) {
200+
setActive(true);
196201
return InteractionResult.SUCCESS;
197202
}
198203
}

common/src/main/java/cn/zbx1425/minopp/gui/AutoPlayerScreen.java

+17-8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder;
88
import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder;
99
import dev.isxander.yacl3.api.controller.StringControllerBuilder;
10+
import net.minecraft.ChatFormatting;
1011
import net.minecraft.client.gui.screens.Screen;
1112
import net.minecraft.network.chat.Component;
1213

@@ -16,6 +17,7 @@ public static Screen create(EntityAutoPlayer target, Screen parent) {
1617
ConfigCategory.Builder categoryBuilder = ConfigCategory.createBuilder();
1718
putEntityPreferences(categoryBuilder, target);
1819
putAIPreferences(categoryBuilder, target);
20+
putDismantlePreferences(categoryBuilder, target);
1921
return YetAnotherConfigLib.createBuilder()
2022
.title(Component.translatable("gui.minopp.bot_config.title"))
2123
.category(categoryBuilder.name(Component.translatable("gui.minopp.bot_config.title")).build())
@@ -33,14 +35,6 @@ private static void putEntityPreferences(ConfigCategory.Builder builder, EntityA
3335
.controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter())
3436
.build()
3537
)
36-
.option(ButtonOption.createBuilder()
37-
.name(Component.translatable("gui.minopp.bot_config.remove"))
38-
.action((screen, opt) -> {
39-
C2SAutoPlayerConfigPacket.Client.sendDeleteC2S(target);
40-
screen.onClose();
41-
})
42-
.build()
43-
)
4438
.option(Option.<String>createBuilder()
4539
.name(Component.translatable("gui.minopp.bot_config.custom_name"))
4640
.binding("",
@@ -112,4 +106,19 @@ private static void putAIPreferences(ConfigCategory.Builder builder, EntityAutoP
112106
.build();
113107
builder.group(aiOpts).group(aiMetaOpts);
114108
}
109+
110+
private static void putDismantlePreferences(ConfigCategory.Builder builder, EntityAutoPlayer target) {
111+
OptionGroup dismantleOpts = OptionGroup.createBuilder()
112+
.name(Component.translatable("gui.minopp.bot_config.remove"))
113+
.option(ButtonOption.createBuilder()
114+
.name(Component.translatable("gui.minopp.bot_config.remove").withStyle(ChatFormatting.RED))
115+
.action((screen, opt) -> {
116+
C2SAutoPlayerConfigPacket.Client.sendDeleteC2S(target);
117+
screen.onClose();
118+
})
119+
.build()
120+
)
121+
.build();
122+
builder.group(dismantleOpts);
123+
}
115124
}

common/src/main/java/cn/zbx1425/minopp/network/C2SAutoPlayerConfigPacket.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.minecraft.resources.ResourceLocation;
1010
import net.minecraft.server.MinecraftServer;
1111
import net.minecraft.server.level.ServerPlayer;
12+
import net.minecraft.world.entity.Entity;
1213

1314
public class C2SAutoPlayerConfigPacket {
1415

@@ -23,7 +24,7 @@ public static void handleC2S(MinecraftServer server, ServerPlayer player, Friend
2324
if (!player.hasPermissions(2)) return; // Re-check permission on server side
2425
if (player.level().getEntity(entityId) instanceof EntityAutoPlayer autoPlayer) {
2526
if (shouldDelete) {
26-
autoPlayer.kill();
27+
autoPlayer.remove(Entity.RemovalReason.KILLED);
2728
} else {
2829
autoPlayer.readConfigFromTag(config);
2930
}

common/src/main/java/cn/zbx1425/minopp/network/S2CAutoPlayerScreenPacket.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,26 @@
88
import net.minecraft.client.Minecraft;
99
import net.minecraft.nbt.CompoundTag;
1010
import net.minecraft.network.FriendlyByteBuf;
11+
import net.minecraft.network.chat.Component;
1112
import net.minecraft.resources.ResourceLocation;
1213
import net.minecraft.server.level.ServerPlayer;
1314

1415
public class S2CAutoPlayerScreenPacket {
1516

1617
public static final ResourceLocation ID = Mino.id("auto_player_screen");
18+
private static Boolean yaclAvailable = null;
19+
20+
private static boolean isYaclAvailable() {
21+
if (yaclAvailable == null) {
22+
try {
23+
Class.forName("dev.isxander.yacl3.api.YetAnotherConfigLib");
24+
yaclAvailable = true;
25+
} catch (ClassNotFoundException e) {
26+
yaclAvailable = false;
27+
}
28+
}
29+
return yaclAvailable;
30+
}
1731

1832
public static void sendS2C(ServerPlayer target, EntityAutoPlayer autoPlayer) {
1933
FriendlyByteBuf packet = new FriendlyByteBuf(Unpooled.buffer());
@@ -31,7 +45,12 @@ public static void handleS2C(FriendlyByteBuf packet) {
3145
Minecraft.getInstance().execute(() -> {
3246
if (Minecraft.getInstance().level.getEntity(entityId) instanceof EntityAutoPlayer autoPlayer) {
3347
autoPlayer.readConfigFromTag(config);
34-
Minecraft.getInstance().setScreen(AutoPlayerScreen.create(autoPlayer, Minecraft.getInstance().screen));
48+
if (isYaclAvailable()) {
49+
Minecraft.getInstance().setScreen(AutoPlayerScreen.create(autoPlayer, Minecraft.getInstance().screen));
50+
} else {
51+
Minecraft.getInstance().player.displayClientMessage(
52+
Component.translatable("gui.minopp.bot_config.yacl_missing"), false);
53+
}
3554
}
3655
});
3756
}

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@
9696
"gui.minopp.bot_config.title": "MinoBot Preferences",
9797
"gui.minopp.bot_config.category.entity": "MinoBot Entity",
9898
"gui.minopp.bot_config.active": "Power",
99-
"gui.minopp.bot_config.remove": "Dismantle",
10099
"gui.minopp.bot_config.custom_name": "Custom Name",
101100
"gui.minopp.bot_config.skin": "Skin",
102101
"gui.minopp.bot_config.skin.summary": "Name or UUID of the player whose skin is to be used.",
@@ -115,5 +114,7 @@
115114
"gui.minopp.bot_config.no_delay.1": "Fast",
116115
"gui.minopp.bot_config.no_delay.2": "Instant",
117116
"gui.minopp.bot_config.start_game": "Proposes Starting the Game",
118-
"gui.minopp.bot_config.start_game.summary": "If the bot should automatically propose starting the game when enough players are seated."
117+
"gui.minopp.bot_config.start_game.summary": "If the bot should automatically propose starting the game when enough players are seated.",
118+
"gui.minopp.bot_config.remove": "Dismantle",
119+
"gui.minopp.bot_config.yacl_missing": "YetAnotherConfigLib is required to show the configuration screen. Please install it and then try again."
119120
}

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@
9696
"gui.minopp.bot_config.title": "MinoBot 机器人偏好设置",
9797
"gui.minopp.bot_config.category.entity": "MinoBot 实体设定",
9898
"gui.minopp.bot_config.active": "电源",
99-
"gui.minopp.bot_config.remove": "拆除",
10099
"gui.minopp.bot_config.custom_name": "自定义名称",
101100
"gui.minopp.bot_config.skin": "皮肤",
102101
"gui.minopp.bot_config.skin.summary": "如要使用某玩家的皮肤,在此处填入名称或 UUID。",
@@ -115,6 +114,7 @@
115114
"gui.minopp.bot_config.no_delay.1": "快速",
116115
"gui.minopp.bot_config.no_delay.2": "最快",
117116
"gui.minopp.bot_config.start_game": "自动开始游戏",
118-
"gui.minopp.bot_config.start_game.summary": "启用时,机器人在入座人数满足条件时自动提议开始游戏。"
119-
117+
"gui.minopp.bot_config.start_game.summary": "启用时,机器人在入座人数满足条件时自动提议开始游戏。",
118+
"gui.minopp.bot_config.remove": "拆除",
119+
"gui.minopp.bot_config.yacl_missing": "需要安装 YetAnotherConfigLib 模组才能显示配置界面,请安装后再重新打开。"
120120
}

neoforge/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ dependencies {
4848
modImplementation ("org.teacon:SignMeUp-NeoForge-1.21.1:+") { transitive false }
4949

5050
// modImplementation "dev.architectury:architectury-neoforge:$rootProject.architectury_api_version"
51-
modImplementation "dev.isxander:yet-another-config-lib:$rootProject.yacl_version-neoforge"
51+
// modImplementation "dev.isxander:yet-another-config-lib:$rootProject.yacl_version-neoforge"
5252

5353
common(project(path: ':common', configuration: 'namedElements')) { transitive false }
5454
shadowBundle project(path: ':common', configuration: 'transformProductionNeoForge')

0 commit comments

Comments
 (0)