From 47963fba43ec077189e1fe82409f2d76e757a8d4 Mon Sep 17 00:00:00 2001 From: s809 <11816467-s809@users.noreply.gitlab.com> Date: Fri, 30 Jun 2023 22:05:03 +0500 Subject: [PATCH] The real server side (not tested) --- .../wrappers/misc/ServerPlayerWrapper.java | 48 +++++++++++++++++++ fabric/build.gradle | 1 + .../fabric/FabricServerProxy.java | 20 +++++++- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/ServerPlayerWrapper.java diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/ServerPlayerWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/ServerPlayerWrapper.java new file mode 100644 index 000000000..6f60e105e --- /dev/null +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/ServerPlayerWrapper.java @@ -0,0 +1,48 @@ +package com.seibel.distanthorizons.common.wrappers.misc; + +import com.google.common.collect.MapMaker; +import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; +import com.seibel.distanthorizons.core.api.internal.SharedApi; +import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.world.AbstractDhWorld; +import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper; +import net.minecraft.server.level.ServerPlayer; +import org.apache.logging.log4j.Logger; + +import java.util.UUID; +import java.util.concurrent.ConcurrentMap; + +public class ServerPlayerWrapper implements IServerPlayerWrapper { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(); + private static final ConcurrentMap + serverPlayerWrapperMap = new MapMaker().weakKeys().weakValues().makeMap(); + + private final ServerPlayer serverPlayer; + + public static ServerPlayerWrapper getWrapper(ServerPlayer serverPlayer) + { + return serverPlayerWrapperMap.computeIfAbsent(serverPlayer, ServerPlayerWrapper::new); + } + + private ServerPlayerWrapper(ServerPlayer serverPlayer) { + this.serverPlayer = serverPlayer; + } + + public UUID getUUID() { + return serverPlayer.getUUID(); + } + + public IServerLevelWrapper getLevel() { + return ServerLevelWrapper.getWrapper(serverPlayer.getLevel()); + } + + public Object getWrappedMcObject() { + return serverPlayer; + } + + @Override + public String toString() { + return "Wrapped{" + serverPlayer.toString() + "}"; + } +} diff --git a/fabric/build.gradle b/fabric/build.gradle index ae5cb6a04..64bd4c623 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -59,6 +59,7 @@ dependencies { addModJar(fabricApi.module("fabric-key-binding-api-v1", rootProject.fabric_api_version)) addModJar(fabricApi.module("fabric-resource-loader-v0", rootProject.fabric_api_version)) addModJar(fabricApi.module("fabric-rendering-v1", rootProject.fabric_api_version)) // TODO: Remove this as it is only needed in 1 line (FabricClientProxy) + addModJar(fabricApi.module("fabric-networking-api-v1", rootProject.fabric_api_version)) addModJar(fabricApi.module("fabric-api-base", rootProject.fabric_api_version)) // Mod Menu diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java index b0ffc2fc1..f6da28e69 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricServerProxy.java @@ -1,6 +1,7 @@ package com.seibel.distanthorizons.fabric; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; +import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; @@ -11,6 +12,7 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerChunkEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.multiplayer.ClientLevel; @@ -60,7 +62,8 @@ public class FabricServerProxy private ClientLevelWrapper getClientLevelWrapper(ClientLevel level) { return ClientLevelWrapper.getWrapper(level); } private ServerLevelWrapper getServerLevelWrapper(ServerLevel level) { return ServerLevelWrapper.getWrapper(level); } - + private ServerPlayerWrapper getServerPlayerWrapper(ServerPlayer player) { return ServerPlayerWrapper.getWrapper(player); } + /** Registers Fabric Events */ public void registerEvents() { @@ -119,5 +122,20 @@ public class FabricServerProxy } }); // ServerChunkSaveEvent - Done in MixinChunkMap + + ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> + { + if (isValidTime()) + { + ServerApi.INSTANCE.serverPlayerJoinEvent(getServerPlayerWrapper(handler.player)); + } + }); + ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> + { + if (isValidTime()) + { + ServerApi.INSTANCE.serverPlayerDisconnectEvent(getServerPlayerWrapper(handler.player)); + } + }); } }