Skip to content

Commit d1ee6d3

Browse files
committedJun 11, 2022
Fix config exchange request is not working if using Forge server.
1 parent f6e2350 commit d1ee6d3

File tree

6 files changed

+116
-31
lines changed

6 files changed

+116
-31
lines changed
 

‎16/fabric/src/main/java/io/github/kosmx/emotes/fabric/network/ClientNetworkInstance.java

+33-6
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,46 @@
1515
import org.jetbrains.annotations.Nullable;
1616

1717
import java.io.IOException;
18+
import java.util.HashMap;
1819
import java.util.List;
1920
import java.util.UUID;
20-
import java.util.logging.Level;
21+
import java.util.concurrent.atomic.AtomicInteger;
2122

2223
public class ClientNetworkInstance extends AbstractNetworkInstance implements C2SPlayChannelEvents.Register, ClientPlayConnectionEvents.Disconnect {
2324

24-
private int remoteVersion = 0;
2525

2626
public static ClientNetworkInstance networkInstance = new ClientNetworkInstance();
27+
private final AtomicInteger connectState = new AtomicInteger(0);
2728

2829
public void init(){
29-
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> ClientPlayNetworking.registerReceiver(ServerNetwork.channelID, this::receiveMessage));
30+
ClientPlayConnectionEvents.JOIN.register(this::playerJoin);
3031
C2SPlayChannelEvents.REGISTER.register(this);
32+
3133
ClientPlayConnectionEvents.DISCONNECT.register(this);
3234
}
3335

