[CLEANUP] YEET old networking system

This commit is contained in:
2024-05-01 13:29:01 +02:00
parent ed1c962db9
commit c72b83c8d6
9 changed files with 0 additions and 423 deletions

View File

@@ -1,34 +0,0 @@
package com.hypherionmc.craterlib.core.network;
import com.hypherionmc.craterlib.core.platform.ClientPlatform;
import com.hypherionmc.craterlib.core.platform.CommonPlatform;
import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer;
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);
Packet<?> toServerBound(CraterPacket<?> packet);
Packet<?> toClientBound(CraterPacket<?> packet);
default void sendToServer(CraterPacket<?> packet) {
ClientPlatform.INSTANCE.getClientConnection().send(this.toServerBound(packet));
}
default void sendTo(CraterPacket<?> packet, ServerPlayer player) {
player.connection.send(this.toClientBound(packet));
}
default void sendToAll(CraterPacket<?> packet) {
CommonPlatform.INSTANCE.getMCServer().toMojang().getPlayerList().broadcastAll(this.toClientBound(packet));
}
}

View File

@@ -1,25 +0,0 @@
package com.hypherionmc.craterlib.core.network;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
/**
* @author HypherionSA
*/
@Deprecated(forRemoval = true)
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

@@ -1,10 +0,0 @@
package com.hypherionmc.craterlib.core.network;
/**
* @author HypherionSA
*/
@Deprecated(forRemoval = true)
public enum PacketDirection {
TO_SERVER,
TO_CLIENT
}

View File

@@ -1,87 +0,0 @@
package com.hypherionmc.craterlib.network;
import com.google.common.collect.Maps;
import com.hypherionmc.craterlib.core.network.CraterNetworkHandler;
import com.hypherionmc.craterlib.core.network.CraterPacket;
import com.hypherionmc.craterlib.core.network.PacketDirection;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.Util;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.resources.ResourceLocation;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* @author HypherionSA
* @date 24/09/2022
*/
@Deprecated(forRemoval = true)
public class FabricNetworkHandler implements CraterNetworkHandler {
private static final Map<String, FabricNetworkHandler> NETWORK_HANDLERS = Maps.newConcurrentMap();
private final Map<Class<? extends CraterPacket<?>>, PacketData> packets = Maps.newIdentityHashMap();
private final String modid;
private final AtomicInteger packetID = new AtomicInteger();
private FabricNetworkHandler(String modid) {
this.modid = modid;
}
public synchronized static CraterNetworkHandler of(String modId) {
return NETWORK_HANDLERS.computeIfAbsent(modId, FabricNetworkHandler::new);
}
@Override
public <T extends CraterPacket<T>> void registerPacket(Class<T> clazz, Supplier<T> supplier, PacketDirection packetDirection) {
ResourceLocation channelName = this.nextId();
this.packets.put(clazz, new PacketData(clazz, channelName, packetDirection));
final Function<FriendlyByteBuf, CraterPacket<?>> decoder = buf -> Util.make(supplier.get(), message -> message.read(buf));
switch (packetDirection) {
case TO_CLIENT ->
FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerClientReceiver(channelName, decoder);
case TO_SERVER ->
FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerServerReceiver(channelName, decoder);
}
}
private ResourceLocation nextId() {
return new ResourceLocation(this.modid, "play/" + this.packetID.getAndIncrement());
}
@Override
public Packet<?> toServerBound(CraterPacket<?> packet) {
if (this.packets.get(packet.getClass()).direction() != PacketDirection.TO_SERVER)
throw new IllegalStateException("Attempted sending message to wrong side, expected %s, was %s".formatted(PacketDirection.TO_SERVER, PacketDirection.TO_CLIENT));
return this.toPacket(ClientPlayNetworking::createC2SPacket, packet);
}
@Override
public Packet<?> toClientBound(CraterPacket<?> packet) {
if (this.packets.get(packet.getClass()).direction() != PacketDirection.TO_CLIENT)
throw new IllegalStateException("Attempted sending message to wrong side, expected %s, was %s".formatted(PacketDirection.TO_CLIENT, PacketDirection.TO_SERVER));
return this.toPacket(ServerPlayNetworking::createS2CPacket, packet);
}
private Packet<?> toPacket(BiFunction<ResourceLocation, FriendlyByteBuf, Packet<?>> packetFactory, CraterPacket<?> message) {
ResourceLocation identifier = this.packets.get(message.getClass()).identifier();
FriendlyByteBuf byteBuf = PacketByteBufs.create();
message.write(byteBuf);
return packetFactory.apply(identifier, byteBuf);
}
private record PacketData(Class<? extends CraterPacket<?>> clazz, ResourceLocation identifier,
PacketDirection direction) {
}
}

