From 55f00c664cd12fc83f006ff30342667f1676d5cf Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 17 Aug 2021 12:56:37 +0200 Subject: [PATCH] better naming for client/server only handlers --- .../api/dataexchange/BaseDataHandler.java | 98 +++++++ .../api/dataexchange/ConnectorClientside.java | 6 +- .../api/dataexchange/ConnectorServerside.java | 6 +- .../api/dataexchange/DataExchangeAPI.java | 13 +- .../bclib/api/dataexchange/DataHandler.java | 250 ++++++++++++------ .../dataexchange/DataHandlerDescriptor.java | 10 +- .../dataexchange/handler/DataExchange.java | 3 +- .../handler/autosync/HelloClient.java | 26 +- .../handler/autosync/HelloServer.java | 19 +- .../handler/autosync/RequestFiles.java | 19 +- .../handler/autosync/SendFiles.java | 21 +- 11 files changed, 341 insertions(+), 130 deletions(-) create mode 100644 src/main/java/ru/bclib/api/dataexchange/BaseDataHandler.java diff --git a/src/main/java/ru/bclib/api/dataexchange/BaseDataHandler.java b/src/main/java/ru/bclib/api/dataexchange/BaseDataHandler.java new file mode 100644 index 00000000..eedeba27 --- /dev/null +++ b/src/main/java/ru/bclib/api/dataexchange/BaseDataHandler.java @@ -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); + } +} + diff --git a/src/main/java/ru/bclib/api/dataexchange/ConnectorClientside.java b/src/main/java/ru/bclib/api/dataexchange/ConnectorClientside.java index 3ed6fa1f..6e192b91 100644 --- a/src/main/java/ru/bclib/api/dataexchange/ConnectorClientside.java +++ b/src/main/java/ru/bclib/api/dataexchange/ConnectorClientside.java @@ -42,7 +42,7 @@ public class ConnectorClientside extends Connector { public void onPlayReady(ClientPacketListener handler, PacketSender sender, Minecraft client){ for(DataHandlerDescriptor desc : getDescriptors()){ if (desc.sendOnJoin){ - DataHandler h = desc.JOIN_INSTANCE.get(); + BaseDataHandler h = desc.JOIN_INSTANCE.get(); if (!h.getOriginatesOnServer()) { h.sendToServer(client); } @@ -57,11 +57,11 @@ public class ConnectorClientside extends Connector { } 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); } - public void sendToServer(DataHandler h){ + public void sendToServer(BaseDataHandler h){ if (client==null){ throw new RuntimeException("[internal error] Client not initialized yet!"); } diff --git a/src/main/java/ru/bclib/api/dataexchange/ConnectorServerside.java b/src/main/java/ru/bclib/api/dataexchange/ConnectorServerside.java index 0a42a147..f8debc99 100644 --- a/src/main/java/ru/bclib/api/dataexchange/ConnectorServerside.java +++ b/src/main/java/ru/bclib/api/dataexchange/ConnectorServerside.java @@ -39,7 +39,7 @@ public class ConnectorServerside extends Connector { public void onPlayReady(ServerGamePacketListenerImpl handler, PacketSender sender, MinecraftServer server){ for(DataHandlerDescriptor desc : getDescriptors()){ if (desc.sendOnJoin){ - DataHandler h = desc.JOIN_INSTANCE.get(); + BaseDataHandler h = desc.JOIN_INSTANCE.get(); if (h.getOriginatesOnServer()) { 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){ - DataHandler h = desc.INSTANCE.get(); + BaseDataHandler h = desc.INSTANCE.get(); h.receiveFromClient(server, player, handler, buf, responseSender); } - public void sendToClient(DataHandler h){ + public void sendToClient(BaseDataHandler h){ if (server==null){ throw new RuntimeException("[internal error] Server not initialized yet!"); } diff --git a/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java b/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java index 0af4a224..d49cf23b 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java @@ -42,6 +42,15 @@ public class DataExchangeAPI extends DataExchange { 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. * @@ -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 * to the client (if {@code true}) or the other way around. *

- * 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. * * @param h The Data that you want to send */ - public static void send(DataHandler h) { + public static void send(BaseDataHandler h) { if (h.getOriginatesOnServer()) { DataExchangeAPI.getInstance().server.sendToClient(h); } diff --git a/src/main/java/ru/bclib/api/dataexchange/DataHandler.java b/src/main/java/ru/bclib/api/dataexchange/DataHandler.java index a552716b..1d489bac 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataHandler.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataHandler.java @@ -14,136 +14,230 @@ 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 ru.bclib.BCLib; -import java.nio.charset.StandardCharsets; - -public abstract class DataHandler { - - public abstract static class WithoutPayload extends DataHandler{ +public abstract class DataHandler extends BaseDataHandler { + public abstract static class WithoutPayload extends DataHandler { protected WithoutPayload(ResourceLocation identifier, boolean originatesOnServer) { super(identifier, originatesOnServer); } @Override - protected boolean prepareData(boolean isClient){ return true; } + protected boolean prepareData(boolean isClient) { return true; } @Override protected void serializeData(FriendlyByteBuf buf, boolean isClient) { } @Override - protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient){ + protected void deserializeIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient) { } } - private final boolean originatesOnServer; - @NotNull - private final ResourceLocation identifier; - - protected DataHandler(ResourceLocation identifier, boolean originatesOnServer){ - this.originatesOnServer = originatesOnServer; - this.identifier = identifier; + protected DataHandler(ResourceLocation identifier, boolean originatesOnServer) { + super(identifier, originatesOnServer); } - final public boolean getOriginatesOnServer(){ - return originatesOnServer; - } + protected boolean prepareData(boolean isClient) { return true; } + + 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) - void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender){ - deserializeFromIncomingData(buf, responseSender, true); + @Override + void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) { + deserializeIncomingData(buf, responseSender, true); client.execute(() -> runOnGameThread(client, null, true)); } - private ServerPlayer lastMessageSender; - void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender){ - lastMessageSender = player; - deserializeFromIncomingData(buf, responseSender, false); + @Override + void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) { + super.receiveFromClient(server, player, handler, buf, responseSender); + + deserializeIncomingData(buf, responseSender, false); server.execute(() -> runOnGameThread(null, server, false)); } - - protected boolean prepareData(boolean isClient){ return true; } - abstract protected void serializeData(FriendlyByteBuf buf, boolean isClient) ; - 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){ + @Override + void sendToClient(MinecraftServer server) { if (prepareData(false)) { FriendlyByteBuf buf = PacketByteBufs.create(); serializeData(buf, false); 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)) { FriendlyByteBuf buf = PacketByteBufs.create(); serializeData(buf, false); - ServerPlayNetworking.send(player, this.identifier, buf); + ServerPlayNetworking.send(player, getIdentifier(), buf); } } @Environment(EnvType.CLIENT) - void sendToServer(Minecraft client){ + @Override + void sendToServer(Minecraft client) { if (prepareData(true)) { FriendlyByteBuf buf = PacketByteBufs.create(); serializeData(buf, true); - ClientPlayNetworking.send(identifier, buf); + ClientPlayNetworking.send(getIdentifier(), buf); } } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - DataHandler that = (DataHandler) o; - return originatesOnServer == that.originatesOnServer && identifier.equals(that.identifier); - } - - @Override - public int hashCode() { - int hash = identifier.hashCode(); - if (originatesOnServer) hash |= 0x80000000; - else hash &=0x7FFFFFFF; + /** + * A Message that always originates on the Client + */ + public abstract static class FromClient extends BaseDataHandler { + public abstract static class WithoutPayload extends FromClient { + protected WithoutPayload(ResourceLocation identifier) { + super(identifier); + } + + @Override + protected boolean prepareDataOnClient() { return true; } + + @Override + protected void serializeDataOnClient(FriendlyByteBuf buf) { + } + + @Override + protected void deserializeIncomingDataOnServer(FriendlyByteBuf buf, PacketSender responseSender) { + } + } - return hash; - } - - @Override - public String toString() { - 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) - * @param buf The buffer to write to - * @param s The String you want to write + * A Message that always originates on the Server */ - 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); + public abstract static class FromServer extends BaseDataHandler { + public abstract static class WithoutPayload extends FromServer { + protected WithoutPayload(ResourceLocation identifier) { + super(identifier); + } + + @Override + protected boolean prepareDataOnServer() { return true; } + + @Override + protected void serializeDataOnServer(FriendlyByteBuf buf) { + } + + @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!"); + } } } diff --git a/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java b/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java index 99017fe4..ec85d6cf 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java @@ -5,14 +5,14 @@ import net.minecraft.resources.ResourceLocation; import java.util.function.Supplier; public class DataHandlerDescriptor { - public DataHandlerDescriptor(ResourceLocation identifier, Supplier instancer){ + public DataHandlerDescriptor(ResourceLocation identifier, Supplier instancer){ this(identifier, instancer, instancer, false, false); } - public DataHandlerDescriptor(ResourceLocation identifier, Supplier instancer, boolean sendOnJoin, boolean sendBeforeEnter){ + public DataHandlerDescriptor(ResourceLocation identifier, Supplier instancer, boolean sendOnJoin, boolean sendBeforeEnter){ this(identifier, instancer, instancer, sendOnJoin, sendBeforeEnter); } - public DataHandlerDescriptor(ResourceLocation identifier, Supplier receiv_instancer, Supplier join_instancer, boolean sendOnJoin, boolean sendBeforeEnter){ + public DataHandlerDescriptor(ResourceLocation identifier, Supplier receiv_instancer, Supplier join_instancer, boolean sendOnJoin, boolean sendBeforeEnter){ this.INSTANCE = receiv_instancer; this.JOIN_INSTANCE = join_instancer; this.IDENTIFIER = identifier; @@ -24,6 +24,6 @@ public class DataHandlerDescriptor { public final boolean sendOnJoin; public final boolean sendBeforeEnter; public final ResourceLocation IDENTIFIER; - public final Supplier INSTANCE; - public final Supplier JOIN_INSTANCE; + public final Supplier INSTANCE; + public final Supplier JOIN_INSTANCE; } diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java b/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java index 469a1047..0275304a 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java @@ -4,6 +4,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; 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.ConnectorServerside; import ru.bclib.api.dataexchange.DataExchangeAPI; @@ -95,7 +96,7 @@ abstract public class DataExchange { public static void sendOnEnter() { getInstance().descriptors.forEach((desc) -> { if (desc.sendBeforeEnter) { - DataHandler h = desc.JOIN_INSTANCE.get(); + BaseDataHandler h = desc.JOIN_INSTANCE.get(); if (!h.getOriginatesOnServer()) { getInstance().client.sendToServer(h); } diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloClient.java b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloClient.java index 75d8234a..5f458795 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloClient.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloClient.java @@ -7,12 +7,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; import ru.bclib.BCLib; import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.api.dataexchange.DataHandler; 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.Config; import ru.bclib.api.dataexchange.handler.autosync.AutoSyncID.WithContentOverride; @@ -36,11 +34,11 @@ import java.util.stream.Collectors; *

* 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 HelloClient() { - super(DESCRIPTOR.IDENTIFIER, true); + super(DESCRIPTOR.IDENTIFIER); } static String getBCLibVersion() { @@ -48,7 +46,7 @@ public class HelloClient extends DataHandler { } @Override - protected boolean prepareData(boolean isClient) { + protected boolean prepareDataOnServer() { if (!Config.isAllowingAutoSync()) { BCLib.LOGGER.info("Auto-Sync was disabled on the server."); return false; @@ -59,7 +57,7 @@ public class HelloClient extends DataHandler { } @Override - protected void serializeData(FriendlyByteBuf buf, boolean isClient) { + protected void serializeDataOnServer(FriendlyByteBuf buf) { final String vbclib = getBCLibVersion(); BCLib.LOGGER.info("Sending Hello to Client. (server=" + vbclib + ")"); final List mods = DataExchangeAPI.registeredMods(); @@ -120,8 +118,9 @@ public class HelloClient extends DataHandler { List autoSyncedFiles = null; List autoSynFolders = null; + @Environment(EnvType.CLIENT) @Override - protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { + protected void deserializeIncomingDataOnClient(FriendlyByteBuf buf, PacketSender responseSender) { //read BCLibVersion (=protocol version) bclibVersion = DataFixerAPI.getModVersion(buf.readInt()); @@ -156,8 +155,9 @@ public class HelloClient extends DataHandler { } } + @Environment(EnvType.CLIENT) private void processAutoSyncFolder(final List filesToRequest, final List filesToRemove) { - if (!ClientConfig.isClientConfigAcceptingFolders()) { + if (!ClientConfig.isAcceptingFolders()) { return; } @@ -221,8 +221,9 @@ public class HelloClient extends DataHandler { }); } + @Environment(EnvType.CLIENT) private void processSingleFileSync(final List filesToRequest) { - final boolean debugHashes = ClientConfig.shouldClientConfigPrintDebugHashes(); + final boolean debugHashes = ClientConfig.shouldPrintDebugHashes(); if (autoSyncedFiles.size() > 0) { BCLib.LOGGER.info("Files offered by Server:"); @@ -260,9 +261,10 @@ public class HelloClient extends DataHandler { } + @Environment(EnvType.CLIENT) @Override - protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { - if (!ClientConfig.isClientConfigAllowingAutoSync()) { + protected void runOnClientGameThread(Minecraft client) { + if (!ClientConfig.isAllowingAutoSync()) { BCLib.LOGGER.info("Auto-Sync was disabled on the client."); return; } @@ -289,7 +291,7 @@ public class HelloClient extends DataHandler { //Both client and server need to know about the folder you want to sync //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); return; } diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloServer.java b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloServer.java index 29ca7de4..308162d8 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloServer.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/HelloServer.java @@ -1,7 +1,8 @@ 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.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -56,38 +57,40 @@ import java.io.File; * * */ -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); protected String bclibVersion = "0.0.0"; public HelloServer() { - super(DESCRIPTOR.IDENTIFIER, false); + super(DESCRIPTOR.IDENTIFIER); } + @Environment(EnvType.CLIENT) @Override - protected boolean prepareData(boolean isClient) { - if (!ClientConfig.isClientConfigAllowingAutoSync()) { + protected boolean prepareDataOnClient() { + if (!ClientConfig.isAllowingAutoSync()) { BCLib.LOGGER.info("Auto-Sync was disabled on the client."); return false; } return true; } + @Environment(EnvType.CLIENT) @Override - protected void serializeData(FriendlyByteBuf buf, boolean isClient) { + protected void serializeDataOnClient(FriendlyByteBuf buf) { BCLib.LOGGER.info("Sending hello to server."); buf.writeInt(DataFixerAPI.getModVersion(HelloClient.getBCLibVersion())); } @Override - protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { + protected void deserializeIncomingDataOnServer(FriendlyByteBuf buf, PacketSender responseSender) { bclibVersion = DataFixerAPI.getModVersion(buf.readInt()); } @Override - protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { + protected void runOnServerGameThread(MinecraftServer server) { if (!Config.isAllowingAutoSync()) { BCLib.LOGGER.info("Auto-Sync was disabled on the server."); return; diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/RequestFiles.java b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/RequestFiles.java index c9033b9c..2caafdc9 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/RequestFiles.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/RequestFiles.java @@ -1,7 +1,8 @@ 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.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -16,7 +17,7 @@ import java.util.List; import java.util.UUID; 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); static String currentToken = ""; @@ -27,21 +28,23 @@ public class RequestFiles extends DataHandler { } public RequestFiles(List files) { - super(DESCRIPTOR.IDENTIFIER, false); + super(DESCRIPTOR.IDENTIFIER); this.files = files; } + @Environment(EnvType.CLIENT) @Override - protected boolean prepareData(boolean isClient) { - if (!ClientConfig.isClientConfigAllowingAutoSync()) { + protected boolean prepareDataOnClient() { + if (!ClientConfig.isAllowingAutoSync()) { BCLib.LOGGER.info("Auto-Sync was disabled on the client."); return false; } return true; } + @Environment(EnvType.CLIENT) @Override - protected void serializeData(FriendlyByteBuf buf, boolean isClient) { + protected void serializeDataOnClient(FriendlyByteBuf buf) { newToken(); writeString(buf, currentToken); @@ -55,7 +58,7 @@ public class RequestFiles extends DataHandler { String receivedToken = ""; @Override - protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { + protected void deserializeIncomingDataOnServer(FriendlyByteBuf buf, PacketSender responseSender) { receivedToken = readString(buf); int size = buf.readInt(); files = new ArrayList<>(size); @@ -71,7 +74,7 @@ public class RequestFiles extends DataHandler { } @Override - protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { + protected void runOnServerGameThread(MinecraftServer server) { if (!Config.isAllowingAutoSync()) { BCLib.LOGGER.info("Auto-Sync was disabled on the server."); return; diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/SendFiles.java b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/SendFiles.java index d19497b9..a802ad1f 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/autosync/SendFiles.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/autosync/SendFiles.java @@ -7,11 +7,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; import ru.bclib.BCLib; import ru.bclib.api.dataexchange.DataHandler; 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.Config; import ru.bclib.gui.screens.ConfirmRestartScreen; @@ -26,7 +24,7 @@ import java.util.ArrayList; import java.util.List; 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); protected List files; @@ -37,13 +35,13 @@ public class SendFiles extends DataHandler { } public SendFiles(List files, String token) { - super(DESCRIPTOR.IDENTIFIER, true); + super(DESCRIPTOR.IDENTIFIER); this.files = files; this.token = token; } @Override - protected boolean prepareData(boolean isClient) { + protected boolean prepareDataOnServer() { if (!Config.isAllowingAutoSync()) { BCLib.LOGGER.info("Auto-Sync was disabled on the server."); return false; @@ -53,7 +51,7 @@ public class SendFiles extends DataHandler { } @Override - protected void serializeData(FriendlyByteBuf buf, boolean isClient) { + protected void serializeDataOnServer(FriendlyByteBuf buf) { List existingFiles = files.stream() .filter(e -> e.fileName.exists()) .collect(Collectors.toList()); @@ -83,9 +81,10 @@ public class SendFiles extends DataHandler { private List> receivedFiles; + @Environment(EnvType.CLIENT) @Override - protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { - if (ClientConfig.isClientConfigAcceptingFiles()) { + protected void deserializeIncomingDataOnClient(FriendlyByteBuf buf, PacketSender responseSender) { + if (ClientConfig.isAcceptingFiles()) { token = readString(buf); if (!token.equals(RequestFiles.currentToken)) { RequestFiles.newToken(); @@ -111,9 +110,10 @@ public class SendFiles extends DataHandler { } } + @Environment(EnvType.CLIENT) @Override - protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { - if (ClientConfig.isClientConfigAcceptingFiles()) { + protected void runOnClientGameThread(Minecraft client) { + if (ClientConfig.isAcceptingFiles()) { BCLib.LOGGER.info("Writing Files:"); //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) { Path path = fileName.toPath(); BCLib.LOGGER.info(" - Writing " + path + " (" + data.length + " Bytes)");