3436
@Override
3537
public void onChannelRegister(ClientPacketListener handler, PacketSender sender, Minecraft client, List<ResourceLocation> channels) {
36-
if(channels.contains(ServerNetwork.channelID)){
38+
if(channels.contains(ServerNetwork.channelID) && connectState.incrementAndGet() == 2){
39+
connectState.set(0);
40+
this.sendConfigCallback();
41+
}
42+
}
43+
44+
private void playerJoin(ClientPacketListener clientPacketListener, PacketSender packetSender, Minecraft minecraft) {
45+
ClientPlayNetworking.registerReceiver(ServerNetwork.channelID, this::receiveMessage);
46+
if (connectState.incrementAndGet() == 2) {
47+
connectState.set(0);
3748
this.sendConfigCallback();
38-
EmoteInstance.instance.getLogger().log(Level.INFO, "Sending presence to server");
3949
}
4050
}
4151

4252
@Override
4353
public void onPlayDisconnect(ClientPacketListener handler, Minecraft client) {
54+
connectState.set(0);
4455
this.disconnect(); //:D
4556
}
57+
4658
void receiveMessage(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender){
4759
if(buf.isDirect() || buf.isReadOnly()){ //If the received ByteBuf is direct i have to copy that onto the heap
4860
byte[] bytes = new byte[buf.readableBytes()];
@@ -54,6 +66,17 @@ void receiveMessage(Minecraft client, ClientPacketListener handler, FriendlyByte
5466
}
5567
}
5668

69+
private boolean disableNBS = false;
70+
@Override
71+
public HashMap<Byte, Byte> getVersions() {
72+
if(disableNBS){
73+
HashMap<Byte, Byte> map = new HashMap<>();
74+
map.put((byte)3, (byte) 0);
75+
return map;
76+
}
77+
return null;
78+
}
79+
5780
@Override
5881
public boolean sendPlayerID() {
5982
return false;
@@ -69,6 +92,10 @@ public void sendMessage(EmotePacket.Builder builder, @Nullable UUID target) thro
6992
if(target != null){
7093
builder.configureTarget(target);
7194
}
72-
ClientPlayNetworking.send(ServerNetwork.channelID, new FriendlyByteBuf(Unpooled.wrappedBuffer(builder.build().write().array())));
95+
EmotePacket writer = builder.build();
96+
ClientPlayNetworking.send(ServerNetwork.channelID, new FriendlyByteBuf(Unpooled.wrappedBuffer(writer.write().array())));
97+
if(writer.data.emoteData != null && writer.data.emoteData.song != null && !writer.data.writeSong){
98+
EmoteInstance.instance.getClientMethods().sendChatMessage(EmoteInstance.instance.getDefaults().newTranslationText("emotecraft.song_too_big_to_send"));
99+
}
73100
}
74101
}

‎16/forge/src/main/java/io/github/kosmx/emotes/forge/network/ClientNetworkInstance.java

+28-10
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@
1010
import net.minecraftforge.client.event.ClientPlayerNetworkEvent;
1111
import net.minecraftforge.common.MinecraftForge;
1212
import net.minecraftforge.fml.network.NetworkEvent;
13-
import org.jetbrains.annotations.Nullable;
1413

14+
import javax.annotation.Nullable;
1515
import java.io.IOException;
16+
import java.util.HashMap;
1617
import java.util.UUID;
18+
import java.util.concurrent.atomic.AtomicInteger;
1719

1820
public class ClientNetworkInstance extends AbstractNetworkInstance {
1921

2022
boolean isRemotePresent = false;
23+
private final AtomicInteger connectState = new AtomicInteger(0);
2124

2225
public static ClientNetworkInstance networkInstance = new ClientNetworkInstance();
2326

@@ -30,11 +33,16 @@ public void init(){
3033
}
3134

3235
private void connectServerCallback(ClientPlayerNetworkEvent.LoggedInEvent event){
33-
this.isRemotePresent = false;
36+
if (connectState.incrementAndGet() == 2) {
37+
connectState.set(0);
38+
this.sendConfigCallback();
39+
}
3440
}
3541

3642
private void disconnectEvent(ClientPlayerNetworkEvent.LoggedOutEvent event){
3743
this.disconnect();
44+
this.isRemotePresent = false;
45+
this.connectState.set(0);
3846
}
3947

4048
private void receiveJunk(NetworkEvent.ServerCustomPayloadEvent event){
@@ -44,18 +52,31 @@ private void receiveJunk(NetworkEvent.ServerCustomPayloadEvent event){
4452

4553
private void registerServerSide(NetworkEvent.ChannelRegistrationChangeEvent event){
4654
this.isRemotePresent = event.getRegistrationChangeType() == NetworkEvent.RegistrationChangeType.REGISTER;
47-
this.sendConfigCallback();
55+
if (isRemotePresent && connectState.incrementAndGet() == 2) {
56+
connectState.set(0);
57+
this.sendConfigCallback();
58+
}
4859
}
4960

5061
void receiveMessage(FriendlyByteBuf buf){
51-
if(buf.isDirect()){ //If the received ByteBuf is direct i have to copy that onto the heap
62+
if(buf.isDirect()){
5263
byte[] bytes = new byte[buf.readableBytes()];
5364
buf.getBytes(buf.readerIndex(), bytes);
5465
receiveMessage(bytes);
5566
}
5667
else {
57-
receiveMessage(buf.array()); //if heap, I can just use it's byte-array
68+
receiveMessage(buf.array());
69+
}
70+
}
71+
72+
@Override
73+
public HashMap<Byte, Byte> getVersions() {
74+
if(disableNBS){
75+
HashMap<Byte, Byte> map = new HashMap<>();
76+
map.put((byte)3, (byte) 0);
77+
return map;
5878
}
79+
return null;
5980
}
6081

6182
@Override
@@ -71,10 +92,7 @@ public boolean isActive() {
7192
}
7293

7394
public static ServerboundCustomPayloadPacket newC2SEmotePacket(NetData data) throws IOException {
74-
ServerboundCustomPayloadPacket packet = new ServerboundCustomPayloadPacket();
75-
packet.setName(ServerNetwork.channelID);
76-
packet.setData(new FriendlyByteBuf(Unpooled.wrappedBuffer(new EmotePacket.Builder(data).build().write().array())));
77-
return packet;
95+
return new ServerboundCustomPayloadPacket(ServerNetwork.channelID, new FriendlyByteBuf(Unpooled.wrappedBuffer(new EmotePacket.Builder(data).build().write().array())));
7896
}
7997

8098
@Override
@@ -83,6 +101,6 @@ public void sendMessage(EmotePacket.Builder builder, @Nullable UUID target) thro
83101
builder.configureTarget(target);
84102
}
85103
if(Minecraft.getInstance().getConnection() != null)
86-
Minecraft.getInstance().getConnection().send(newC2SEmotePacket(builder.copyAndGetData()));
104+
Minecraft.getInstance().getConnection().send(newC2SEmotePacket(builder.copyAndGetData()));
87105
}
88106
}

‎18/fabric/src/main/java/io/github/kosmx/emotes/fabric/network/ClientNetworkInstance.java

+15-4
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,40 @@
1818
import java.util.HashMap;
1919
import java.util.List;
2020
import java.util.UUID;
21-
import java.util.logging.Level;
21+
import java.util.concurrent.atomic.AtomicInteger;
2222

2323
public class ClientNetworkInstance extends AbstractNetworkInstance implements C2SPlayChannelEvents.Register, ClientPlayConnectionEvents.Disconnect {
2424

2525

2626
public static ClientNetworkInstance networkInstance = new ClientNetworkInstance();
27+
private final AtomicInteger connectState = new AtomicInteger(0);
2728

2829
public void init(){
29-
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> ClientPlayNetworking.registerReceiver(ServerNetwork.channelID, this::receiveMessage));
30+
ClientPlayConnectionEvents.JOIN.register(this::playerJoin);
3031
C2SPlayChannelEvents.REGISTER.register(this);
3132

3233
ClientPlayConnectionEvents.DISCONNECT.register(this);
3334
}
3435

3536
@Override
3637
public void onChannelRegister(ClientPacketListener handler, PacketSender sender, Minecraft client, List<ResourceLocation> channels) {
37-
if(channels.contains(ServerNetwork.channelID)){
38+
if(channels.contains(ServerNetwork.channelID) && connectState.incrementAndGet() == 2){
39+
connectState.set(0);
3840
this.sendConfigCallback();
39-
EmoteInstance.instance.getLogger().log(Level.INFO, "Sending presence to server");
4041
}
4142
}
43+
44+
private void playerJoin(ClientPacketListener clientPacketListener, PacketSender packetSender, Minecraft minecraft) {
45+
ClientPlayNetworking.registerReceiver(ServerNetwork.channelID, this::receiveMessage);
46+
if (connectState.incrementAndGet() == 2) {
47+
connectState.set(0);
48+
this.sendConfigCallback();
49+
}
50+
}
51+
4252
@Override
4353
public void onPlayDisconnect(ClientPacketListener handler, Minecraft client) {
54+
connectState.set(0);
4455
this.disconnect(); //:D
4556
}
4657

‎18/forge/src/main/java/io/github/kosmx/emotes/forge/network/ClientNetworkInstance.java

+12-3
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
import java.io.IOException;
1616
import java.util.HashMap;
1717
import java.util.UUID;
18+
import java.util.concurrent.atomic.AtomicInteger;
1819

1920
public class ClientNetworkInstance extends AbstractNetworkInstance {
2021

2122
boolean isRemotePresent = false;
22-
private int remoteVersion = 0;
23+
private final AtomicInteger connectState = new AtomicInteger(0);
2324

2425
public static ClientNetworkInstance networkInstance = new ClientNetworkInstance();
2526

@@ -32,11 +33,16 @@ public void init(){
3233
}
3334

3435
private void connectServerCallback(ClientPlayerNetworkEvent.LoggedInEvent event){
35-
this.isRemotePresent = false;
36+
if (connectState.incrementAndGet() == 2) {
37+
connectState.set(0);
38+
this.sendConfigCallback();
39+
}
3640
}
3741

3842
private void disconnectEvent(ClientPlayerNetworkEvent.LoggedOutEvent event){
3943
this.disconnect();
44+
this.isRemotePresent = false;
45+
this.connectState.set(0);
4046
}
4147

4248
private void receiveJunk(NetworkEvent.ServerCustomPayloadEvent event){
@@ -46,7 +52,10 @@ private void receiveJunk(NetworkEvent.ServerCustomPayloadEvent event){
4652

4753
private void registerServerSide(NetworkEvent.ChannelRegistrationChangeEvent event){
4854
this.isRemotePresent = event.getRegistrationChangeType() == NetworkEvent.RegistrationChangeType.REGISTER;
49-
this.sendConfigCallback();
55+
if (isRemotePresent && connectState.incrementAndGet() == 2) {
56+
connectState.set(0);
57+
this.sendConfigCallback();
58+
}
5059
}
5160

5261
void receiveMessage(FriendlyByteBuf buf){

‎19/fabric/src/main/java/io/github/kosmx/emotes/fabric/network/ClientNetworkInstance.java

+15-4
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,40 @@
1818
import java.util.HashMap;
1919
import java.util.List;
2020
import java.util.UUID;
21-
import java.util.logging.Level;
21+
import java.util.concurrent.atomic.AtomicInteger;
2222

2323
public class ClientNetworkInstance extends AbstractNetworkInstance implements C2SPlayChannelEvents.Register, ClientPlayConnectionEvents.Disconnect {
2424

2525

2626
public static ClientNetworkInstance networkInstance = new ClientNetworkInstance();
27+
private final AtomicInteger connectState = new AtomicInteger(0);
2728

2829
public void init(){
29-
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> ClientPlayNetworking.registerReceiver(ServerNetwork.channelID, this::receiveMessage));
30+
ClientPlayConnectionEvents.JOIN.register(this::playerJoin);
3031
C2SPlayChannelEvents.REGISTER.register(this);
3132

3233
ClientPlayConnectionEvents.DISCONNECT.register(this);
3334
}
3435

3536
@Override
3637
public void onChannelRegister(ClientPacketListener handler, PacketSender sender, Minecraft client, List<ResourceLocation> channels) {
37-
if(channels.contains(ServerNetwork.channelID)){
38+
if(channels.contains(ServerNetwork.channelID) && connectState.incrementAndGet() == 2){
39+
connectState.set(0);
3840
this.sendConfigCallback();
39-
EmoteInstance.instance.getLogger().log(Level.INFO, "Sending presence to server");
4041
}
4142
}
43+
44+
private void playerJoin(ClientPacketListener clientPacketListener, PacketSender packetSender, Minecraft minecraft) {
45+
ClientPlayNetworking.registerReceiver(ServerNetwork.channelID, this::receiveMessage);
46+
if (connectState.incrementAndGet() == 2) {
47+
connectState.set(0);
48+
this.sendConfigCallback();
49+
}
50+
}
51+
4252
@Override
4353
public void onPlayDisconnect(ClientPacketListener handler, Minecraft client) {
54+
connectState.set(0);
4455
this.disconnect(); //:D
4556
}
4657

‎19/forge/src/main/java/io/github/kosmx/emotes/forge/network/ClientNetworkInstance.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
import java.io.IOException;
1616
import java.util.HashMap;
1717
import java.util.UUID;
18+
import java.util.concurrent.atomic.AtomicInteger;
1819

1920
public class ClientNetworkInstance extends AbstractNetworkInstance {
2021

2122
boolean isRemotePresent = false;
22-
private int remoteVersion = 0;
23+
private final AtomicInteger connectState = new AtomicInteger(0);
2324

2425
public static ClientNetworkInstance networkInstance = new ClientNetworkInstance();
2526

@@ -32,11 +33,16 @@ public void init(){
3233
}
3334

3435
private void connectServerCallback(ClientPlayerNetworkEvent.LoggedInEvent event){
35-
this.isRemotePresent = false;
36+
if (connectState.incrementAndGet() == 2) {
37+
connectState.set(0);
38+
this.sendConfigCallback();
39+
}
3640
}
3741

3842
private void disconnectEvent(ClientPlayerNetworkEvent.LoggedOutEvent event){
3943
this.disconnect();
44+
this.isRemotePresent = false;
45+
this.connectState.set(0);
4046
}
4147

4248
private void receiveJunk(NetworkEvent.ServerCustomPayloadEvent event){
@@ -46,7 +52,10 @@ private void receiveJunk(NetworkEvent.ServerCustomPayloadEvent event){
4652

4753
private void registerServerSide(NetworkEvent.ChannelRegistrationChangeEvent event){
4854
this.isRemotePresent = event.getRegistrationChangeType() == NetworkEvent.RegistrationChangeType.REGISTER;
49-
this.sendConfigCallback();
55+
if (isRemotePresent && connectState.incrementAndGet() == 2) {
56+
connectState.set(0);
57+
this.sendConfigCallback();
58+
}
5059
}
5160

5261
void receiveMessage(FriendlyByteBuf buf){
@@ -92,6 +101,6 @@ public void sendMessage(EmotePacket.Builder builder, @Nullable UUID target) thro
92101
builder.configureTarget(target);
93102
}
94103
if(Minecraft.getInstance().getConnection() != null)
95-
Minecraft.getInstance().getConnection().send(newC2SEmotePacket(builder.copyAndGetData()));
104+
Minecraft.getInstance().getConnection().send(newC2SEmotePacket(builder.copyAndGetData()));
96105
}
97106
}

0 commit comments

Comments
 (0)
Please sign in to comment.