View File

@@ -1,33 +0,0 @@
package com.hypherionmc.craterlib.network;
import com.hypherionmc.craterlib.core.network.CraterPacket;
import com.hypherionmc.craterlib.network.impl.FabricClientNetworkHelper;
import com.hypherionmc.craterlib.network.impl.FabricServerNetworkHelper;
import net.fabricmc.api.EnvType;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.NotNull;
import java.util.function.Function;
@Deprecated(forRemoval = true)
public interface FabricNetworkHelper {
public static FabricNetworkHelper getForDist(EnvType dist) {
switch (dist) {
case CLIENT -> {
return new FabricClientNetworkHelper();
}
case SERVER -> {
return new FabricServerNetworkHelper();
}
}
return null;
}
/* FABRIC ONLY */
void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function<FriendlyByteBuf, @NotNull CraterPacket<?>> factory);
void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
}

View File

@@ -1,24 +0,0 @@
package com.hypherionmc.craterlib.network.impl;
import com.hypherionmc.craterlib.core.network.CraterPacket;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.NotNull;
import java.util.function.Function;
@Deprecated(forRemoval = true)
public class FabricClientNetworkHelper extends FabricServerNetworkHelper {
@Override
public void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function<FriendlyByteBuf, CraterPacket<?>> factory) {
ClientPlayNetworking.registerGlobalReceiver(channelName, (Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
CraterPacket<?> packet = factory.apply(buf);
client.execute(() -> packet.handle(client.player, client));
});
}
}

View File

@@ -1,30 +0,0 @@
package com.hypherionmc.craterlib.network.impl;
import com.hypherionmc.craterlib.core.network.CraterPacket;
import com.hypherionmc.craterlib.network.FabricNetworkHelper;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import org.jetbrains.annotations.NotNull;
import java.util.function.Function;
@Deprecated(forRemoval = true)
public class FabricServerNetworkHelper implements FabricNetworkHelper {
@Override
public void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function<FriendlyByteBuf, @NotNull CraterPacket<?>> factory) {
}
@Override
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
ServerPlayNetworking.registerGlobalReceiver(channelName, (MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
CraterPacket<?> packet = factory.apply(buf);
server.execute(() -> packet.handle(player, server));
});
}
}

View File

