Milestone!! Both fabric:runclient & fabric:runserver now works!!!!! (in 1.18.2 for now)
This commit is contained in:
@@ -9,15 +9,18 @@ import com.seibel.lod.core.a7.render.RenderBufferHandler;
|
||||
import com.seibel.lod.core.a7.save.structure.ClientOnlySaveStructure;
|
||||
import com.seibel.lod.core.config.Config;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
|
||||
import com.seibel.lod.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.lod.core.objects.math.Mat4f;
|
||||
import com.seibel.lod.core.render.a7LodRenderer;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class DhClientLevel implements IClientLevel {
|
||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
||||
private static final IMinecraftClientWrapper MC_CLIENT = SingletonHandler.get(IMinecraftClientWrapper.class);
|
||||
public final ClientOnlySaveStructure save;
|
||||
public final RemoteDataFileHandler dataFileHandler;
|
||||
@@ -29,6 +32,8 @@ public class DhClientLevel implements IClientLevel {
|
||||
|
||||
public DhClientLevel(ClientOnlySaveStructure save, ILevelWrapper level) {
|
||||
this.save = save;
|
||||
save.getDataFolder(level).mkdirs();
|
||||
save.getRenderCacheFolder(level).mkdirs();
|
||||
dataFileHandler = new RemoteDataFileHandler();
|
||||
renderFileHandler = new RenderFileHandler(dataFileHandler, this, save.getRenderCacheFolder(level));
|
||||
tree = new LodQuadTree(Config.Client.Graphics.Quality.lodChunkRenderDistance.get()*16,
|
||||
@@ -36,6 +41,7 @@ public class DhClientLevel implements IClientLevel {
|
||||
renderBufferHandler = new RenderBufferHandler(tree);
|
||||
this.level = level;
|
||||
FileScanner.scanFile(save, level, dataFileHandler, renderFileHandler);
|
||||
LOGGER.info("Started DHLevel for {} with saves at {}", level, save);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -75,5 +81,6 @@ public class DhClientLevel implements IClientLevel {
|
||||
@Override
|
||||
public void close() {
|
||||
renderFileHandler.close();
|
||||
LOGGER.info("Closed DHLevel for {}", level);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,10 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
public DhClientServerLevel(LocalSaveStructure save, ILevelWrapper level) {
|
||||
this.level = level;
|
||||
this.save = save;
|
||||
save.getDataFolder(level).mkdirs();
|
||||
save.getRenderCacheFolder(level).mkdirs();
|
||||
dataFileHandler = new LocalDataFileHandler(this, save.getDataFolder(level));
|
||||
LOGGER.info("Started DHLevel for {} with saves at {}", level, save);
|
||||
}
|
||||
|
||||
public void clientTick() {
|
||||
@@ -105,6 +108,7 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
@Override
|
||||
public void close() {
|
||||
dataFileHandler.close();
|
||||
LOGGER.info("Closed DHLevel for {}", level);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,11 +3,15 @@ package com.seibel.lod.core.a7.level;
|
||||
import com.seibel.lod.core.a7.util.FileScanner;
|
||||
import com.seibel.lod.core.a7.save.io.file.LocalDataFileHandler;
|
||||
import com.seibel.lod.core.a7.save.structure.LocalSaveStructure;
|
||||
import com.seibel.lod.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class DhServerLevel implements IServerLevel {
|
||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
||||
|
||||
public final LocalSaveStructure save;
|
||||
public final LocalDataFileHandler dataFileHandler;
|
||||
public final ILevelWrapper level;
|
||||
@@ -15,8 +19,10 @@ public class DhServerLevel implements IServerLevel {
|
||||
public DhServerLevel(LocalSaveStructure save, ILevelWrapper level) {
|
||||
this.save = save;
|
||||
this.level = level;
|
||||
save.getDataFolder(level).mkdirs();
|
||||
dataFileHandler = new LocalDataFileHandler(this, save.getDataFolder(level));
|
||||
FileScanner.scanFile(save, level, dataFileHandler, null);
|
||||
LOGGER.info("Started DHLevel for {} with saves at {}", level, save);
|
||||
}
|
||||
|
||||
public void serverTick() {
|
||||
@@ -35,6 +41,7 @@ public class DhServerLevel implements IServerLevel {
|
||||
@Override
|
||||
public void close() {
|
||||
dataFileHandler.close();
|
||||
LOGGER.info("Closed DHLevel for {}", level);
|
||||
}
|
||||
@Override
|
||||
public CompletableFuture<Void> save() {
|
||||
|
||||
@@ -11,22 +11,27 @@ import java.io.File;
|
||||
public class LocalSaveStructure extends SaveStructure {
|
||||
private static final IMinecraftSharedWrapper MC = SingletonHandler.get(IMinecraftSharedWrapper.class);
|
||||
|
||||
private File debugPath = new File("");
|
||||
|
||||
// Fit for Client_Server & Server_Only environment
|
||||
public LocalSaveStructure() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public File tryGetLevelFolder(ILevelWrapper wrapper) {
|
||||
debugPath = new File(wrapper.getSaveFolder(), "Distant_Horizons");
|
||||
return new File(wrapper.getSaveFolder(), "Distant_Horizons");
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getRenderCacheFolder(ILevelWrapper level) {
|
||||
debugPath = new File(level.getSaveFolder(), "Distant_Horizons");
|
||||
return new File(new File(level.getSaveFolder(), "Distant_Horizons"), RENDER_CACHE_FOLDER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getDataFolder(ILevelWrapper level) {
|
||||
debugPath = new File(level.getSaveFolder(), "Distant_Horizons");
|
||||
return new File(new File(level.getSaveFolder(), "Distant_Horizons"), DATA_FOLDER);
|
||||
}
|
||||
|
||||
@@ -37,6 +42,6 @@ public class LocalSaveStructure extends SaveStructure {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "[LocalSave]";
|
||||
return "[LocalSave at ["+debugPath+"] ]";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class FileScanner {
|
||||
).map(Path::toFile).collect(Collectors.toList())
|
||||
);
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("Failed to scan and collect data files for {} in {}", level, save);
|
||||
LOGGER.error("Failed to scan and collect data files for {} in {}", level, save, e);
|
||||
}
|
||||
}
|
||||
if (renderSource != null) {
|
||||
@@ -38,7 +38,7 @@ public class FileScanner {
|
||||
).map(Path::toFile).collect(Collectors.toList())
|
||||
);
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("Failed to scan and collect data files for {} in {}", level, save);
|
||||
LOGGER.error("Failed to scan and collect data files for {} in {}", level, save, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe
|
||||
super(WorldEnvironment.Client_Server);
|
||||
saveStructure = new LocalSaveStructure();
|
||||
levels = new HashMap<>();
|
||||
LOGGER.info("Started DhWorld of type {}", environment);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -86,6 +87,7 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe
|
||||
level.close();
|
||||
}
|
||||
levels.clear();
|
||||
LOGGER.info("Closed DhWorld of type {}", environment);
|
||||
}
|
||||
|
||||
public void enableRendering(ILevelWrapper wrapper) {
|
||||
|
||||
@@ -25,6 +25,7 @@ public class DhClientWorld extends DhWorld implements IClientWorld {
|
||||
super(WorldEnvironment.Client_Only);
|
||||
saveStructure = new ClientOnlySaveStructure();
|
||||
levels = new HashMap<>();
|
||||
LOGGER.info("Started DhWorld of type {}", environment);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -81,5 +82,6 @@ public class DhClientWorld extends DhWorld implements IClientWorld {
|
||||
level.close();
|
||||
}
|
||||
levels.clear();
|
||||
LOGGER.info("Closed DhWorld of type {}", environment);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ public class DhServerWorld extends DhWorld implements IServerWorld {
|
||||
super(WorldEnvironment.Server_Only);
|
||||
saveStructure = new LocalSaveStructure();
|
||||
levels = new HashMap<>();
|
||||
LOGGER.info("Started DhWorld of type {}", environment);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,6 +64,7 @@ public class DhServerWorld extends DhWorld implements IServerWorld {
|
||||
level.close();
|
||||
}
|
||||
levels.clear();
|
||||
LOGGER.info("Closed DhWorld of type {}", environment);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.seibel.lod.core.config.types.AbstractConfigType;
|
||||
import com.seibel.lod.core.config.types.ConfigEntry;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftSharedWrapper;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
@@ -23,7 +24,7 @@ import java.nio.file.Path;
|
||||
* @version 2022-5-26
|
||||
*/
|
||||
public class ConfigFileHandling {
|
||||
public static final Path ConfigPath = SingletonHandler.get(IMinecraftClientWrapper.class).getGameDirectory().toPath().resolve("config").resolve(ModInfo.NAME+".toml");
|
||||
public static final Path ConfigPath = SingletonHandler.get(IMinecraftSharedWrapper.class).getInstallationDirectory().toPath().resolve("config").resolve(ModInfo.NAME+".toml");
|
||||
|
||||
/** Saves the config to the file */
|
||||
public static void saveToFile() {
|
||||
|
||||
+4
-1
@@ -70,7 +70,10 @@ public class SingletonHandler
|
||||
|
||||
return foundObject;
|
||||
}
|
||||
|
||||
public static <T> T getOrNull(Class<T> interfaceClass) throws ClassCastException
|
||||
{
|
||||
return dependencyHandler.get(interfaceClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* Should only be called after all Binds have been done.
|
||||
|
||||
@@ -41,8 +41,6 @@ public class ColorUtil
|
||||
|
||||
public static final int RED = rgbToInt(255,0,0);
|
||||
|
||||
private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class);
|
||||
|
||||
public static int rgbToInt(int red, int green, int blue)
|
||||
{
|
||||
return (0xFF << 24) | (red << 16) | (green << 8) | blue;
|
||||
|
||||
@@ -41,8 +41,11 @@ import com.seibel.lod.core.wrapperInterfaces.IVersionConstants;
|
||||
import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftSharedWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
|
||||
/**
|
||||
* This class holds methods and constants that may be used in multiple places.
|
||||
@@ -52,11 +55,8 @@ import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
*/
|
||||
public class LodUtil
|
||||
{
|
||||
private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class);
|
||||
private static final IMinecraftRenderWrapper MC_RENDER = SingletonHandler.get(IMinecraftRenderWrapper.class);
|
||||
private static final IWrapperFactory FACTORY = SingletonHandler.get(IWrapperFactory.class);
|
||||
private static final IReflectionHandler REFLECTION_HANDLER = SingletonHandler.get(IReflectionHandler.class);
|
||||
private static final IVersionConstants VERSION_CONSTANTS = SingletonHandler.get(IVersionConstants.class);
|
||||
private static final IMinecraftClientWrapper MC_CLIENT = SingletonHandler.getOrNull(IMinecraftClientWrapper.class);
|
||||
private static final IMinecraftRenderWrapper MC_RENDER = SingletonHandler.getOrNull(IMinecraftRenderWrapper.class);
|
||||
|
||||
/**
|
||||
* Vanilla render distances less than or equal to this will not allow partial
|
||||
@@ -167,10 +167,10 @@ public class LodUtil
|
||||
*/
|
||||
public static ILevelWrapper getServerWorldFromDimension(IDimensionTypeWrapper newDimension)
|
||||
{
|
||||
if(!MC.hasSinglePlayerServer())
|
||||
if(!MC_CLIENT.hasSinglePlayerServer())
|
||||
return null;
|
||||
|
||||
Iterable<ILevelWrapper> worlds = MC.getAllServerWorlds();
|
||||
Iterable<ILevelWrapper> worlds = MC_CLIENT.getAllServerWorlds();
|
||||
ILevelWrapper returnWorld = null;
|
||||
|
||||
for (ILevelWrapper world : worlds)
|
||||
@@ -202,7 +202,7 @@ public class LodUtil
|
||||
*/
|
||||
public static String getWorldID(ILevelWrapper world)
|
||||
{
|
||||
if (MC.hasSinglePlayerServer())
|
||||
if (MC_CLIENT.hasSinglePlayerServer())
|
||||
{
|
||||
// chop off the dimension ID as it is not needed/wanted
|
||||
String dimId = getDimensionIDFromWorld(world);
|
||||
@@ -231,7 +231,7 @@ public class LodUtil
|
||||
@Deprecated // FIXME: There are soooo many duplicated methods doing the same thing everywhere
|
||||
public static String getDimensionIDFromWorld(ILevelWrapper world)
|
||||
{
|
||||
if (MC.hasSinglePlayerServer())
|
||||
if (MC_CLIENT.hasSinglePlayerServer())
|
||||
{
|
||||
// this will return the world save location
|
||||
// and the dimension folder
|
||||
@@ -254,7 +254,7 @@ public class LodUtil
|
||||
public static String getServerFolderName()
|
||||
{
|
||||
// parse the current server's IP
|
||||
ParsedIp parsedIp = new ParsedIp(MC.getCurrentServerIp());
|
||||
ParsedIp parsedIp = new ParsedIp(MC_CLIENT.getCurrentServerIp());
|
||||
String serverIpCleaned = parsedIp.ip.replaceAll(INVALID_FILE_CHARACTERS_REGEX, "");
|
||||
String serverPortCleaned = parsedIp.port != null ? parsedIp.port.replaceAll(INVALID_FILE_CHARACTERS_REGEX, "") : "";
|
||||
|
||||
@@ -276,8 +276,8 @@ public class LodUtil
|
||||
}
|
||||
|
||||
|
||||
String serverName = MC.getCurrentServerName().replaceAll(INVALID_FILE_CHARACTERS_REGEX, "");
|
||||
String serverMcVersion = MC.getCurrentServerVersion().replaceAll(INVALID_FILE_CHARACTERS_REGEX, "");
|
||||
String serverName = MC_CLIENT.getCurrentServerName().replaceAll(INVALID_FILE_CHARACTERS_REGEX, "");
|
||||
String serverMcVersion = MC_CLIENT.getCurrentServerVersion().replaceAll(INVALID_FILE_CHARACTERS_REGEX, "");
|
||||
|
||||
// generate the folder name
|
||||
String folderName = "";
|
||||
@@ -387,8 +387,8 @@ public class LodUtil
|
||||
return new Pos2D(pos.getX(), pos.getZ());
|
||||
}
|
||||
},
|
||||
MC.getPlayerChunkPos().getX() - renderDist,
|
||||
MC.getPlayerChunkPos().getZ() - renderDist,
|
||||
MC_CLIENT.getPlayerChunkPos().getX() - renderDist,
|
||||
MC_CLIENT.getPlayerChunkPos().getZ() - renderDist,
|
||||
renderDist * 2 + 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user