From b74f680191ef253dec1df0f9212d5e4b99402f3d Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 29 Jul 2021 10:57:58 +0200 Subject: [PATCH] Added HelloServer handler --- src/main/java/ru/bclib/BCLib.java | 4 +- .../api/dataexchange/DataExchangeAPI.java | 28 +++++++++- .../bclib/api/dataexchange/TestHandler.java | 40 ------------- .../api/dataexchange/handler/HelloServer.java | 56 +++++++++++++++++++ 4 files changed, 85 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/ru/bclib/api/dataexchange/TestHandler.java create mode 100644 src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java diff --git a/src/main/java/ru/bclib/BCLib.java b/src/main/java/ru/bclib/BCLib.java index 6eb2634c..15f4b841 100644 --- a/src/main/java/ru/bclib/BCLib.java +++ b/src/main/java/ru/bclib/BCLib.java @@ -7,7 +7,7 @@ import net.minecraft.resources.ResourceLocation; import ru.bclib.api.TagAPI; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; -import ru.bclib.api.dataexchange.TestHandler; +import ru.bclib.api.dataexchange.handler.HelloServer; import ru.bclib.config.Configs; import ru.bclib.recipes.CraftingRecipes; import ru.bclib.registry.BaseBlockEntities; @@ -28,7 +28,7 @@ public class BCLib implements ModInitializer { CraftingRecipes.init(); WorldDataAPI.registerModCache(MOD_ID); Configs.save(); - DataExchangeAPI.registerDescriptor(TestHandler.DESCRIPTOR); + DataExchangeAPI.registerDescriptor(HelloServer.DESCRIPTOR); } public static boolean isDevEnvironment() { diff --git a/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java b/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java index 375103b0..3796160a 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.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 net.minecraft.network.FriendlyByteBuf; import java.util.HashSet; import java.util.Set; @@ -19,7 +20,7 @@ public class DataExchangeAPI { descriptors = new HashSet<>(); } - public static DataExchangeAPI getInstance(){ + static DataExchangeAPI getInstance(){ if (instance==null){ instance = new DataExchangeAPI(); } @@ -45,12 +46,21 @@ public class DataExchangeAPI { ServerPlayConnectionEvents.DISCONNECT.register(server::onPlayDisconnect); } + /** + * Add a new Descriptor for a DataHandler. + * @param desc The Descriptor you want to add. + */ public static void registerDescriptor(DataHandlerDescriptor desc){ DataExchangeAPI api = DataExchangeAPI.getInstance(); api.descriptors.add(desc); } + /** + * Initializes all datastructures that need to exist in the client component. + *

+ * This is automatically called by BCLib. You can register {@link DataHandler}-Objects before this Method is called + */ @Environment(EnvType.CLIENT) public static void prepareClientside(){ DataExchangeAPI api = DataExchangeAPI.getInstance(); @@ -58,11 +68,27 @@ public class DataExchangeAPI { } + /** + * Initializes all datastructures that need to exist in the server component. + *

+ * This is automatically called by BCLib. You can register {@link DataHandler}-Objects before this Method is called + */ public static void prepareServerside(){ DataExchangeAPI api = DataExchangeAPI.getInstance(); api.initServerSide(); } + + /** + * Sends the Handler. + *

+ * 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 + * 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){ if (h.getOriginatesOnServer()){ DataExchangeAPI.getInstance().server.sendToClient(h); diff --git a/src/main/java/ru/bclib/api/dataexchange/TestHandler.java b/src/main/java/ru/bclib/api/dataexchange/TestHandler.java deleted file mode 100644 index d55612ad..00000000 --- a/src/main/java/ru/bclib/api/dataexchange/TestHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -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.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; -import ru.bclib.BCLib; - -import java.nio.charset.StandardCharsets; - -public class TestHandler extends DataHandler{ - public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "__test"), TestHandler::new, true); - - public TestHandler() { - super(DESCRIPTOR.IDENTIFIER, true); - } - - @Override - protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { - int length = buf.readInt(); - CharSequence text = buf.readCharSequence(length, StandardCharsets.UTF_8); - BCLib.LOGGER.info("PROCESSING INCOMING TEST-DATA fromClient="+fromClient+": "+text); - } - - @Override - @Environment(EnvType.CLIENT) - protected void runOnClient(Minecraft client) { - BCLib.LOGGER.info("RUNNING INCOMING TEST-DATA ON CLIENT"); - } - - @Override - protected void serializeData(FriendlyByteBuf buf) { - CharSequence text = "Welcome from BCLib"; - buf.writeInt(text.length()); - buf.writeCharSequence(text, StandardCharsets.UTF_8); - BCLib.LOGGER.info("BUILDING OUTGOING TEST-DATA ON SERVER"); - } -} diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java b/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java new file mode 100644 index 00000000..571de6d5 --- /dev/null +++ b/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java @@ -0,0 +1,56 @@ +package ru.bclib.api.dataexchange.handler; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import ru.bclib.BCLib; +import ru.bclib.api.dataexchange.DataHandler; +import ru.bclib.api.dataexchange.DataHandlerDescriptor; +import ru.bclib.api.datafixer.DataFixerAPI; + +import java.util.Optional; + +public class HelloServer extends DataHandler { + public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_server"), HelloServer::new, true); + + public HelloServer() { + super(DESCRIPTOR.IDENTIFIER, false); + } + + public static String getModVersion(String modID){ + Optional optional = FabricLoader.getInstance().getModContainer(modID); + if (optional.isPresent()) { + ModContainer modContainer = optional.get(); + return modContainer.getMetadata().getVersion().toString(); + } + return "0.0.0"; + } + + protected static String getBCLibVersion(){ + return getModVersion(BCLib.MOD_ID); + } + + @Override + protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { + String bclibVersion = DataFixerAPI.getModVersion(buf.readInt()); + String localBclibVersion = getBCLibVersion(); + + BCLib.LOGGER.info("Hello Server received from BCLib. (server="+localBclibVersion+", client="+bclibVersion+")"); + } + + @Override + @Environment(EnvType.CLIENT) + protected void runOnClient(Minecraft client) { + + } + + @Override + protected void serializeData(FriendlyByteBuf buf) { + buf.writeInt(DataFixerAPI.getModVersion(getBCLibVersion())); + } +}