New network system
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package com.hypherionmc.craterlib.api.networking;
|
||||
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
|
||||
*/
|
||||
public interface CraterNetworkHandler {
|
||||
|
||||
<T> void sendToServer(T packet);
|
||||
|
||||
<T> void sendToServer(T packet, boolean ignoreCheck);
|
||||
|
||||
<T> void sendToClient(T packet, ServerPlayer player);
|
||||
|
||||
default <T> void sendToClients(T packet, List<ServerPlayer> players) {
|
||||
for (ServerPlayer player : players) {
|
||||
sendToClient(packet, player);
|
||||
}
|
||||
}
|
||||
|
||||
default <T> void sendToAllClients(T packet, MinecraftServer server) {
|
||||
sendToClients(packet, server.getPlayerList().getPlayers());
|
||||
}
|
||||
}
|
@@ -10,6 +10,7 @@ import java.util.function.Supplier;
|
||||
/**
|
||||
* @author HypherionSA
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public interface CraterNetworkHandler {
|
||||
|
||||
<T extends CraterPacket<T>> void registerPacket(Class<T> clazz, Supplier<T> supplier, PacketDirection packetDirection);
|
||||
|
@@ -6,6 +6,7 @@ import net.minecraft.world.entity.player.Player;
|
||||
/**
|
||||
* @author HypherionSA
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public interface CraterPacket<T extends CraterPacket<T>> {
|
||||
|
||||
void write(final FriendlyByteBuf buf);
|
||||
|
@@ -3,6 +3,7 @@ package com.hypherionmc.craterlib.core.network;
|
||||
/**
|
||||
* @author HypherionSA
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public enum PacketDirection {
|
||||
TO_SERVER,
|
||||
TO_CLIENT
|
||||
|
@@ -0,0 +1,31 @@
|
||||
package com.hypherionmc.craterlib.core.networking;
|
||||
|
||||
import com.hypherionmc.craterlib.core.networking.data.PacketContext;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
|
||||
*/
|
||||
public class CraterPacketNetwork {
|
||||
|
||||
private final PacketRegistry packetRegistry;
|
||||
public static CraterPacketNetwork INSTANCE;
|
||||
|
||||
public CraterPacketNetwork(PacketRegistry registry) {
|
||||
INSTANCE = this;
|
||||
this.packetRegistry = registry;
|
||||
}
|
||||
|
||||
public static <T> PacketRegistrar registerPacket(ResourceLocation id, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler) {
|
||||
return INSTANCE.packetRegistry.registerPacket(id, messageType, encoder, decoder, handler);
|
||||
}
|
||||
|
||||
public PacketRegistry getPacketRegistry() {
|
||||
return packetRegistry;
|
||||
}
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package com.hypherionmc.craterlib.core.networking;
|
||||
|
||||
import com.hypherionmc.craterlib.core.networking.data.PacketContext;
|
||||
import com.hypherionmc.craterlib.core.networking.data.PacketSide;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
|
||||
*/
|
||||
public interface PacketRegistrar {
|
||||
|
||||
PacketSide side();
|
||||
|
||||
<T> PacketRegistrar registerPacket(ResourceLocation id, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler);
|
||||
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
package com.hypherionmc.craterlib.core.networking;
|
||||
|
||||
import com.hypherionmc.craterlib.api.networking.CraterNetworkHandler;
|
||||
import com.hypherionmc.craterlib.core.networking.data.PacketContext;
|
||||
import com.hypherionmc.craterlib.core.networking.data.PacketHolder;
|
||||
import com.hypherionmc.craterlib.core.networking.data.PacketSide;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
|
||||
*/
|
||||
public abstract class PacketRegistry implements CraterNetworkHandler, PacketRegistrar {
|
||||
|
||||
final Map<Class<?>, PacketHolder<?>> PACKET_MAP = new HashMap<>();
|
||||
|
||||
protected final PacketSide side;
|
||||
|
||||
public PacketRegistry(PacketSide side) {
|
||||
this.side = side;
|
||||
}
|
||||
|
||||
public <T> PacketRegistrar registerPacket(ResourceLocation id, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler) {
|
||||
PacketHolder<T> holder = new PacketHolder<>(id, messageType, encoder, decoder, handler);
|
||||
PACKET_MAP.put(messageType, holder);
|
||||
registerPacket(holder);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PacketSide side() {
|
||||
return side;
|
||||
}
|
||||
|
||||
protected abstract <T> void registerPacket(PacketHolder<T> packetHolder);
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
package com.hypherionmc.craterlib.core.networking.data;
|
||||
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
|
||||
*/
|
||||
public record PacketContext<T>(@Nullable Player sender, T message, PacketSide side) {
|
||||
|
||||
public PacketContext(T message, PacketSide side) {
|
||||
this(null, message, side);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
package com.hypherionmc.craterlib.core.networking.data;
|
||||
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
|
||||
*/
|
||||
public record PacketHolder<T>(ResourceLocation packetId,
|
||||
Class<T> messageType,
|
||||
BiConsumer<T, FriendlyByteBuf> encoder,
|
||||
Function<FriendlyByteBuf, T> decoder,
|
||||
Consumer<PacketContext<T>> handler) {
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
package com.hypherionmc.craterlib.core.networking.data;
|
||||
|
||||
public enum PacketSide {
|
||||
CLIENT,
|
||||
SERVER;
|
||||
|
||||
public PacketSide flipped() {
|
||||
if (CLIENT.equals(this))
|
||||
return SERVER;
|
||||
|
||||
return CLIENT;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user