better naming for client/server only handlers
This commit is contained in:
parent
29fe59b4b9
commit
55f00c664c
11 changed files with 341 additions and 130 deletions
98
src/main/java/ru/bclib/api/dataexchange/BaseDataHandler.java
Normal file
98
src/main/java/ru/bclib/api/dataexchange/BaseDataHandler.java
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
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);
|
||||||
|
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class ConnectorClientside extends Connector {
|
||||||
public void onPlayReady(ClientPacketListener handler, PacketSender sender, Minecraft client){
|
public void onPlayReady(ClientPacketListener handler, PacketSender sender, Minecraft client){
|
||||||
for(DataHandlerDescriptor desc : getDescriptors()){
|
for(DataHandlerDescriptor desc : getDescriptors()){
|
||||||
if (desc.sendOnJoin){
|
if (desc.sendOnJoin){
|
||||||
DataHandler h = desc.JOIN_INSTANCE.get();
|
BaseDataHandler h = desc.JOIN_INSTANCE.get();
|
||||||
if (!h.getOriginatesOnServer()) {
|
if (!h.getOriginatesOnServer()) {
|
||||||
h.sendToServer(client);
|
h.sendToServer(client);
|
||||||
}
|
}
|
||||||
|
@ -57,11 +57,11 @@ public class ConnectorClientside extends Connector {
|
||||||
}
|
}
|
||||||
|
|
||||||
void receiveFromServer(DataHandlerDescriptor desc, Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender){
|
void receiveFromServer(DataHandlerDescriptor desc, Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender){
|
||||||
DataHandler h = desc.INSTANCE.get();
|
BaseDataHandler h = desc.INSTANCE.get();
|
||||||
h.receiveFromServer(client, handler, buf, responseSender);
|
h.receiveFromServer(client, handler, buf, responseSender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendToServer(DataHandler h){
|
public void sendToServer(BaseDataHandler h){
|
||||||
if (client==null){
|
if (client==null){
|
||||||
throw new RuntimeException("[internal error] Client not initialized yet!");
|
throw new RuntimeException("[internal error] Client not initialized yet!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class ConnectorServerside extends Connector {
|
||||||
public void onPlayReady(ServerGamePacketListenerImpl handler, PacketSender sender, MinecraftServer server){
|
public void onPlayReady(ServerGamePacketListenerImpl handler, PacketSender sender, MinecraftServer server){
|
||||||
for(DataHandlerDescriptor desc : getDescriptors()){
|
for(DataHandlerDescriptor desc : getDescriptors()){
|
||||||
if (desc.sendOnJoin){
|
if (desc.sendOnJoin){
|
||||||
DataHandler h = desc.JOIN_INSTANCE.get();
|
BaseDataHandler h = desc.JOIN_INSTANCE.get();
|
||||||
if (h.getOriginatesOnServer()) {
|
if (h.getOriginatesOnServer()) {
|
||||||
h.sendToClient(server, handler.player);
|
h.sendToClient(server, handler.player);
|
||||||
}
|
}
|
||||||
|
@ -54,11 +54,11 @@ public class ConnectorServerside extends Connector {
|
||||||
}
|
}
|
||||||
|
|
||||||
void receiveFromClient(DataHandlerDescriptor desc, MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender){
|
void receiveFromClient(DataHandlerDescriptor desc, MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender){
|
||||||
DataHandler h = desc.INSTANCE.get();
|
BaseDataHandler h = desc.INSTANCE.get();
|
||||||
h.receiveFromClient(server, player, handler, buf, responseSender);
|
h.receiveFromClient(server, player, handler, buf, responseSender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendToClient(DataHandler h){
|
public void sendToClient(BaseDataHandler h){
|
||||||
if (server==null){
|
if (server==null){
|
||||||
throw new RuntimeException("[internal error] Server not initialized yet!");
|
throw new RuntimeException("[internal error] Server not initialized yet!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,15 @@ public class DataExchangeAPI extends DataExchange {
|
||||||
if (!MODS.contains(modID)) MODS.add(modID);
|
if (!MODS.contains(modID)) MODS.add(modID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a mod dependency to participate in the DataExchange.
|
||||||
|
*
|
||||||
|
* @param modID - {@link String} modID.
|
||||||
|
*/
|
||||||
|
public static void registerModDependency(String modID) {
|
||||||
|
registerMod(modID);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the IDs of all registered Mods.
|
* Returns the IDs of all registered Mods.
|
||||||
*
|
*
|
||||||
|
@ -79,12 +88,12 @@ public class DataExchangeAPI extends DataExchange {
|
||||||
* Depending on what the result of {@link DataHandler#getOriginatesOnServer()}, the Data is sent from the server
|
* Depending on what the result of {@link DataHandler#getOriginatesOnServer()}, the Data is sent from the server
|
||||||
* to the client (if {@code true}) or the other way around.
|
* to the client (if {@code true}) or the other way around.
|
||||||
* <p>
|
* <p>
|
||||||
* The method {@link DataHandler#serializeData(FriendlyByteBuf)} is called just before the data is sent. You should
|
* The method {@link DataHandler#serializeData(FriendlyByteBuf, boolean)} is called just before the data is sent. You should
|
||||||
* use this method to add the Data you need to the communication.
|
* use this method to add the Data you need to the communication.
|
||||||
*
|
*
|
||||||
* @param h The Data that you want to send
|
* @param h The Data that you want to send
|
||||||
*/
|
*/
|
||||||
public static void send(DataHandler h) {
|
public static void send(BaseDataHandler h) {
|
||||||
if (h.getOriginatesOnServer()) {
|
if (h.getOriginatesOnServer()) {
|
||||||
DataExchangeAPI.getInstance().server.sendToClient(h);
|
DataExchangeAPI.getInstance().server.sendToClient(h);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,136 +14,230 @@ import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import ru.bclib.BCLib;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
public abstract class DataHandler extends BaseDataHandler {
|
||||||
|
public abstract static class WithoutPayload extends DataHandler {
|
||||||
public abstract class DataHandler {
|
|
||||||
|
|
||||||
public abstract static class WithoutPayload extends DataHandler{
|
|
||||||
protected WithoutPayload(ResourceLocation identifier, boolean originatesOnServer) {
|
protected WithoutPayload(ResourceLocation identifier, boolean originatesOnServer) {
|
||||||
super(identifier, originatesOnServer);
|
super(identifier, originatesOnServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean prepareData(boolean isClient){ return true; }
|
protected boolean prepareData(boolean isClient) { return true; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void serializeData(FriendlyByteBuf buf, boolean isClient) {
|
protected void serializeData(FriendlyByteBuf buf, boolean isClient) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient){
|
protected void deserializeIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final boolean originatesOnServer;
|
protected DataHandler(ResourceLocation identifier, boolean originatesOnServer) {
|
||||||
@NotNull
|
super(identifier, originatesOnServer);
|
||||||
private final ResourceLocation identifier;
|
|
||||||
|
|
||||||
protected DataHandler(ResourceLocation identifier, boolean originatesOnServer){
|
|
||||||
this.originatesOnServer = originatesOnServer;
|
|
||||||
this.identifier = identifier;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final public boolean getOriginatesOnServer(){
|
protected boolean prepareData(boolean isClient) { return true; }
|
||||||
return originatesOnServer;
|
|
||||||
}
|
abstract protected void serializeData(FriendlyByteBuf buf, boolean isClient);
|
||||||
|
|
||||||
|
abstract protected void deserializeIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient);
|
||||||
|
|
||||||
|
abstract protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient);
|
||||||
|
|
||||||
final public ResourceLocation getIdentifier(){
|
|
||||||
return identifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender){
|
@Override
|
||||||
deserializeFromIncomingData(buf, responseSender, true);
|
void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
|
deserializeIncomingData(buf, responseSender, true);
|
||||||
client.execute(() -> runOnGameThread(client, null, true));
|
client.execute(() -> runOnGameThread(client, null, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ServerPlayer lastMessageSender;
|
@Override
|
||||||
void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender){
|
void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
lastMessageSender = player;
|
super.receiveFromClient(server, player, handler, buf, responseSender);
|
||||||
deserializeFromIncomingData(buf, responseSender, false);
|
|
||||||
|
deserializeIncomingData(buf, responseSender, false);
|
||||||
server.execute(() -> runOnGameThread(null, server, false));
|
server.execute(() -> runOnGameThread(null, server, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean prepareData(boolean isClient){ return true; }
|
@Override
|
||||||
abstract protected void serializeData(FriendlyByteBuf buf, boolean isClient) ;
|
void sendToClient(MinecraftServer server) {
|
||||||
abstract protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient);
|
|
||||||
abstract protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient);
|
|
||||||
|
|
||||||
final protected boolean reply(DataHandler message, MinecraftServer server){
|
|
||||||
if (lastMessageSender==null) return false;
|
|
||||||
message.sendToClient(server, lastMessageSender);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendToClient(MinecraftServer server){
|
|
||||||
if (prepareData(false)) {
|
if (prepareData(false)) {
|
||||||
FriendlyByteBuf buf = PacketByteBufs.create();
|
FriendlyByteBuf buf = PacketByteBufs.create();
|
||||||
serializeData(buf, false);
|
serializeData(buf, false);
|
||||||
|
|
||||||
for (ServerPlayer player : PlayerLookup.all(server)) {
|
for (ServerPlayer player : PlayerLookup.all(server)) {
|
||||||
ServerPlayNetworking.send(player, this.identifier, buf);
|
ServerPlayNetworking.send(player, getIdentifier(), buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendToClient(MinecraftServer server, ServerPlayer player){
|
@Override
|
||||||
|
void sendToClient(MinecraftServer server, ServerPlayer player) {
|
||||||
if (prepareData(false)) {
|
if (prepareData(false)) {
|
||||||
FriendlyByteBuf buf = PacketByteBufs.create();
|
FriendlyByteBuf buf = PacketByteBufs.create();
|
||||||
serializeData(buf, false);
|
serializeData(buf, false);
|
||||||
ServerPlayNetworking.send(player, this.identifier, buf);
|
ServerPlayNetworking.send(player, getIdentifier(), buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
void sendToServer(Minecraft client){
|
@Override
|
||||||
|
void sendToServer(Minecraft client) {
|
||||||
if (prepareData(true)) {
|
if (prepareData(true)) {
|
||||||
FriendlyByteBuf buf = PacketByteBufs.create();
|
FriendlyByteBuf buf = PacketByteBufs.create();
|
||||||
serializeData(buf, true);
|
serializeData(buf, true);
|
||||||
ClientPlayNetworking.send(identifier, buf);
|
ClientPlayNetworking.send(getIdentifier(), buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public boolean equals(Object o) {
|
* A Message that always originates on the Client
|
||||||
if (this == o) return true;
|
*/
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
public abstract static class FromClient extends BaseDataHandler {
|
||||||
DataHandler that = (DataHandler) o;
|
public abstract static class WithoutPayload extends FromClient {
|
||||||
return originatesOnServer == that.originatesOnServer && identifier.equals(that.identifier);
|
protected WithoutPayload(ResourceLocation identifier) {
|
||||||
}
|
super(identifier);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
protected boolean prepareDataOnClient() { return true; }
|
||||||
int hash = identifier.hashCode();
|
|
||||||
if (originatesOnServer) hash |= 0x80000000;
|
|
||||||
else hash &=0x7FFFFFFF;
|
|
||||||
|
|
||||||
return hash;
|
@Override
|
||||||
}
|
protected void serializeDataOnClient(FriendlyByteBuf buf) {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
protected void deserializeIncomingDataOnServer(FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
return "DataHandler{" + "originatesOnServer=" + originatesOnServer + ", identifier=" + identifier + '}';
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected FromClient(ResourceLocation identifier) {
|
||||||
|
super(identifier, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
protected boolean prepareDataOnClient() { return true; }
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
abstract protected void serializeDataOnClient(FriendlyByteBuf buf);
|
||||||
|
|
||||||
|
abstract protected void deserializeIncomingDataOnServer(FriendlyByteBuf buf, PacketSender responseSender);
|
||||||
|
|
||||||
|
abstract protected void runOnServerGameThread(MinecraftServer server);
|
||||||
|
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
@Override
|
||||||
|
void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
|
BCLib.LOGGER.error("[Internal Error] The message '" + getIdentifier() + "' must originate from the client!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
|
super.receiveFromClient(server, player, handler, buf, responseSender);
|
||||||
|
|
||||||
|
deserializeIncomingDataOnServer(buf, responseSender);
|
||||||
|
server.execute(() -> runOnServerGameThread(server));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void sendToClient(MinecraftServer server) {
|
||||||
|
BCLib.LOGGER.error("[Internal Error] The message '" + getIdentifier() + "' must originate from the client!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void sendToClient(MinecraftServer server, ServerPlayer player) {
|
||||||
|
BCLib.LOGGER.error("[Internal Error] The message '" + getIdentifier() + "' must originate from the client!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
@Override
|
||||||
|
void sendToServer(Minecraft client) {
|
||||||
|
if (prepareDataOnClient()) {
|
||||||
|
FriendlyByteBuf buf = PacketByteBufs.create();
|
||||||
|
serializeDataOnClient(buf);
|
||||||
|
ClientPlayNetworking.send(getIdentifier(), buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write a String to a buffer (Convenience Method)
|
* A Message that always originates on the Server
|
||||||
* @param buf The buffer to write to
|
|
||||||
* @param s The String you want to write
|
|
||||||
*/
|
*/
|
||||||
public static void writeString(FriendlyByteBuf buf, String s){
|
public abstract static class FromServer extends BaseDataHandler {
|
||||||
buf.writeByteArray(s.getBytes(StandardCharsets.UTF_8));
|
public abstract static class WithoutPayload extends FromServer {
|
||||||
}
|
protected WithoutPayload(ResourceLocation identifier) {
|
||||||
|
super(identifier);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Read a string from a buffer (Convenience Method)
|
protected boolean prepareDataOnServer() { return true; }
|
||||||
* @param buf Thea buffer to read from
|
|
||||||
* @return The received String
|
@Override
|
||||||
*/
|
protected void serializeDataOnServer(FriendlyByteBuf buf) {
|
||||||
public static String readString(FriendlyByteBuf buf){
|
}
|
||||||
byte[] data = buf.readByteArray();
|
|
||||||
return new String(data, StandardCharsets.UTF_8);
|
@Override
|
||||||
|
protected void deserializeIncomingDataOnClient(FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected FromServer(ResourceLocation identifier) {
|
||||||
|
super(identifier, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean prepareDataOnServer() { return true; }
|
||||||
|
|
||||||
|
abstract protected void serializeDataOnServer(FriendlyByteBuf buf);
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
abstract protected void deserializeIncomingDataOnClient(FriendlyByteBuf buf, PacketSender responseSender);
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
abstract protected void runOnClientGameThread(Minecraft client);
|
||||||
|
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
@Override
|
||||||
|
final void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
|
deserializeIncomingDataOnClient(buf, responseSender);
|
||||||
|
client.execute(() -> runOnClientGameThread(client));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
final void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
|
super.receiveFromClient(server, player, handler, buf, responseSender);
|
||||||
|
BCLib.LOGGER.error("[Internal Error] The message '" + getIdentifier() + "' must originate from the server!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
final void sendToClient(MinecraftServer server) {
|
||||||
|
if (prepareDataOnServer()) {
|
||||||
|
FriendlyByteBuf buf = PacketByteBufs.create();
|
||||||
|
serializeDataOnServer(buf);
|
||||||
|
|
||||||
|
for (ServerPlayer player : PlayerLookup.all(server)) {
|
||||||
|
ServerPlayNetworking.send(player, getIdentifier(), buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
final void sendToClient(MinecraftServer server, ServerPlayer player) {
|
||||||
|
if (prepareDataOnServer()) {
|
||||||
|
FriendlyByteBuf buf = PacketByteBufs.create();
|
||||||
|
serializeDataOnServer(buf);
|
||||||
|
ServerPlayNetworking.send(player, getIdentifier(), buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
|
@Override
|
||||||
|
final void sendToServer(Minecraft client) {
|
||||||
|
BCLib.LOGGER.error("[Internal Error] The message '" + getIdentifier() + "' must originate from the server!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,14 +5,14 @@ import net.minecraft.resources.ResourceLocation;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class DataHandlerDescriptor {
|
public class DataHandlerDescriptor {
|
||||||
public DataHandlerDescriptor(ResourceLocation identifier, Supplier<DataHandler> instancer){
|
public DataHandlerDescriptor(ResourceLocation identifier, Supplier<BaseDataHandler> instancer){
|
||||||
this(identifier, instancer, instancer, false, false);
|
this(identifier, instancer, instancer, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataHandlerDescriptor(ResourceLocation identifier, Supplier<DataHandler> instancer, boolean sendOnJoin, boolean sendBeforeEnter){
|
public DataHandlerDescriptor(ResourceLocation identifier, Supplier<BaseDataHandler> instancer, boolean sendOnJoin, boolean sendBeforeEnter){
|
||||||
this(identifier, instancer, instancer, sendOnJoin, sendBeforeEnter);
|
this(identifier, instancer, instancer, sendOnJoin, sendBeforeEnter);
|
||||||
}
|
}
|
||||||
public DataHandlerDescriptor(ResourceLocation identifier, Supplier<DataHandler> receiv_instancer, Supplier<DataHandler> join_instancer, boolean sendOnJoin, boolean sendBeforeEnter){
|
public DataHandlerDescriptor(ResourceLocation identifier, Supplier<BaseDataHandler> receiv_instancer, Supplier<BaseDataHandler> join_instancer, boolean sendOnJoin, boolean sendBeforeEnter){
|
||||||
this.INSTANCE = receiv_instancer;
|
this.INSTANCE = receiv_instancer;
|
||||||
this.JOIN_INSTANCE = join_instancer;
|
this.JOIN_INSTANCE = join_instancer;
|
||||||
this.IDENTIFIER = identifier;
|
this.IDENTIFIER = identifier;
|
||||||
|
@ -24,6 +24,6 @@ public class DataHandlerDescriptor {
|
||||||
public final boolean sendOnJoin;
|
public final boolean sendOnJoin;
|
||||||
public final boolean sendBeforeEnter;
|
public final boolean sendBeforeEnter;
|
||||||
public final ResourceLocation IDENTIFIER;
|
public final ResourceLocation IDENTIFIER;
|
||||||
public final Supplier<DataHandler> INSTANCE;
|
public final Supplier<BaseDataHandler> INSTANCE;
|
||||||
public final Supplier<DataHandler> JOIN_INSTANCE;
|
public final Supplier<BaseDataHandler> JOIN_INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
|
||||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||||
|
import ru.bclib.api.dataexchange.BaseDataHandler;
|
||||||
import ru.bclib.api.dataexchange.ConnectorClientside;
|
import ru.bclib.api.dataexchange.ConnectorClientside;
|
||||||
import ru.bclib.api.dataexchange.ConnectorServerside;
|
import ru.bclib.api.dataexchange.ConnectorServerside;
|
||||||
import ru.bclib.api.dataexchange.DataExchangeAPI;
|
import ru.bclib.api.dataexchange.DataExchangeAPI;
|
||||||
|
@ -95,7 +96,7 @@ abstract public class DataExchange {
|
||||||
public static void sendOnEnter() {
|
public static void sendOnEnter() {
|
||||||
getInstance().descriptors.forEach((desc) -> {
|
getInstance().descriptors.forEach((desc) -> {
|
||||||
if (desc.sendBeforeEnter) {
|
if (desc.sendBeforeEnter) {
|
||||||
DataHandler h = desc.JOIN_INSTANCE.get();
|
BaseDataHandler h = desc.JOIN_INSTANCE.get();
|
||||||
if (!h.getOriginatesOnServer()) {
|
if (!h.getOriginatesOnServer()) {
|
||||||
getInstance().client.sendToServer(h);
|
getInstance().client.sendToServer(h);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,12 +7,10 @@ import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import ru.bclib.BCLib;
|
import ru.bclib.BCLib;
|
||||||
import ru.bclib.api.dataexchange.DataExchangeAPI;
|
import ru.bclib.api.dataexchange.DataExchangeAPI;
|
||||||
import ru.bclib.api.dataexchange.DataHandler;
|
import ru.bclib.api.dataexchange.DataHandler;
|
||||||
import ru.bclib.api.dataexchange.DataHandlerDescriptor;
|
import ru.bclib.api.dataexchange.DataHandlerDescriptor;
|
||||||
import ru.bclib.api.dataexchange.handler.DataExchange;
|
|
||||||
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.ClientConfig;
|
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.ClientConfig;
|
||||||
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.Config;
|
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.Config;
|
||||||
import ru.bclib.api.dataexchange.handler.autosync.AutoSyncID.WithContentOverride;
|
import ru.bclib.api.dataexchange.handler.autosync.AutoSyncID.WithContentOverride;
|
||||||
|
@ -36,11 +34,11 @@ import java.util.stream.Collectors;
|
||||||
* <p>
|
* <p>
|
||||||
* For Details refer to {@link HelloServer}
|
* For Details refer to {@link HelloServer}
|
||||||
*/
|
*/
|
||||||
public class HelloClient extends DataHandler {
|
public class HelloClient extends DataHandler.FromServer {
|
||||||
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_client"), HelloClient::new, false, false);
|
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_client"), HelloClient::new, false, false);
|
||||||
|
|
||||||
public HelloClient() {
|
public HelloClient() {
|
||||||
super(DESCRIPTOR.IDENTIFIER, true);
|
super(DESCRIPTOR.IDENTIFIER);
|
||||||
}
|
}
|
||||||
|
|
||||||
static String getBCLibVersion() {
|
static String getBCLibVersion() {
|
||||||
|
@ -48,7 +46,7 @@ public class HelloClient extends DataHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean prepareData(boolean isClient) {
|
protected boolean prepareDataOnServer() {
|
||||||
if (!Config.isAllowingAutoSync()) {
|
if (!Config.isAllowingAutoSync()) {
|
||||||
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
||||||
return false;
|
return false;
|
||||||
|
@ -59,7 +57,7 @@ public class HelloClient extends DataHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void serializeData(FriendlyByteBuf buf, boolean isClient) {
|
protected void serializeDataOnServer(FriendlyByteBuf buf) {
|
||||||
final String vbclib = getBCLibVersion();
|
final String vbclib = getBCLibVersion();
|
||||||
BCLib.LOGGER.info("Sending Hello to Client. (server=" + vbclib + ")");
|
BCLib.LOGGER.info("Sending Hello to Client. (server=" + vbclib + ")");
|
||||||
final List<String> mods = DataExchangeAPI.registeredMods();
|
final List<String> mods = DataExchangeAPI.registeredMods();
|
||||||
|
@ -120,8 +118,9 @@ public class HelloClient extends DataHandler {
|
||||||
List<AutoSync.AutoSyncTriple> autoSyncedFiles = null;
|
List<AutoSync.AutoSyncTriple> autoSyncedFiles = null;
|
||||||
List<SyncFolderDescriptor> autoSynFolders = null;
|
List<SyncFolderDescriptor> autoSynFolders = null;
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) {
|
protected void deserializeIncomingDataOnClient(FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
//read BCLibVersion (=protocol version)
|
//read BCLibVersion (=protocol version)
|
||||||
bclibVersion = DataFixerAPI.getModVersion(buf.readInt());
|
bclibVersion = DataFixerAPI.getModVersion(buf.readInt());
|
||||||
|
|
||||||
|
@ -156,8 +155,9 @@ public class HelloClient extends DataHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
private void processAutoSyncFolder(final List<AutoSyncID> filesToRequest, final List<AutoSyncID.ForDirectFileRequest> filesToRemove) {
|
private void processAutoSyncFolder(final List<AutoSyncID> filesToRequest, final List<AutoSyncID.ForDirectFileRequest> filesToRemove) {
|
||||||
if (!ClientConfig.isClientConfigAcceptingFolders()) {
|
if (!ClientConfig.isAcceptingFolders()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,8 +221,9 @@ public class HelloClient extends DataHandler {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
private void processSingleFileSync(final List<AutoSyncID> filesToRequest) {
|
private void processSingleFileSync(final List<AutoSyncID> filesToRequest) {
|
||||||
final boolean debugHashes = ClientConfig.shouldClientConfigPrintDebugHashes();
|
final boolean debugHashes = ClientConfig.shouldPrintDebugHashes();
|
||||||
|
|
||||||
if (autoSyncedFiles.size() > 0) {
|
if (autoSyncedFiles.size() > 0) {
|
||||||
BCLib.LOGGER.info("Files offered by Server:");
|
BCLib.LOGGER.info("Files offered by Server:");
|
||||||
|
@ -260,9 +261,10 @@ public class HelloClient extends DataHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) {
|
protected void runOnClientGameThread(Minecraft client) {
|
||||||
if (!ClientConfig.isClientConfigAllowingAutoSync()) {
|
if (!ClientConfig.isAllowingAutoSync()) {
|
||||||
BCLib.LOGGER.info("Auto-Sync was disabled on the client.");
|
BCLib.LOGGER.info("Auto-Sync was disabled on the client.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -289,7 +291,7 @@ public class HelloClient extends DataHandler {
|
||||||
//Both client and server need to know about the folder you want to sync
|
//Both client and server need to know about the folder you want to sync
|
||||||
//Files can only get placed within that folder
|
//Files can only get placed within that folder
|
||||||
|
|
||||||
if ((filesToRequest.size() > 0 || filesToRemove.size() > 0) && ClientConfig.isClientConfigAcceptingFiles()) {
|
if ((filesToRequest.size() > 0 || filesToRemove.size() > 0) && ClientConfig.isAcceptingFiles()) {
|
||||||
showDownloadConfigs(client, filesToRequest, filesToRemove);
|
showDownloadConfigs(client, filesToRequest, filesToRemove);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package ru.bclib.api.dataexchange.handler.autosync;
|
package ru.bclib.api.dataexchange.handler.autosync;
|
||||||
|
|
||||||
|
import net.fabricmc.api.EnvType;
|
||||||
|
import net.fabricmc.api.Environment;
|
||||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
@ -56,38 +57,40 @@ import java.io.File;
|
||||||
* </tr>
|
* </tr>
|
||||||
* </table>
|
* </table>
|
||||||
*/
|
*/
|
||||||
public class HelloServer extends DataHandler {
|
public class HelloServer extends DataHandler.FromClient {
|
||||||
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_server"), HelloServer::new, true, false);
|
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_server"), HelloServer::new, true, false);
|
||||||
|
|
||||||
protected String bclibVersion = "0.0.0";
|
protected String bclibVersion = "0.0.0";
|
||||||
|
|
||||||
public HelloServer() {
|
public HelloServer() {
|
||||||
super(DESCRIPTOR.IDENTIFIER, false);
|
super(DESCRIPTOR.IDENTIFIER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected boolean prepareData(boolean isClient) {
|
protected boolean prepareDataOnClient() {
|
||||||
if (!ClientConfig.isClientConfigAllowingAutoSync()) {
|
if (!ClientConfig.isAllowingAutoSync()) {
|
||||||
BCLib.LOGGER.info("Auto-Sync was disabled on the client.");
|
BCLib.LOGGER.info("Auto-Sync was disabled on the client.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected void serializeData(FriendlyByteBuf buf, boolean isClient) {
|
protected void serializeDataOnClient(FriendlyByteBuf buf) {
|
||||||
BCLib.LOGGER.info("Sending hello to server.");
|
BCLib.LOGGER.info("Sending hello to server.");
|
||||||
buf.writeInt(DataFixerAPI.getModVersion(HelloClient.getBCLibVersion()));
|
buf.writeInt(DataFixerAPI.getModVersion(HelloClient.getBCLibVersion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) {
|
protected void deserializeIncomingDataOnServer(FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
bclibVersion = DataFixerAPI.getModVersion(buf.readInt());
|
bclibVersion = DataFixerAPI.getModVersion(buf.readInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) {
|
protected void runOnServerGameThread(MinecraftServer server) {
|
||||||
if (!Config.isAllowingAutoSync()) {
|
if (!Config.isAllowingAutoSync()) {
|
||||||
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package ru.bclib.api.dataexchange.handler.autosync;
|
package ru.bclib.api.dataexchange.handler.autosync;
|
||||||
|
|
||||||
|
import net.fabricmc.api.EnvType;
|
||||||
|
import net.fabricmc.api.Environment;
|
||||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
@ -16,7 +17,7 @@ import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class RequestFiles extends DataHandler {
|
public class RequestFiles extends DataHandler.FromClient {
|
||||||
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "request_files"), RequestFiles::new, false, false);
|
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "request_files"), RequestFiles::new, false, false);
|
||||||
static String currentToken = "";
|
static String currentToken = "";
|
||||||
|
|
||||||
|
@ -27,21 +28,23 @@ public class RequestFiles extends DataHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RequestFiles(List<AutoSyncID> files) {
|
public RequestFiles(List<AutoSyncID> files) {
|
||||||
super(DESCRIPTOR.IDENTIFIER, false);
|
super(DESCRIPTOR.IDENTIFIER);
|
||||||
this.files = files;
|
this.files = files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected boolean prepareData(boolean isClient) {
|
protected boolean prepareDataOnClient() {
|
||||||
if (!ClientConfig.isClientConfigAllowingAutoSync()) {
|
if (!ClientConfig.isAllowingAutoSync()) {
|
||||||
BCLib.LOGGER.info("Auto-Sync was disabled on the client.");
|
BCLib.LOGGER.info("Auto-Sync was disabled on the client.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected void serializeData(FriendlyByteBuf buf, boolean isClient) {
|
protected void serializeDataOnClient(FriendlyByteBuf buf) {
|
||||||
newToken();
|
newToken();
|
||||||
writeString(buf, currentToken);
|
writeString(buf, currentToken);
|
||||||
|
|
||||||
|
@ -55,7 +58,7 @@ public class RequestFiles extends DataHandler {
|
||||||
String receivedToken = "";
|
String receivedToken = "";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) {
|
protected void deserializeIncomingDataOnServer(FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
receivedToken = readString(buf);
|
receivedToken = readString(buf);
|
||||||
int size = buf.readInt();
|
int size = buf.readInt();
|
||||||
files = new ArrayList<>(size);
|
files = new ArrayList<>(size);
|
||||||
|
@ -71,7 +74,7 @@ public class RequestFiles extends DataHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) {
|
protected void runOnServerGameThread(MinecraftServer server) {
|
||||||
if (!Config.isAllowingAutoSync()) {
|
if (!Config.isAllowingAutoSync()) {
|
||||||
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -7,11 +7,9 @@ import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import ru.bclib.BCLib;
|
import ru.bclib.BCLib;
|
||||||
import ru.bclib.api.dataexchange.DataHandler;
|
import ru.bclib.api.dataexchange.DataHandler;
|
||||||
import ru.bclib.api.dataexchange.DataHandlerDescriptor;
|
import ru.bclib.api.dataexchange.DataHandlerDescriptor;
|
||||||
import ru.bclib.api.dataexchange.handler.DataExchange;
|
|
||||||
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.ClientConfig;
|
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.ClientConfig;
|
||||||
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.Config;
|
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.Config;
|
||||||
import ru.bclib.gui.screens.ConfirmRestartScreen;
|
import ru.bclib.gui.screens.ConfirmRestartScreen;
|
||||||
|
@ -26,7 +24,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class SendFiles extends DataHandler {
|
public class SendFiles extends DataHandler.FromServer {
|
||||||
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "send_files"), SendFiles::new, false, false);
|
public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "send_files"), SendFiles::new, false, false);
|
||||||
|
|
||||||
protected List<AutoFileSyncEntry> files;
|
protected List<AutoFileSyncEntry> files;
|
||||||
|
@ -37,13 +35,13 @@ public class SendFiles extends DataHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SendFiles(List<AutoFileSyncEntry> files, String token) {
|
public SendFiles(List<AutoFileSyncEntry> files, String token) {
|
||||||
super(DESCRIPTOR.IDENTIFIER, true);
|
super(DESCRIPTOR.IDENTIFIER);
|
||||||
this.files = files;
|
this.files = files;
|
||||||
this.token = token;
|
this.token = token;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean prepareData(boolean isClient) {
|
protected boolean prepareDataOnServer() {
|
||||||
if (!Config.isAllowingAutoSync()) {
|
if (!Config.isAllowingAutoSync()) {
|
||||||
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
BCLib.LOGGER.info("Auto-Sync was disabled on the server.");
|
||||||
return false;
|
return false;
|
||||||
|
@ -53,7 +51,7 @@ public class SendFiles extends DataHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void serializeData(FriendlyByteBuf buf, boolean isClient) {
|
protected void serializeDataOnServer(FriendlyByteBuf buf) {
|
||||||
List<AutoFileSyncEntry> existingFiles = files.stream()
|
List<AutoFileSyncEntry> existingFiles = files.stream()
|
||||||
.filter(e -> e.fileName.exists())
|
.filter(e -> e.fileName.exists())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
@ -83,9 +81,10 @@ public class SendFiles extends DataHandler {
|
||||||
|
|
||||||
private List<Pair<AutoFileSyncEntry, byte[]>> receivedFiles;
|
private List<Pair<AutoFileSyncEntry, byte[]>> receivedFiles;
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) {
|
protected void deserializeIncomingDataOnClient(FriendlyByteBuf buf, PacketSender responseSender) {
|
||||||
if (ClientConfig.isClientConfigAcceptingFiles()) {
|
if (ClientConfig.isAcceptingFiles()) {
|
||||||
token = readString(buf);
|
token = readString(buf);
|
||||||
if (!token.equals(RequestFiles.currentToken)) {
|
if (!token.equals(RequestFiles.currentToken)) {
|
||||||
RequestFiles.newToken();
|
RequestFiles.newToken();
|
||||||
|
@ -111,9 +110,10 @@ public class SendFiles extends DataHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) {
|
protected void runOnClientGameThread(Minecraft client) {
|
||||||
if (ClientConfig.isClientConfigAcceptingFiles()) {
|
if (ClientConfig.isAcceptingFiles()) {
|
||||||
BCLib.LOGGER.info("Writing Files:");
|
BCLib.LOGGER.info("Writing Files:");
|
||||||
|
|
||||||
//TODO: Reject files that were not in the last RequestFiles.
|
//TODO: Reject files that were not in the last RequestFiles.
|
||||||
|
@ -128,6 +128,7 @@ public class SendFiles extends DataHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Environment(EnvType.CLIENT)
|
||||||
public static void writeSyncedFile(AutoSyncID e, byte[] data, File fileName) {
|
public static void writeSyncedFile(AutoSyncID e, byte[] data, File fileName) {
|
||||||
Path path = fileName.toPath();
|
Path path = fileName.toPath();
|
||||||
BCLib.LOGGER.info(" - Writing " + path + " (" + data.length + " Bytes)");
|
BCLib.LOGGER.info(" - Writing " + path + " (" + data.length + " Bytes)");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue