67 lines
2.2 KiB
Java
67 lines
2.2 KiB
Java
package ru.bclib.api.dataexchange;
|
|
|
|
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.MinecraftServer;
|
|
import net.minecraft.server.level.ServerPlayer;
|
|
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
|
import ru.bclib.BCLib;
|
|
import ru.bclib.api.dataexchange.handler.DataExchange;
|
|
|
|
/**
|
|
* This is an internal class that handles a Serverside Connection to a Client-Player
|
|
*/
|
|
public class ConnectorServerside extends Connector {
|
|
private MinecraftServer server;
|
|
ConnectorServerside(DataExchange api) {
|
|
super(api);
|
|
server = null;
|
|
}
|
|
|
|
@Override
|
|
public boolean onClient() {
|
|
return false;
|
|
}
|
|
|
|
public void onPlayInit(ServerGamePacketListenerImpl handler, MinecraftServer server){
|
|
if (this.server!=null && this.server != server){
|
|
BCLib.LOGGER.warning("Server changed!");
|
|
}
|
|
this.server = server;
|
|
for(DataHandlerDescriptor desc : getDescriptors()){
|
|
ServerPlayNetworking.registerReceiver(handler, desc.IDENTIFIER, (_server, _player, _handler, _buf, _responseSender) -> {
|
|
receiveFromClient(desc, _server, _player, _handler, _buf, _responseSender);
|
|
});
|
|
}
|
|
}
|
|
|
|
public void onPlayReady(ServerGamePacketListenerImpl handler, PacketSender sender, MinecraftServer server){
|
|
for(DataHandlerDescriptor desc : getDescriptors()){
|
|
if (desc.sendOnJoin){
|
|
BaseDataHandler h = desc.JOIN_INSTANCE.get();
|
|
if (h.getOriginatesOnServer()) {
|
|
h.sendToClient(server, handler.player);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onPlayDisconnect(ServerGamePacketListenerImpl handler, MinecraftServer server){
|
|
for(DataHandlerDescriptor desc : getDescriptors()){
|
|
ServerPlayNetworking.unregisterReceiver(handler, desc.IDENTIFIER);
|
|
}
|
|
}
|
|
|
|
void receiveFromClient(DataHandlerDescriptor desc, MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender){
|
|
BaseDataHandler h = desc.INSTANCE.get();
|
|
h.receiveFromClient(server, player, handler, buf, responseSender);
|
|
}
|
|
|
|
public void sendToClient(BaseDataHandler h){
|
|
if (server==null){
|
|
throw new RuntimeException("[internal error] Server not initialized yet!");
|
|
}
|
|
h.sendToClient(this.server);
|
|
}
|
|
}
|