Initial Network System implementation

This commit is contained in:
2022-09-24 21:21:01 +02:00
parent ab33e57245
commit 570321b274
25 changed files with 625 additions and 74 deletions

View File

@@ -1,6 +1,6 @@
package me.hypherionmc.craterlib.client.gui.tabs;
import me.hypherionmc.craterlib.platform.Services;
import me.hypherionmc.craterlib.platform.Platform;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
@@ -40,7 +40,7 @@ public class CreativeTabBuilder {
}
public CreativeModeTab build() {
return Services.CLIENT_HELPER.tabBuilder(this.modid, this.tabid, this.tabIcon, this.backgroundPrefix);
return Platform.CLIENT_HELPER.tabBuilder(this.modid, this.tabid, this.tabIcon, this.backgroundPrefix);
}
}

View File

@@ -2,7 +2,7 @@ package me.hypherionmc.craterlib.common.item;
import me.hypherionmc.craterlib.api.rendering.DyableBlock;
import me.hypherionmc.craterlib.api.rendering.ItemDyable;
import me.hypherionmc.craterlib.platform.Services;
import me.hypherionmc.craterlib.platform.Platform;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.BlockItem;
@@ -23,7 +23,7 @@ public class BlockItemDyable extends BlockItem implements ItemDyable {
public BlockItemDyable(Block block, Properties properties) {
super(block, properties);
Services.CLIENT_HELPER.registerItemProperty(this, "color");
Platform.CLIENT_HELPER.registerItemProperty(this, "color");
}
/**

View File

@@ -0,0 +1,33 @@
package me.hypherionmc.craterlib.network;
import me.hypherionmc.craterlib.platform.Platform;
import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer;
import java.util.function.Supplier;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public interface CraterNetworkHandler {
<T extends CraterPacket<T>> void registerPacket(Class<? extends T> clazz, Supplier<T> supplier, PacketDirection packetDirection);
Packet<?> toServerBound(CraterPacket<?> packet);
Packet<?> toClientBound(CraterPacket<?> packet);
default void sendToServer(CraterPacket<?> packet) {
Platform.COMMON_HELPER.getClientConnection().send(this.toServerBound(packet));
}
default void sendTo(CraterPacket<?> packet, ServerPlayer player) {
player.connection.send(this.toClientBound(packet));
}
default void sendToAll(CraterPacket<?> packet) {
Platform.COMMON_HELPER.getMCServer().getPlayerList().broadcastAll(this.toClientBound(packet));
}
}

View File

@@ -0,0 +1,25 @@
package me.hypherionmc.craterlib.network;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public interface CraterPacket<T extends CraterPacket<T>> {
void write(final FriendlyByteBuf buf);
void read(final FriendlyByteBuf buf);
default void handle(Player player, Object minecraft) {
this.createHandler().handle((T) this, player, minecraft);
}
PacketHandler<T> createHandler();
abstract class PacketHandler<T extends CraterPacket<T>> {
public abstract void handle(T packet, Player player, Object minecraft);
}
}

View File

@@ -0,0 +1,10 @@
package me.hypherionmc.craterlib.network;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public enum PacketDirection {
TO_SERVER,
TO_CLIENT
}

View File

@@ -1,17 +1,20 @@
package me.hypherionmc.craterlib.platform;
import me.hypherionmc.craterlib.CraterConstants;
import me.hypherionmc.craterlib.platform.services.IPlatformHelper;
import me.hypherionmc.craterlib.platform.services.ILoaderHelper;
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
import me.hypherionmc.craterlib.platform.services.LibCommonHelper;
import java.util.ServiceLoader;
public class Services {
public class Platform {
public static final IPlatformHelper PLATFORM = load(IPlatformHelper.class);
public static final ILoaderHelper LOADER = load(ILoaderHelper.class);
public static final LibClientHelper CLIENT_HELPER = load(LibClientHelper.class);
public static final LibCommonHelper COMMON_HELPER = load(LibCommonHelper.class);
public static <T> T load(Class<T> clazz) {
final T loadedService = ServiceLoader.load(clazz)

View File

@@ -0,0 +1,11 @@
package me.hypherionmc.craterlib.platform.services;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public enum Environment {
CLIENT,
SERVER,
UNKNOWN
}

View File

@@ -0,0 +1,19 @@
package me.hypherionmc.craterlib.platform.services;
import java.io.File;
/**
* Helper class to provide information about the ModLoader
*/
public interface ILoaderHelper {
public boolean isFabric();
public boolean isForge();
public String getGameVersion();
public File getGameFolder();
public File getConfigFolder();
public File getModsFolder();
public Environment getEnvironment();
public boolean isModLoaded(String modid);
public boolean isDevEnv();
}

View File

@@ -1,11 +0,0 @@
package me.hypherionmc.craterlib.platform.services;
public interface IPlatformHelper {
String getPlatformName();
boolean isModLoaded(String modId);
boolean isDevelopmentEnvironment();
}

View File

@@ -0,0 +1,36 @@
package me.hypherionmc.craterlib.platform.services;
import me.hypherionmc.craterlib.network.CraterNetworkHandler;
import me.hypherionmc.craterlib.network.CraterPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import java.util.function.Function;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public interface LibCommonHelper {
public CraterNetworkHandler createPacketHandler(String modid);
public Minecraft getClientInstance();
public Player getClientPlayer();
public Level getClientLevel();
public Connection getClientConnection();
public MinecraftServer getMCServer();
/* FABRIC ONLY */
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
}