99 lines
3 KiB
Java
99 lines
3 KiB
Java
package ru.bclib.api.dataexchange;
|
|
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
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 net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.server.level.ServerPlayer;
|
|
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.Objects;
|
|
|
|
public abstract class BaseDataHandler {
|
|
private final boolean originatesOnServer;
|
|
@NotNull
|
|
private final ResourceLocation identifier;
|
|
|
|
protected BaseDataHandler(ResourceLocation identifier, boolean originatesOnServer) {
|
|
this.originatesOnServer = originatesOnServer;
|
|
this.identifier = identifier;
|
|
}
|
|
|
|
final public boolean getOriginatesOnServer() {
|
|
return originatesOnServer;
|
|
}
|
|
|
|
final public ResourceLocation getIdentifier() {
|
|
return identifier;
|
|
}
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
abstract void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender);
|
|
|
|
private ServerPlayer lastMessageSender;
|
|
|
|
void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) {
|
|
lastMessageSender = player;
|
|
}
|
|
|
|
final protected boolean reply(BaseDataHandler message, MinecraftServer server) {
|
|
if (lastMessageSender == null) return false;
|
|
message.sendToClient(server, lastMessageSender);
|
|
return true;
|
|
}
|
|
|
|
abstract void sendToClient(MinecraftServer server);
|
|
|
|
abstract void sendToClient(MinecraftServer server, ServerPlayer player);
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
abstract void sendToServer(Minecraft client);
|
|
|
|
protected boolean isBlocking() { return false; }
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "BasDataHandler{" + "originatesOnServer=" + originatesOnServer + ", identifier=" + identifier + '}';
|
|
}
|
|
|
|
/**
|
|
* Write a String to a buffer (Convenience Method)
|
|
*
|
|
* @param buf The buffer to write to
|
|
* @param s The String you want to write
|
|
*/
|
|
public static void writeString(FriendlyByteBuf buf, String s) {
|
|
buf.writeByteArray(s.getBytes(StandardCharsets.UTF_8));
|
|
}
|
|
|
|
/**
|
|
* Read a string from a buffer (Convenience Method)
|
|
*
|
|
* @param buf Thea buffer to read from
|
|
* @return The received String
|
|
*/
|
|
public static String readString(FriendlyByteBuf buf) {
|
|
byte[] data = buf.readByteArray();
|
|
return new String(data, StandardCharsets.UTF_8);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o) return true;
|
|
if (!(o instanceof BaseDataHandler)) return false;
|
|
BaseDataHandler that = (BaseDataHandler) o;
|
|
return originatesOnServer == that.originatesOnServer && identifier.equals(that.identifier);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(originatesOnServer, identifier);
|
|
}
|
|
}
|
|
|