refactor and rename

This commit is contained in:
James Seibel
2023-07-04 10:29:43 -05:00
parent 10de377081
commit 889daecc86
11 changed files with 150 additions and 154 deletions
+3 -1
View File
@@ -203,7 +203,9 @@ subprojects { p ->
// SVG
shadowMe("com.formdev:svgSalamander:${rootProject.svgSalamander_version}")
shadowMe("com.formdev:flatlaf-extras:${rootProject.flatlaf_version}")
// Netty
shadowMe("io.netty:netty-all:4.1.94.Final")
// Remember, for lwjgl dependancies that arent included in Minecraft, you need to also need to add it to the ShadowJar thing
shadowMe("org.lwjgl:lwjgl-jawt:3.2.2") {
@@ -20,9 +20,9 @@
package com.seibel.distanthorizons.common.wrappers;
import com.seibel.distanthorizons.common.wrappers.gui.LangWrapper;
import com.seibel.distanthorizons.common.wrappers.level.EnhancedServerManager;
import com.seibel.distanthorizons.common.wrappers.level.KeyedClientLevelManager;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftDedicatedServerWrapper;
import com.seibel.distanthorizons.core.level.IEnhancedServerManager;
import com.seibel.distanthorizons.core.level.IKeyedClientLevelManager;
import com.seibel.distanthorizons.core.wrapperInterfaces.config.ILangWrapper;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
@@ -51,7 +51,7 @@ public class DependencySetup {
SingletonInjector.INSTANCE.bind(ILangWrapper.class, LangWrapper.INSTANCE);
SingletonInjector.INSTANCE.bind(IVersionConstants.class, VersionConstants.INSTANCE);
SingletonInjector.INSTANCE.bind(IWrapperFactory.class, WrapperFactory.INSTANCE);
SingletonInjector.INSTANCE.bind(IEnhancedServerManager.class, EnhancedServerManager.INSTANCE);
SingletonInjector.INSTANCE.bind(IKeyedClientLevelManager.class, KeyedClientLevelManager.INSTANCE);
DependencySetupDoneCheck.isDone = true;
}
@@ -1,33 +0,0 @@
package com.seibel.distanthorizons.common.wrappers.level;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.level.IServerEnhancedClientLevel;
import com.seibel.distanthorizons.core.level.IEnhancedServerManager;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
import net.minecraft.client.multiplayer.ClientLevel;
import java.util.Objects;
public class EnhancedServerManager implements IEnhancedServerManager {
public static EnhancedServerManager INSTANCE = new EnhancedServerManager();
@Override
public void registerServerEnhancedLevel(IServerEnhancedClientLevel clientLevel) {
ClientLevelWrapper.setWrappedLevel(clientLevel);
}
@Override
public IServerEnhancedClientLevel getServerEnhancedLevel(ILevelWrapper level, String worldKey) {
Objects.requireNonNull(level);
Objects.requireNonNull(worldKey);
return new ServerEnhancedClientLevel((ClientLevel) level.getWrappedMcObject(), worldKey);
}
@Override
public void setUseOverrideWrapper(boolean useOverrideWrapper) {
ClientLevelWrapper.setUseOverrideWrapper(useOverrideWrapper);
}
}
@@ -0,0 +1,54 @@
package com.seibel.distanthorizons.common.wrappers.level;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
import com.seibel.distanthorizons.core.level.IKeyedClientLevelManager;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
import net.minecraft.client.multiplayer.ClientLevel;
import java.util.Objects;
public class KeyedClientLevelManager implements IKeyedClientLevelManager
{
public static final KeyedClientLevelManager INSTANCE = new KeyedClientLevelManager();
/** This is set and managed by the ClientApi for servers with support for DH. */
private IServerKeyedClientLevel overrideWrapper = null;
private boolean useOverrideWrapper = false;
//=============//
// constructor //
//=============//
private KeyedClientLevelManager() { }
//======================//
// level override logic //
//======================//
@Override
public void setServerKeyedLevel(IServerKeyedClientLevel clientLevel) { this.overrideWrapper = clientLevel; }
@Override
public IServerKeyedClientLevel getOverrideWrapper() { return this.overrideWrapper; }
@Override
public IServerKeyedClientLevel getServerKeyedLevel(ILevelWrapper level, String serverLevelKey)
{
Objects.requireNonNull(level);
Objects.requireNonNull(serverLevelKey);
return new ServerKeyedClientLevel((ClientLevel) level.getWrappedMcObject(), serverLevelKey);
}
@Override
public void setUseOverrideWrapper(boolean useOverrideWrapper) { this.useOverrideWrapper = useOverrideWrapper; }
@Override
public boolean getUseOverrideWrapper() { return this.useOverrideWrapper; }
}
@@ -1,20 +0,0 @@
package com.seibel.distanthorizons.common.wrappers.level;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.level.IServerEnhancedClientLevel;
import net.minecraft.client.multiplayer.ClientLevel;
public class ServerEnhancedClientLevel extends ClientLevelWrapper implements IServerEnhancedClientLevel {
private final String serverKey;
public ServerEnhancedClientLevel(ClientLevel level, String serverKey) {
super(level);
this.serverKey = serverKey;
}
@Override
public String getServerWorldKey() {
return this.serverKey;
}
}
@@ -0,0 +1,21 @@
package com.seibel.distanthorizons.common.wrappers.level;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
import net.minecraft.client.multiplayer.ClientLevel;
public class ServerKeyedClientLevel extends ClientLevelWrapper implements IServerKeyedClientLevel
{
/** A unique identifier (generally the level's name) for differentiating multiverse levels */
private final String serverLevelKey;
public ServerKeyedClientLevel(ClientLevel level, String serverLevelKey)
{
super(level);
this.serverLevelKey = serverLevelKey;
}
@Override
public String getServerLevelKey() { return this.serverLevelKey; }
}
@@ -1,26 +0,0 @@
package com.seibel.distanthorizons.common.wrappers.minecraft;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IFriendlyByteBuf;
import net.minecraft.network.FriendlyByteBuf;
import java.nio.charset.Charset;
public class FriendlyByteBufWrapper implements IFriendlyByteBuf
{
private final FriendlyByteBuf buf;
public FriendlyByteBufWrapper(FriendlyByteBuf buf) {
this.buf = buf;
}
@Override
public short readShort()
{
return buf.readShort();
}
public CharSequence readCharSequence(int length, Charset charset)
{
return buf.readCharSequence(length, charset);
}
}
@@ -180,7 +180,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra
return null;
}
return ClientLevelWrapper.getOriginalWrapper(mc.level);
return ClientLevelWrapper.getWrapperIgnoringOverride(this.mc.level);
}
/** Please move over to getInstallationDirectory() */
@@ -263,7 +263,6 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra
}
@Override
public void execute(Runnable runnable) {
mc.execute(runnable);
}
public void executeOnRenderThread(Runnable runnable) { this.mc.execute(runnable); }
}
@@ -8,6 +8,8 @@ import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper;
import com.seibel.distanthorizons.common.wrappers.block.cache.ClientBlockDetailMap;
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.level.IKeyedClientLevelManager;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.pos.DhBlockPos;
import com.seibel.distanthorizons.core.pos.DhChunkPos;
@@ -28,59 +30,48 @@ import org.jetbrains.annotations.Nullable;
import java.util.concurrent.ConcurrentHashMap;
/**
*
* @version 2023-6-3
*/
public class ClientLevelWrapper implements IClientLevelWrapper
{
private static final Logger LOGGER = DhLoggerBuilder.getLogger(ClientLevelWrapper.class.getSimpleName());
private static final ConcurrentHashMap<ClientLevel, ClientLevelWrapper>
levelWrapperMap = new ConcurrentHashMap<>();
/**
* This is set and managed by the ClientApi for servers with support for DH.
*/
private static IClientLevelWrapper overrideWrapper = null;
private static boolean useOverrideWrapper = false;
public static void setWrappedLevel(IClientLevelWrapper wrapper) {
overrideWrapper = wrapper;
}
public static void setUseOverrideWrapper(boolean useOverrideWrapper) {
ClientLevelWrapper.useOverrideWrapper = useOverrideWrapper;
}
public static IClientLevelWrapper getWrapper(ClientLevel level) {
if(useOverrideWrapper) {
return overrideWrapper;
}
return getOriginalWrapper(level);
}
/**
* Gets the original level wrapper, regardless of whether or not the server is overriding the
* level wrapper.
* @param level
* @return
*/
public static IClientLevelWrapper getOriginalWrapper(ClientLevel level) {
return levelWrapperMap.computeIfAbsent(level, ClientLevelWrapper::new);
}
public static void closeWrapper(ClientLevel level)
{
levelWrapperMap.remove(level);
}
protected ClientLevelWrapper(ClientLevel level) {
this.level = level;
}
final ClientLevel level;
ClientBlockDetailMap blockMap = new ClientBlockDetailMap(this);
@Nullable
private static final ConcurrentHashMap<ClientLevel, ClientLevelWrapper> LEVEL_WRAPPER_BY_CLIENT_LEVEL = new ConcurrentHashMap<>();
private static final IKeyedClientLevelManager KEYED_CLIENT_LEVEL_MANAGER = SingletonInjector.INSTANCE.get(IKeyedClientLevelManager.class);
private final ClientLevel level;
private final ClientBlockDetailMap blockMap = new ClientBlockDetailMap(this);
//=============//
// constructor //
//=============//
protected ClientLevelWrapper(ClientLevel level) { this.level = level; }
//===============//
// wrapper logic //
//===============//
public static IClientLevelWrapper getWrapper(ClientLevel level)
{
// used if the client is connected to a server that defines the currently loaded level
if (KEYED_CLIENT_LEVEL_MANAGER.getUseOverrideWrapper())
{
return KEYED_CLIENT_LEVEL_MANAGER.getOverrideWrapper();
}
return getWrapperIgnoringOverride(level);
}
public static IClientLevelWrapper getWrapperIgnoringOverride(ClientLevel level)
{
return LEVEL_WRAPPER_BY_CLIENT_LEVEL.computeIfAbsent(level, ClientLevelWrapper::new);
}
public static void closeLevel(ClientLevel level) { LEVEL_WRAPPER_BY_CLIENT_LEVEL.remove(level); }
@Nullable
@Override
public IServerLevelWrapper tryGetServerSideWrapper()
{
@@ -118,12 +109,18 @@ public class ClientLevelWrapper implements IClientLevelWrapper
}
}
public static void cleanCheck() {
if (!levelWrapperMap.isEmpty()) {
LOGGER.warn("{} client levels havn't been freed!", levelWrapperMap.size());
levelWrapperMap.clear();
if (!LEVEL_WRAPPER_BY_CLIENT_LEVEL.isEmpty()) {
LOGGER.warn("{} client levels havn't been freed!", LEVEL_WRAPPER_BY_CLIENT_LEVEL.size());
LEVEL_WRAPPER_BY_CLIENT_LEVEL.clear();
}
}
//====================//
// base level methods //
//====================//
@Override
public int computeBaseColor(DhBlockPos pos, IBiomeWrapper biome, IBlockStateWrapper blockState) {
return blockMap.getColor(((BlockStateWrapper)blockState).blockState,
@@ -212,11 +209,14 @@ public class ClientLevelWrapper implements IClientLevelWrapper
}
@Override
public String toString() {
if(level == null) {
return "Wrapped{null}";
}
return "Wrapped{" + level.toString() + "@" + getDimensionType().getDimensionName() + "}";
}
public String toString()
{
if (this.level == null)
{
return "Wrapped{null}";
}
return "Wrapped{" + this.level.toString() + "@" + this.getDimensionType().getDimensionName() + "}";
}
}
@@ -2,7 +2,6 @@ package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.common.networking.Networking;
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
import com.seibel.distanthorizons.common.wrappers.minecraft.FriendlyByteBufWrapper;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment;
@@ -131,11 +130,11 @@ public class FabricServerProxy
});
// ServerChunkSaveEvent - Done in MixinChunkMap
ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation("distant_horizons", "world_control"),
(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) ->
{
ClientApi.INSTANCE.serverMessageReceived(new FriendlyByteBufWrapper(buf));
});
ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation("distant_horizons", "world_control"), // TODO move these strings into a constant somewhere
(Minecraft client, ClientPacketListener handler, FriendlyByteBuf byteBuffer, PacketSender responseSender) ->
{
ClientApi.INSTANCE.serverMessageReceived(byteBuffer);
});
}
// This just exists here for testing purposes, it'll be removed in the future