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