Skip to content

Commit 01c3254

Browse files
committed
本地多人更新
1 parent b597c05 commit 01c3254

8 files changed

Lines changed: 175 additions & 38 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ minecraft_version=1.20.1
66
yarn_mappings=1.20.1+build.10
77
loader_version=0.16.10
88
# Mod Properties
9-
mod_version=1.1.3-fabric-1.20.1
9+
mod_version=1.1.4-fabric-1.20.1
1010
maven_group=online.kbpf
1111
archives_base_name=DG_LAB
1212
# Dependencies

src/client/java/online/kbpf/dg_lab/client/Dg_labClient.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import net.minecraft.client.gui.DrawContext;
1717
import net.minecraft.client.gui.screen.Screen;
1818
import net.minecraft.client.option.KeyBinding;
19-
import net.minecraft.client.render.RenderTickCounter;
2019
import net.minecraft.client.util.InputUtil;
2120
import net.minecraft.text.OrderedText;
2221
import net.minecraft.text.Text;
@@ -33,6 +32,9 @@ public class Dg_labClient implements ClientModInitializer {
3332
public static StrengthConfig strengthConfig = new StrengthConfig();
3433
public static final ModConfig modConfig = ModConfig.loadJson();
3534
public static Map<String, Waveform> waveformMap = WaveformConfig.LoadWaveform();
35+
public static boolean twoPlayerMode = false;
36+
public static String secondPlayer = "null";
37+
public static int secondPlayerQuitStrength = 200;
3638

3739
private static KeyBinding keyBinding;
3840
private final Screen configScreen = new ConfigScreen();
@@ -75,13 +77,6 @@ public void onInitializeClient() {
7577

7678

7779

78-
public static webSocketServer getServer() {return webSocketServer;}
79-
80-
public static StrengthConfig getStrengthConfig() {return strengthConfig;}
81-
82-
public static ModConfig getModConfig(){return modConfig;}
83-
84-
8580
//屏幕强度显示
8681
private void onHudRender(DrawContext drawContext, float tickDelta) {
8782
MinecraftClient client = MinecraftClient.getInstance();
@@ -100,16 +95,25 @@ private void onHudRender(DrawContext drawContext, float tickDelta) {
10095
if(webSocketServer.getConnected()) {
10196
Text strengthText;
10297
Text strengthText1;
98+
String A = "A", B = "B";
99+
if(twoPlayerMode){
100+
A = MinecraftClient.getInstance().getSession().getUsername() + ":";
101+
B = secondPlayer + ":";
102+
}
103+
else {
104+
A = "A:";
105+
B = "B:";
106+
}
103107
if(modConfig.isRenderingMax()) {
104-
strengthText = Text.literal("A:" + webSocketServer.getStrength().getAStrength() + ",Max:" + webSocketServer.getStrength().getAMaxStrength());
108+
strengthText = Text.literal(A + webSocketServer.getStrength().getAStrength() + ",Max:" + webSocketServer.getStrength().getAMaxStrength());
105109

106-
strengthText1 = Text.literal("B:" + webSocketServer.getStrength().getBStrength() + ",Max:" + webSocketServer.getStrength().getBMaxStrength());
110+
strengthText1 = Text.literal(B + webSocketServer.getStrength().getBStrength() + ",Max:" + webSocketServer.getStrength().getBMaxStrength());
107111

108112
}
109113
else {
110-
strengthText = Text.literal("A:" + webSocketServer.getStrength().getAStrength());
114+
strengthText = Text.literal(A + webSocketServer.getStrength().getAStrength());
111115

112-
strengthText1 = Text.literal("B:" + webSocketServer.getStrength().getBStrength());
116+
strengthText1 = Text.literal(B + webSocketServer.getStrength().getBStrength());
113117
}
114118
OrderedText orderedText = strengthText.asOrderedText();
115119
OrderedText orderedText1 = strengthText1.asOrderedText();

src/client/java/online/kbpf/dg_lab/client/createQR/ToolQR.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ private ToolQR() {
2424
}
2525

2626
public static void CreateQR() {
27-
ModConfig modConfig = Dg_labClient.getModConfig();
27+
ModConfig modConfig = Dg_labClient.modConfig;
2828
String ipAddress = modConfig.getAddress();
2929
if(ipAddress.equals("error")) {
3030
MinecraftClient client = MinecraftClient.getInstance();

src/client/java/online/kbpf/dg_lab/client/screen/ConfigScreen.java

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package online.kbpf.dg_lab.client.screen;
22

33

4+
import net.minecraft.client.gui.DrawContext;
5+
import net.minecraft.client.gui.widget.TextFieldWidget;
6+
import net.minecraft.server.integrated.IntegratedServer;
7+
import net.minecraft.text.TextColor;
8+
import online.kbpf.dg_lab.client.Dg_labClient;
49
import online.kbpf.dg_lab.client.createQR.ToolQR;
510
import online.kbpf.dg_lab.client.Config.WaveformConfig;
611
import online.kbpf.dg_lab.client.screen.StrengthScreen.StrengthConfigScreen;
@@ -14,9 +19,7 @@
1419
import net.minecraft.text.Text;
1520

1621

17-
import static online.kbpf.dg_lab.client.Dg_labClient.waveformMap;
18-
import static online.kbpf.dg_lab.client.Dg_labClient.strengthConfig;
19-
import static online.kbpf.dg_lab.client.Dg_labClient.modConfig;
22+
import static online.kbpf.dg_lab.client.Dg_labClient.*;
2023

2124

2225
@Environment(EnvType.CLIENT)
@@ -31,10 +34,14 @@ public class ConfigScreen extends Screen {
3134
public ButtonWidget WaveFormConfig;
3235
public ButtonWidget CustomConfig;
3336
public ButtonWidget MaxStrength;
37+
public ButtonWidget TwoPlayerMode;
3438

3539

3640
public SliderWidget RenderingPositionX;
3741
public SliderWidget RenderingPositionY;
42+
public net.minecraft.client.gui.widget.SliderWidget SPQS;//第二个玩家退出强度 Second Player Quit Strength
43+
44+
public TextFieldWidget secondPlayerName;
3845

3946

4047

@@ -56,8 +63,7 @@ public ConfigScreen() {
5663
protected void init() {
5764

5865

59-
// online.kbpf.dg_lab.client.Config.StrengthConfig StrengthConfig = Dg_labClient.getStrengthConfig();
60-
// ModConfig modConfig = Dg_labClient.getModConfig();
66+
6167
MinecraftClient client = MinecraftClient.getInstance();
6268

6369

@@ -71,7 +77,19 @@ protected void init() {
7177

7278

7379

80+
SPQS = new net.minecraft.client.gui.widget.SliderWidget((int) ((double) width / 2 + 5), 140 - (2 * (ButtonDistance + ButtonHeight)), (int) (width * 0.2), ButtonHeight,Text.literal("2P退出强度:" + secondPlayerQuitStrength), secondPlayerQuitStrength * 0.005) {
81+
@Override
82+
protected void updateMessage() {
83+
84+
}
7485

86+
@Override
87+
protected void applyValue() {
88+
int tmp = (int) (this.value * 200);
89+
secondPlayerQuitStrength = tmp;
90+
SPQS.setMessage(Text.literal("2P退出强度:" + ((tmp == 0)? "已关闭" : tmp)));
91+
}
92+
};
7593

7694
RenderingPositionX = new SliderWidget(width / 2 + 5, 140 - ButtonDistance - ButtonHeight, (int) (width * 0.2) - 6, ButtonHeight, Text.literal((modConfig.getRenderingPositionX() >= width1 || modConfig.getRenderingPositionY() >= height1) ? "已关闭强度显示" : ("显示位置X:" + modConfig.getRenderingPositionX())), (double) modConfig.getRenderingPositionX() / width1) {
7795
@Override
@@ -146,6 +164,20 @@ protected void applyValue() {
146164
}).dimensions((int) ((double) width / 2 - (width * 0.4) - 5), 140 - ButtonDistance - ButtonHeight, (int) (width * 0.4), ButtonHeight).tooltip(Tooltip.of(Text.literal("图片默认生成于此地址:\n" + System.getProperty("user.dir")))).build();
147165

148166

167+
TwoPlayerMode = ButtonWidget.builder(Text.literal((twoPlayerMode) ? "本地双人模式:开" : "本地双人模式:关"), button -> {
168+
if(!client.isIntegratedServerRunning()) return;
169+
IntegratedServer server = client.getServer();
170+
if(!(server != null && server.isRemote())) return;
171+
twoPlayerMode = !twoPlayerMode;
172+
TwoPlayerMode.setMessage(Text.literal((twoPlayerMode) ? "本地双人模式:开" : "本地双人模式:关"));
173+
}).dimensions((int) ((double) width / 2 - (width * 0.4) - 5), 140 - (2 * (ButtonDistance + ButtonHeight)), (int) (width * 0.4), ButtonHeight).tooltip(Tooltip.of(Text.literal("只有在单人模式开启局域网联机\n并且2p设置有人且在线才可启用\n2p退出游戏自动关闭\n本地双人模式每次启动游戏需要重新设置"))).build();
174+
175+
secondPlayerName = new TextFieldWidget(this.textRenderer, (int) ((double) width / 2 + 6 + (int) (width * 0.2)), 140 - (2 * (ButtonDistance + ButtonHeight)), (int) (width * 0.2), ButtonHeight, Text.literal("输入玩家名字"));
176+
secondPlayerName.setMaxLength(16);
177+
secondPlayerName.setPlaceholder(Text.literal(secondPlayer).styled(style -> style.withColor(TextColor.fromRgb(0xaaaaaa))));
178+
secondPlayerName.setChangedListener(this::secondPlayerNameText);
179+
180+
149181

150182

151183
addDrawableChild(saveFile);
@@ -156,10 +188,21 @@ protected void applyValue() {
156188
addDrawableChild(RenderingPositionX);
157189
addDrawableChild(RenderingPositionY);
158190
addDrawableChild(MaxStrength);
191+
addDrawableChild(TwoPlayerMode);
192+
addDrawableChild(SPQS);
193+
addDrawableChild(secondPlayerName);
159194
// addDrawableChild(CustomConfig);
160195
}
161196

197+
private void secondPlayerNameText(String PlayerName){
198+
secondPlayer = PlayerName;
199+
}
162200

201+
@Override
202+
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
203+
super.render(context, mouseX, mouseY, delta);
204+
TwoPlayerMode.setMessage(Text.literal((twoPlayerMode) ? "本地双人模式:开" : "本地双人模式:关"));
205+
}
163206

164207

165208
}

src/client/java/online/kbpf/dg_lab/client/screen/WebSocketConfigScreen.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ protected WebSocketConfigScreen() {
3030
super(Text.literal("连接配置界面"));
3131
}
3232

33-
public ModConfig modConfig = Dg_labClient.getModConfig();
33+
public ModConfig modConfig = Dg_labClient.modConfig;
3434
public ButtonWidget autoStartWebSocketServer;
3535
public ButtonWidget createQR;
3636
public TextFieldWidget host;
@@ -52,7 +52,7 @@ public void close() {
5252

5353
@Override
5454
protected void init() {
55-
modConfig = Dg_labClient.getModConfig();
55+
modConfig = Dg_labClient.modConfig;
5656
autoStartWebSocketServer = ButtonWidget.builder(Text.literal("自动启动连接服务器:已" + ((modConfig.getAutoStartWebSocketServer()) ? "开启" : "关闭")), button -> {
5757
if (modConfig.getAutoStartWebSocketServer()) {
5858
modConfig.setAutoStartWebSocketServer(false);
@@ -161,8 +161,6 @@ private void portText(String port) {
161161
}
162162

163163

164-
165-
166164
private void serverPortText(String serverPort) {
167165
int number;
168166
try {
@@ -179,15 +177,12 @@ private void serverPortText(String serverPort) {
179177
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
180178
super.render(context, mouseX, mouseY, delta);
181179

182-
183180
context.drawTextWithShadow(textRenderer, Text.literal("二维码连接的地址"), (int) (width * 0.1), 49, 0xffffff);
184181
context.drawText(textRenderer, Text.literal(modConfig.getNetwork()), (int) (width * 0.1), 61, 0xaaaaaa, false);
185182
context.drawTextWithShadow(textRenderer, Text.literal("二维码连接的端口"), (int) (width * 0.1), 74, 0xffffff);
186183
context.drawTextWithShadow(textRenderer, Text.literal("服务器开放的端口"), (int) (width * 0.1), 99, 0xffffff);
187184

188185

189-
190-
191186
}
192187

193188
}

src/client/java/online/kbpf/dg_lab/client/webSocketServer/webSocketServer.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,16 @@ public void sendStrengthToClient(int value, int mode, int A1or2B) {
166166
* @param A A通道的倒计时时间
167167
* @param B B通道的倒计时时间
168168
*/
169-
public void setDelayTime(int A, int B) {
169+
public void setDelayTime(int A, int B) {
170170
dgStrength.setADelayTime(A);
171171
dgStrength.setBDelayTime(B);
172172
}
173+
public void setADelayTime(int A) {
174+
dgStrength.setADelayTime(A);
175+
}
176+
public void setBDelayTime(int B) {
177+
dgStrength.setBDelayTime(B);
178+
}
173179

174180
/**
175181
* 设置强度值。

src/client/java/online/kbpf/dg_lab/mixin/ClientPlayerEntityMixin.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818

1919

20+
2021
@Mixin(ClientPlayerEntity.class)
2122
public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity {
2223

@@ -29,24 +30,39 @@ public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) {
2930

3031
@Inject(method = "updateHealth", at = @At("TAIL"))
3132
private void afterSetHealth(float health, CallbackInfo ci) {
32-
LivingEntityAccessor accessor = (LivingEntityAccessor) this;
33-
ClientPlayerEntityAccessor accessor1 = (ClientPlayerEntityAccessor) this;
34-
webSocketServer server = Dg_labClient.getServer();
35-
StrengthConfig StrengthConfig = Dg_labClient.getStrengthConfig();
33+
// LivingEntityAccessor accessor = (LivingEntityAccessor) this;
34+
// ClientPlayerEntityAccessor accessor1 = (ClientPlayerEntityAccessor) this;
35+
webSocketServer server = Dg_labClient.webSocketServer;
36+
StrengthConfig StrengthConfig = Dg_labClient.strengthConfig;
3637
if (server != null && server.getConnected()) {
3738
float damage = Dg_labHealth - health;
3839

3940

4041
if (damage > 0.0F) {
41-
server.setDelayTime(StrengthConfig.getADelayTime(), StrengthConfig.getBDelayTime());
42-
if(StrengthConfig.getADamageStrength() > 0) server.sendStrengthToClient(Math.max(1, ((int) (damage * StrengthConfig.getADamageStrength()))), 1, 1);
43-
if(StrengthConfig.getBDamageStrength() > 0) server.sendStrengthToClient(Math.max(1, ((int) (damage * StrengthConfig.getBDamageStrength()))), 1, 2);
42+
if (!Dg_labClient.twoPlayerMode) {
43+
server.setDelayTime(StrengthConfig.getADelayTime(), StrengthConfig.getBDelayTime());
44+
if (StrengthConfig.getADamageStrength() > 0)
45+
server.sendStrengthToClient(Math.max(1, ((int) (damage * StrengthConfig.getADamageStrength()))), 1, 1);
46+
if (StrengthConfig.getBDamageStrength() > 0)
47+
server.sendStrengthToClient(Math.max(1, ((int) (damage * StrengthConfig.getBDamageStrength()))), 1, 2);
48+
}
49+
else {
50+
server.setADelayTime(StrengthConfig.getADelayTime());
51+
if (StrengthConfig.getADamageStrength() > 0)
52+
server.sendStrengthToClient(Math.max(1, ((int) (damage * StrengthConfig.getADamageStrength()))), 1, 1);
53+
}
4454
}
4555
if (health <= 0) {
46-
server.setDelayTime(StrengthConfig.getADeathDelay(), StrengthConfig.getBDeathDelay());
4756
DGStrength dgStrength = server.getStrength();
48-
server.sendStrengthToClient((Math.min(dgStrength.getAStrength() + StrengthConfig.getADeathStrength(), dgStrength.getAMaxStrength())), 2, 1);
49-
server.sendStrengthToClient((Math.min(dgStrength.getBStrength() + StrengthConfig.getBDeathStrength(), dgStrength.getBMaxStrength())), 2, 2);
57+
if (!Dg_labClient.twoPlayerMode) {
58+
server.setDelayTime(StrengthConfig.getADeathDelay(), StrengthConfig.getBDeathDelay());
59+
server.sendStrengthToClient((Math.min(dgStrength.getAStrength() + StrengthConfig.getADeathStrength(), dgStrength.getAMaxStrength())), 2, 1);
60+
server.sendStrengthToClient((Math.min(dgStrength.getBStrength() + StrengthConfig.getBDeathStrength(), dgStrength.getBMaxStrength())), 2, 2);
61+
}
62+
else {
63+
server.setADelayTime(StrengthConfig.getADeathDelay());
64+
server.sendStrengthToClient((Math.min(dgStrength.getAStrength() + StrengthConfig.getADeathStrength(), dgStrength.getAMaxStrength())), 2, 1);
65+
}
5066
}
5167

5268
Dg_labHealth = health;

0 commit comments

Comments
 (0)