@@ -1,145 +0,0 @@
package com.hypherionmc.craterlib.network;
import com.google.common.collect.Maps;
import com.hypherionmc.craterlib.core.network.CraterNetworkHandler;
import com.hypherionmc.craterlib.core.network.CraterPacket;
import com.hypherionmc.craterlib.core.network.PacketDirection;
import com.hypherionmc.craterlib.core.platform.ClientPlatform;
import io.netty.buffer.Unpooled;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.common.util.LogicalSidedProvider;
import net.minecraftforge.event.network.CustomPayloadEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.network.ChannelBuilder;
import net.minecraftforge.network.NetworkDirection;
import net.minecraftforge.network.SimpleChannel;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* @author HypherionSA
* Partly inspired by and based on <a href="https://github.com/Fuzss/puzzleslib/blob/1.19/Forge/src/main/java/fuzs/puzzleslib/network/ForgeNetworkHandler.java">...</a>
*/
@Deprecated(forRemoval = true)
public class ForgeNetworkHandler implements CraterNetworkHandler {
private static final Map<String, ForgeNetworkHandler> NETWORK_HANDLERS = Maps.newConcurrentMap();
private final SimpleChannel channel;
private final boolean clientRequired;
private final boolean serverRequired;
private final AtomicInteger packetID = new AtomicInteger();
private HashMap<Class<?>, Integer> packetMap = new LinkedHashMap<>();
private ForgeNetworkHandler(SimpleChannel channel, boolean clientRequired, boolean serverRequired) {
this.channel = channel;
this.clientRequired = clientRequired;
this.serverRequired = serverRequired;
}
public synchronized static CraterNetworkHandler of(String modId, boolean clientRequired, boolean serverRequired) {
ForgeNetworkHandler handler = NETWORK_HANDLERS.computeIfAbsent(modId, modId1 -> new ForgeNetworkHandler(buildSimpleChannel(modId1, clientRequired, serverRequired), clientRequired, serverRequired));
if (handler.clientRequired != clientRequired)
throw new IllegalArgumentException("client channel settings mismatch, expected %s, but was %s".formatted(handler.clientRequired, clientRequired));
if (handler.serverRequired != serverRequired)
throw new IllegalArgumentException("server channel settings mismatch, expected %s, but was %s".formatted(handler.serverRequired, serverRequired));
return handler;
}
private static SimpleChannel buildSimpleChannel(String modId, boolean clientAcceptsVanillaOrMissing, boolean serverAcceptsVanillaOrMissing) {
ChannelBuilder builder = ChannelBuilder.named(new ResourceLocation(modId, "crater_network"));
if (clientAcceptsVanillaOrMissing) {
builder = builder.optionalClient();
}
if (serverAcceptsVanillaOrMissing) {
builder = builder.optionalServer();
}
return builder.simpleChannel();
}
@Override
public <T extends CraterPacket<T>> void registerPacket(Class<T> clazz, Supplier<T> supplier, PacketDirection packetDirection) {
BiConsumer<T, FriendlyByteBuf> encoder = CraterPacket::write;
Function<FriendlyByteBuf, T> decoder = buf -> {
T packet = supplier.get();
packet.read(buf);
return packet;
};
BiConsumer<T, CustomPayloadEvent.Context> handler = (packet, sup) -> {
LogicalSide expectedSide = getSideFromDirection(packetDirection);
LogicalSide currentSide = sup.getDirection().getReceptionSide();
if (expectedSide != currentSide) {
throw new IllegalStateException(String.format("Received message on wrong side, expected %s, was %s", expectedSide, currentSide));
}
sup.enqueueWork(() -> {
Player player;
if (packetDirection == PacketDirection.TO_CLIENT) {
player = ClientPlatform.INSTANCE.getClientPlayer().toMojangServerPlayer();
} else {
player = sup.getSender();
}
packet.handle(player, LogicalSidedProvider.WORKQUEUE.get(expectedSide));
});
sup.setPacketHandled(true);
};
int id = packetID.getAndIncrement();
packetMap.put(clazz, id);
this.channel
.messageBuilder((Class<T>) clazz, id)
.encoder(encoder)
.decoder(decoder)
.consumerNetworkThread(handler)
.add();
}
@Override
public Packet<?> toServerBound(CraterPacket<?> packet) {
return NetworkDirection.PLAY_TO_SERVER.buildPacket(toBuffer(packet), channel.getName()).getThis();
//return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_SERVER);
}
@Override
public Packet<?> toClientBound(CraterPacket<?> packet) {
return NetworkDirection.PLAY_TO_CLIENT.buildPacket(toBuffer(packet), channel.getName()).getThis();
//return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_CLIENT);
}
@Override
public void sendToServer(CraterPacket<?> packet) {
CraterNetworkHandler.super.sendToServer(packet);
}
private LogicalSide getSideFromDirection(PacketDirection direction) {
return direction == PacketDirection.TO_CLIENT ? LogicalSide.CLIENT : LogicalSide.SERVER;
}
protected FriendlyByteBuf toBuffer(CraterPacket<?> message) {
var msg = packetMap.get(message.getClass());
var ret = new FriendlyByteBuf(Unpooled.buffer());
ret.writeVarInt(msg);
message.write(ret);
return ret;
}
}

View File

@@ -1,35 +0,0 @@
package com.hypherionmc.craterlib.network;
import com.hypherionmc.craterlib.core.network.CraterNetworkHandler;
import com.hypherionmc.craterlib.core.network.CraterPacket;
import com.hypherionmc.craterlib.core.network.PacketDirection;
import net.minecraft.network.protocol.Packet;
import java.util.function.Supplier;
/**
* @author HypherionSA
* Partly inspired by and based on <a href="https://github.com/Fuzss/puzzleslib/blob/1.19/Forge/src/main/java/fuzs/puzzleslib/network/ForgeNetworkHandler.java">...</a>
*/
@Deprecated(forRemoval = true)
public class NeoForgeNetworkHandler implements CraterNetworkHandler {
public NeoForgeNetworkHandler(String modid, boolean requiredClient, boolean requiredServer) {
}
@Override
public <T extends CraterPacket<T>> void registerPacket(Class<T> clazz, Supplier<T> supplier, PacketDirection packetDirection) {
}
@Override
public Packet<?> toServerBound(CraterPacket<?> packet) {
return null;
}
@Override
public Packet<?> toClientBound(CraterPacket<?> packet) {
return null;
}
}