MineLittlePony/src/main/java/com/minelittlepony/api/events/Channel.java

72 lines
3 KiB
Java
Raw Normal View History

2023-09-26 01:45:28 +01:00
package com.minelittlepony.api.events;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.networking.v1.ClientLoginConnectionEvents;
2021-02-07 11:43:25 +02:00
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
2021-02-07 11:43:25 +02:00
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.util.Identifier;
2023-09-26 01:45:28 +01:00
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.api.pony.PonyData;
@Environment(EnvType.CLIENT)
public class Channel {
private static final Identifier CLIENT_PONY_DATA = new Identifier("minelittlepony", "pony_data");
private static final Identifier REQUEST_PONY_DATA = new Identifier("minelittlepony", "request_pony_data");
2023-09-26 01:45:28 +01:00
private static final Logger LOGGER = LogManager.getLogger("MineLittlePony");
private static boolean registered;
public static void bootstrap() {
ClientLoginConnectionEvents.INIT.register((handler, client) -> {
registered = false;
});
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
2023-09-26 01:45:28 +01:00
LOGGER.info("Sending consent packet to " + handler.getPlayer().getName().getString());
sender.sendPacket(REQUEST_PONY_DATA, PacketByteBufs.empty());
});
ClientPlayNetworking.registerGlobalReceiver(REQUEST_PONY_DATA, (client, handler, ignored, sender) -> {
registered = true;
if (client.player != null) {
Pony pony = Pony.getManager().getPony(client.player);
2023-09-26 01:45:28 +01:00
LOGGER.info("Server has just consented");
sender.sendPacket(CLIENT_PONY_DATA, MsgPonyData.write(pony.metadata(), PacketByteBufs.create()));
} else {
LOGGER.info("Server has just consented but the client player was not set");
}
});
ServerPlayNetworking.registerGlobalReceiver(CLIENT_PONY_DATA, (server, player, ignore, buffer, ignore2) -> {
PonyData packet = MsgPonyData.read(buffer);
2021-02-07 11:43:25 +02:00
server.execute(() -> {
PonyDataCallback.EVENT.invoker().onPonyDataAvailable(player, packet, EnvType.SERVER);
});
});
}
public static boolean broadcastPonyData(PonyData packet) {
if (FabricLoader.getInstance().getEnvironmentType() != EnvType.CLIENT) {
throw new RuntimeException("Client packet send called by the server");
}
2022-06-09 22:27:24 +02:00
if (!registered) {
LOGGER.info("Skipping network packet as the server has not consented");
return false;
} else {
LOGGER.info("Sending pony data to server for player");
}
ClientPlayNetworking.send(CLIENT_PONY_DATA, MsgPonyData.write(packet, PacketByteBufs.create()));
return true;
}
}