List all mod versions from server and client
This commit is contained in:
parent
032b4187bd
commit
a53c503c4e
4 changed files with 81 additions and 6 deletions
|
@ -8,6 +8,7 @@ import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.NbtIo;
|
import net.minecraft.nbt.NbtIo;
|
||||||
import net.minecraft.world.level.storage.LevelStorageSource.LevelStorageAccess;
|
import net.minecraft.world.level.storage.LevelStorageSource.LevelStorageAccess;
|
||||||
import ru.bclib.BCLib;
|
import ru.bclib.BCLib;
|
||||||
|
import ru.bclib.api.dataexchange.DataExchangeAPI;
|
||||||
import ru.bclib.api.datafixer.DataFixerAPI;
|
import ru.bclib.api.datafixer.DataFixerAPI;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -62,11 +63,14 @@ public class WorldDataAPI {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register mod cache, world cache is located in world data folder.
|
* Register mod cache, world cache is located in world data folder.
|
||||||
|
* <p>
|
||||||
|
* Will also register the Mod for the {@link DataExchangeAPI} using {@link DataExchangeAPI#registerMod(String)}
|
||||||
*
|
*
|
||||||
* @param modID - {@link String} modID.
|
* @param modID - {@link String} modID.
|
||||||
*/
|
*/
|
||||||
public static void registerModCache(String modID) {
|
public static void registerModCache(String modID) {
|
||||||
MODS.add(modID);
|
MODS.add(modID);
|
||||||
|
DataExchangeAPI.registerMod(modID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.bclib.api.dataexchange;
|
package ru.bclib.api.dataexchange;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import net.fabricmc.api.EnvType;
|
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;
|
||||||
|
@ -7,9 +8,11 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class DataExchangeAPI {
|
public class DataExchangeAPI {
|
||||||
|
private final static List<String> MODS = Lists.newArrayList();
|
||||||
private static DataExchangeAPI instance;
|
private static DataExchangeAPI instance;
|
||||||
private ConnectorServerside server;
|
private ConnectorServerside server;
|
||||||
private ConnectorClientside client;
|
private ConnectorClientside client;
|
||||||
|
@ -46,6 +49,23 @@ public class DataExchangeAPI {
|
||||||
ServerPlayConnectionEvents.DISCONNECT.register(server::onPlayDisconnect);
|
ServerPlayConnectionEvents.DISCONNECT.register(server::onPlayDisconnect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a mod to participate in the DataExchange.
|
||||||
|
*
|
||||||
|
* @param modID - {@link String} modID.
|
||||||
|
*/
|
||||||
|
public static void registerMod(String modID) {
|
||||||
|
MODS.add(modID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the IDs of all registered Mods.
|
||||||
|
* @return List of modIDs
|
||||||
|
*/
|
||||||
|
public static List<String> registeredMods(){
|
||||||
|
return MODS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new Descriptor for a DataHandler.
|
* Add a new Descriptor for a DataHandler.
|
||||||
* @param desc The Descriptor you want to add.
|
* @param desc The Descriptor you want to add.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package ru.bclib.api.dataexchange;
|
package ru.bclib.api.dataexchange;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBufUtil;
|
||||||
|
import io.netty.util.CharsetUtil;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||||
|
@ -16,6 +18,8 @@ import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
public abstract class DataHandler {
|
public abstract class DataHandler {
|
||||||
private final boolean originatesOnServer;
|
private final boolean originatesOnServer;
|
||||||
@NotNull
|
@NotNull
|
||||||
|
@ -104,4 +108,23 @@ public abstract class DataHandler {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "DataHandler{" + "originatesOnServer=" + originatesOnServer + ", identifier=" + identifier + '}';
|
return "DataHandler{" + "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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package ru.bclib.api.dataexchange.handler;
|
package ru.bclib.api.dataexchange.handler;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBufUtil;
|
||||||
|
import io.netty.util.CharsetUtil;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||||
|
@ -8,11 +10,18 @@ import net.fabricmc.loader.api.ModContainer;
|
||||||
import net.minecraft.client.Minecraft;
|
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 ru.bclib.BCLib;
|
import ru.bclib.BCLib;
|
||||||
|
import ru.bclib.api.WorldDataAPI;
|
||||||
|
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.datafixer.DataFixerAPI;
|
import ru.bclib.api.datafixer.DataFixerAPI;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class HelloServer extends DataHandler {
|
public class HelloServer extends DataHandler {
|
||||||
|
@ -35,22 +44,41 @@ public class HelloServer extends DataHandler {
|
||||||
return getModVersion(BCLib.MOD_ID);
|
return getModVersion(BCLib.MOD_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String bclibVersion ="0.0.0";
|
||||||
|
Map<String, String> modVersion = new HashMap<>();
|
||||||
@Override
|
@Override
|
||||||
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) {
|
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) {
|
||||||
String bclibVersion = DataFixerAPI.getModVersion(buf.readInt());
|
bclibVersion = DataFixerAPI.getModVersion(buf.readInt());
|
||||||
String localBclibVersion = getBCLibVersion();
|
modVersion = new HashMap<>();
|
||||||
|
|
||||||
BCLib.LOGGER.info("Hello Server received from BCLib. (server="+localBclibVersion+", client="+bclibVersion+")");
|
int count = buf.readInt();
|
||||||
|
for (int i=0; i< count; i++){
|
||||||
|
String id = readString(buf);
|
||||||
|
String version = DataFixerAPI.getModVersion(buf.readInt());
|
||||||
|
modVersion.put(id, version);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Environment(EnvType.CLIENT)
|
protected void runOnServer(MinecraftServer server) {
|
||||||
protected void runOnClient(Minecraft client) {
|
String localBclibVersion = getBCLibVersion();
|
||||||
|
BCLib.LOGGER.info("Hello Server received from BCLib. (server="+localBclibVersion+", client="+bclibVersion+")");
|
||||||
|
|
||||||
|
for (Entry<String, String> e : modVersion.entrySet()){
|
||||||
|
String ver = getModVersion(e.getKey());
|
||||||
|
BCLib.LOGGER.info(" - " + e.getKey() + " (server="+ver+", client="+ver+")");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void serializeData(FriendlyByteBuf buf) {
|
protected void serializeData(FriendlyByteBuf buf) {
|
||||||
|
final List<String> mods = DataExchangeAPI.registeredMods();
|
||||||
buf.writeInt(DataFixerAPI.getModVersion(getBCLibVersion()));
|
buf.writeInt(DataFixerAPI.getModVersion(getBCLibVersion()));
|
||||||
|
|
||||||
|
buf.writeInt(mods.size());
|
||||||
|
for (String modID : mods) {
|
||||||
|
writeString(buf, modID);
|
||||||
|
buf.writeInt(DataFixerAPI.getModVersion(getModVersion(modID)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue