70 lines
2.2 KiB
Java
70 lines
2.2 KiB
Java
package ru.bclib.api.dataexchange;
|
|
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.multiplayer.ClientPacketListener;
|
|
import net.minecraft.network.FriendlyByteBuf;
|
|
import ru.bclib.BCLib;
|
|
import ru.bclib.api.dataexchange.handler.DataExchange;
|
|
|
|
/**
|
|
* This is an internal class that handles a Clienetside players Connection to a Server
|
|
*/
|
|
@Environment(EnvType.CLIENT)
|
|
public class ConnectorClientside extends Connector {
|
|
private Minecraft client;
|
|
ConnectorClientside(DataExchange api) {
|
|
super(api);
|
|
this.client = null;
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean onClient() {
|
|
return true;
|
|
}
|
|
|
|
public void onPlayInit(ClientPacketListener handler, Minecraft client){
|
|
if (this.client!=null && this.client != client){
|
|
BCLib.LOGGER.warning("Client changed!");
|
|
}
|
|
this.client = client;
|
|
for(DataHandlerDescriptor desc : getDescriptors()){
|
|
ClientPlayNetworking.registerReceiver(desc.IDENTIFIER, (_client, _handler, _buf, _responseSender)->{
|
|
receiveFromServer(desc, _client, _handler, _buf, _responseSender);
|
|
});
|
|
}
|
|
}
|
|
|
|
public void onPlayReady(ClientPacketListener handler, PacketSender sender, Minecraft client){
|
|
for(DataHandlerDescriptor desc : getDescriptors()){
|
|
if (desc.sendOnJoin){
|
|
BaseDataHandler h = desc.JOIN_INSTANCE.get();
|
|
if (!h.getOriginatesOnServer()) {
|
|
h.sendToServer(client);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onPlayDisconnect(ClientPacketListener handler, Minecraft client){
|
|
for(DataHandlerDescriptor desc : getDescriptors()) {
|
|
ClientPlayNetworking.unregisterReceiver(desc.IDENTIFIER);
|
|
}
|
|
}
|
|
|
|
void receiveFromServer(DataHandlerDescriptor desc, Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender){
|
|
BaseDataHandler h = desc.INSTANCE.get();
|
|
h.receiveFromServer(client, handler, buf, responseSender);
|
|
}
|
|
|
|
public void sendToServer(BaseDataHandler h){
|
|
if (client==null){
|
|
throw new RuntimeException("[internal error] Client not initialized yet!");
|
|
}
|
|
h.sendToServer(this.client);
|
|
}
|
|
}
|