Skip to content

Commit

Permalink
Fix packets being handled incorrectly
Browse files Browse the repository at this point in the history
  • Loading branch information
StavWasPlayZ committed Jul 11, 2023
1 parent 8ff65da commit b918003
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 10 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ bin/

run/

# my dumb testings
runs/
.gradles/

# java

hs_err_*.log
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@

/**
* An interface for all packets under the Genshin Instruments mod.
* All its implementers must have a {@code TYPE} field of type {@link PacketType} (see {@link ModPacket#type})
* and a constructor that takes a {@link FriendlyByteBuf}.
* All its implementers must have a constructor that takes a {@link FriendlyByteBuf}.
*/
public interface ModPacket {
void handle(Player player, PacketSender responseSender);
Expand All @@ -31,7 +30,7 @@ public static ModPacket createPacket(final Class<? extends ModPacket> packetType
try {
return packetType.getDeclaredConstructor(FriendlyByteBuf.class).newInstance(buf);
} catch (Exception e) {
GInstrumentMod.LOGGER.error("Failed to construct PacketType for " + packetType.getSimpleName(), e);
GInstrumentMod.LOGGER.error("Failed to construct a packet of type " + packetType.getSimpleName(), e);
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.cstav.genshinstrument.networking;

import java.util.List;
import java.util.function.Consumer;

import com.cstav.genshinstrument.networking.packets.instrument.CloseInstrumentPacket;
import com.cstav.genshinstrument.networking.packets.instrument.InstrumentPacket;
Expand All @@ -10,9 +11,11 @@

import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;

public class ModPacketHandler {

Expand All @@ -32,10 +35,9 @@ public static void registerClientPackets() {

ClientPlayNetworking.registerGlobalReceiver(
ModPacket.getChannelName(packetClass),
(client, handler, buf, sender) -> client.execute(() ->
ModPacket.createPacket(packetClass, buf).handle(client.player, sender)
)
);
(client, handler, buf, sender) ->
handlePacket(client.player, sender, buf, packetClass, client::execute)
);

}
}
Expand All @@ -44,14 +46,20 @@ public static void registerServerPackets() {

ServerPlayNetworking.registerGlobalReceiver(
ModPacket.getChannelName(packetClass),
(server, player, handler, buf, sender) -> server.execute(() ->
ModPacket.createPacket(packetClass, buf).handle(player, sender)
)
(server, player, handler, buf, sender) ->
handlePacket(player, sender, buf, packetClass, server::execute)
);

}
}

public static void handlePacket(Player player, PacketSender sender, FriendlyByteBuf buf,
Class<? extends ModPacket> packetClass, Consumer<Runnable> executor) {
ModPacket packet = ModPacket.createPacket(packetClass, buf);

executor.accept(() -> packet.handle(player, sender));
}


public static void sendToServer(final ModPacket packet) {
ClientPlayNetworking.send(packet.getChannelName(), getPacketBuf(packet));
Expand Down

0 comments on commit b918003

Please sign in to comment.