Fix forge wrong proxies, fix generator shutdown, fix batch gen incorrect timeout,
This commit is contained in:
@@ -38,6 +38,8 @@ public interface LodRenderSource {
|
||||
|
||||
byte getRenderVersion();
|
||||
|
||||
void markInvalid();
|
||||
|
||||
/**
|
||||
* Whether this object is still valid. If not, a new one should be created.
|
||||
*/
|
||||
|
||||
@@ -56,6 +56,7 @@ public class PlaceHolderRenderSource implements LodRenderSource {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markInvalid() {
|
||||
isValid = false;
|
||||
}
|
||||
|
||||
@@ -316,6 +316,9 @@ public class ColumnRenderSource implements LodRenderSource, IColumnDatatype {
|
||||
@Override
|
||||
public void update(ChunkSizedData chunkData) {
|
||||
//TODO Update render data directly
|
||||
|
||||
//TEMP DEUBG
|
||||
isValid = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -323,8 +326,14 @@ public class ColumnRenderSource implements LodRenderSource, IColumnDatatype {
|
||||
return LATEST_VERSION;
|
||||
}
|
||||
|
||||
private boolean isValid = true;
|
||||
@Override
|
||||
public void markInvalid() {
|
||||
isValid = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid() {
|
||||
return true; // For now, this is always valid.
|
||||
return isValid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,6 +190,9 @@ public class ColumnRenderBuffer extends RenderBuffer {
|
||||
LodQuadBuilder builder = new LodQuadBuilder(true,
|
||||
(short) (skyLightCullingBelow - clientLevel.getMinY()));
|
||||
makeLodRenderData(builder, data, adjData);
|
||||
if (builder.getCurrentQuadsCount() > 0) {
|
||||
LOGGER.info("her");
|
||||
}
|
||||
EVENT_LOGGER.trace("RenderRegion end QuadBuild @ {}", data.sectionPos);
|
||||
return builder;
|
||||
} catch (UncheckedInterruptedException e) {
|
||||
|
||||
+9
-6
@@ -11,6 +11,7 @@ import com.seibel.lod.core.a7.level.IClientLevel;
|
||||
import com.seibel.lod.core.a7.pos.DhSectionPos;
|
||||
import com.seibel.lod.core.config.Config;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.lod.core.objects.DHBlockPos;
|
||||
import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory;
|
||||
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
@@ -31,11 +32,13 @@ public class FullToColumnTransformer {
|
||||
final ColumnRenderSource columnSource = new ColumnRenderSource(pos, vertSize, level.getMinY());
|
||||
|
||||
if (dataDetail == columnSource.getDataDetail()) {
|
||||
int baseX = pos.getCorner().getCorner().x;
|
||||
int baseZ = pos.getCorner().getCorner().z;
|
||||
for (int x = 0; x < pos.getWidth(dataDetail).value; x++) {
|
||||
for (int z = 0; z < pos.getWidth(dataDetail).value; z++) {
|
||||
ColumnArrayView columnArrayView = columnSource.getVerticalDataView(x, z);
|
||||
SingleFullArrayView fullArrayView = data.get(x, z);
|
||||
convertColumnData(level, columnArrayView, fullArrayView);
|
||||
convertColumnData(level, baseX + x, baseZ + z, columnArrayView, fullArrayView);
|
||||
}
|
||||
}
|
||||
// } else if (dataDetail == 0 && columnSource.getDataDetail() > dataDetail) {
|
||||
@@ -60,7 +63,7 @@ public class FullToColumnTransformer {
|
||||
return columnSource;
|
||||
}
|
||||
|
||||
private static void convertColumnData(IClientLevel level, ColumnArrayView columnArrayView, SingleFullArrayView fullArrayView) {
|
||||
private static void convertColumnData(IClientLevel level, int blockX, int blockZ, ColumnArrayView columnArrayView, SingleFullArrayView fullArrayView) {
|
||||
if (!fullArrayView.doesItExist()) return;
|
||||
// TODO: Set gen mode
|
||||
int genModeValue = 1;
|
||||
@@ -69,14 +72,14 @@ public class FullToColumnTransformer {
|
||||
|
||||
if (dataTotalLength > columnArrayView.verticalSize()) {
|
||||
ColumnArrayView totalColumnData = new ColumnArrayView(new long[dataTotalLength], dataTotalLength, 0, dataTotalLength);
|
||||
iterateAndConvert(level, genModeValue, totalColumnData, fullArrayView);
|
||||
iterateAndConvert(level, blockX, blockZ, genModeValue, totalColumnData, fullArrayView);
|
||||
columnArrayView.changeVerticalSizeFrom(totalColumnData);
|
||||
} else {
|
||||
iterateAndConvert(level, genModeValue, columnArrayView, fullArrayView); //Directly use the arrayView since it fits.
|
||||
iterateAndConvert(level, blockX, blockZ, genModeValue, columnArrayView, fullArrayView); //Directly use the arrayView since it fits.
|
||||
}
|
||||
}
|
||||
|
||||
private static void iterateAndConvert(IClientLevel level, int genMode, ColumnArrayView column, SingleFullArrayView data) {
|
||||
private static void iterateAndConvert(IClientLevel level, int blockX, int blockZ, int genMode, ColumnArrayView column, SingleFullArrayView data) {
|
||||
IdBiomeBlockStateMap mapping = data.getMapping();
|
||||
boolean isVoid = true;
|
||||
for (int i = 0; i < data.getSingleLength(); i++) {
|
||||
@@ -90,7 +93,7 @@ public class FullToColumnTransformer {
|
||||
IBlockStateWrapper block = entry.blockState;
|
||||
if (block.equals(AIR)) continue;
|
||||
isVoid = false;
|
||||
int color = level.computeBaseColor(biome, block);
|
||||
int color = level.computeBaseColor(new DHBlockPos(blockX, y + level.getMinY(), blockZ), biome, block);
|
||||
long columnData = ColumnFormat.createDataPoint(y + blockLength, y, color, light, genMode);
|
||||
column.set(i, columnData);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.seibel.lod.core.a7.datatype.full.FullDataSource;
|
||||
import com.seibel.lod.core.a7.pos.DhBlockPos2D;
|
||||
import com.seibel.lod.core.a7.pos.DhLodPos;
|
||||
import com.seibel.lod.core.a7.pos.DhSectionPos;
|
||||
import com.seibel.lod.core.a7.util.UncheckedInterruptedException;
|
||||
import com.seibel.lod.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.lod.core.objects.DHChunkPos;
|
||||
import com.seibel.lod.core.util.LodUtil;
|
||||
@@ -122,6 +123,8 @@ public class GenerationQueue implements PlaceHolderQueue {
|
||||
if (ex instanceof CompletionException) {
|
||||
ex = ex.getCause();
|
||||
}
|
||||
if (ex instanceof InterruptedException) return; // Ignore interrupted exceptions.
|
||||
if (ex instanceof UncheckedInterruptedException) return; // Ignore unchecked interrupted exceptions.
|
||||
logger.error("Error generating data for section {}", pos, ex);
|
||||
return;
|
||||
}
|
||||
@@ -164,6 +167,11 @@ public class GenerationQueue implements PlaceHolderQueue {
|
||||
// }
|
||||
// }
|
||||
}).exceptionally(ex -> {
|
||||
if (ex instanceof CompletionException) {
|
||||
ex = ex.getCause();
|
||||
}
|
||||
if (ex instanceof InterruptedException) return null; // Ignore interrupted exceptions.
|
||||
if (ex instanceof UncheckedInterruptedException) return null; // Ignore unchecked interrupted exceptions.
|
||||
logger.error("Error generating data for {} by {} chunks (at {}) with data detail {}",
|
||||
perCallChunksWidth, perCallChunksWidth, subCallChunkPosMin, dataDetail, ex);
|
||||
return null;
|
||||
|
||||
@@ -10,12 +10,14 @@ import com.seibel.lod.core.a7.save.structure.ClientOnlySaveStructure;
|
||||
import com.seibel.lod.core.config.Config;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.lod.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.lod.core.objects.DHBlockPos;
|
||||
import com.seibel.lod.core.objects.math.Mat4f;
|
||||
import com.seibel.lod.core.a7.render.a7LodRenderer;
|
||||
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -28,11 +30,11 @@ public class DhClientLevel implements IClientLevel {
|
||||
public final RemoteDataFileHandler dataFileHandler;
|
||||
public final RenderFileHandler renderFileHandler;
|
||||
public final RenderBufferHandler renderBufferHandler; //TODO: Should this be owned by renderer?
|
||||
public final ILevelWrapper level;
|
||||
public final IClientLevelWrapper level;
|
||||
public a7LodRenderer renderer = null;
|
||||
public LodQuadTree tree;
|
||||
|
||||
public DhClientLevel(ClientOnlySaveStructure save, ILevelWrapper level) {
|
||||
public DhClientLevel(ClientOnlySaveStructure save, IClientLevelWrapper level) {
|
||||
this.save = save;
|
||||
save.getDataFolder(level).mkdirs();
|
||||
save.getRenderCacheFolder(level).mkdirs();
|
||||
@@ -51,11 +53,6 @@ public class DhClientLevel implements IClientLevel {
|
||||
//TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
public ILevelWrapper getLevelWrapper() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clientTick() {
|
||||
tree.tick(new DhBlockPos2D(MC_CLIENT.getPlayerBlockPos()));
|
||||
@@ -76,10 +73,15 @@ public class DhClientLevel implements IClientLevel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int computeBaseColor(IBiomeWrapper biome, IBlockStateWrapper block) {
|
||||
public int computeBaseColor(DHBlockPos pos, IBiomeWrapper biome, IBlockStateWrapper block) {
|
||||
return 0; //TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
public IClientLevelWrapper getClientLevelWrapper() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMinY() {
|
||||
return level.getMinHeight();
|
||||
|
||||
@@ -13,13 +13,16 @@ import com.seibel.lod.core.builders.worldGeneration.BatchGenerator;
|
||||
import com.seibel.lod.core.config.Config;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.lod.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.lod.core.objects.DHBlockPos;
|
||||
import com.seibel.lod.core.objects.math.Mat4f;
|
||||
import com.seibel.lod.core.a7.render.a7LodRenderer;
|
||||
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -32,17 +35,19 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
public GenerationQueue generationQueue = null;
|
||||
public RenderFileHandler renderFileHandler = null;
|
||||
public RenderBufferHandler renderBufferHandler = null; //TODO: Should this be owned by renderer?
|
||||
public final ILevelWrapper level;
|
||||
public final IServerLevelWrapper serverLevel;
|
||||
public IClientLevelWrapper clientLevel;
|
||||
public a7LodRenderer renderer = null;
|
||||
public LodQuadTree tree = null;
|
||||
public IGenerator worldGenerator = null;
|
||||
|
||||
public DhClientServerLevel(LocalSaveStructure save, ILevelWrapper level) {
|
||||
this.level = level;
|
||||
public DhClientServerLevel(LocalSaveStructure save, IServerLevelWrapper level) {
|
||||
this.serverLevel = level;
|
||||
this.save = save;
|
||||
save.getDataFolder(level).mkdirs();
|
||||
save.getRenderCacheFolder(level).mkdirs();
|
||||
dataFileHandler = new LocalDataFileHandler(this, save.getDataFolder(level));
|
||||
FileScanner.scanFile(save, serverLevel, dataFileHandler, null);
|
||||
LOGGER.info("Started DHLevel for {} with saves at {}", level, save);
|
||||
}
|
||||
|
||||
@@ -57,15 +62,16 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
public void serverTick() {
|
||||
//TODO Update network packet and stuff or state or etc..
|
||||
}
|
||||
public void startRenderer() {
|
||||
LOGGER.info("Starting renderer for {}", level);
|
||||
if (renderBufferHandler != null) {
|
||||
LOGGER.warn("Tried to call startRenderer() on the clientServerLevel {} when renderer is already setup!", level);
|
||||
public void startRenderer(IClientLevelWrapper clientLevel) {
|
||||
LOGGER.info("Starting renderer for {}", this);
|
||||
if (renderBufferHandler != null || this.clientLevel != null) {
|
||||
LOGGER.warn("Tried to call startRenderer() on {} when renderer is already setup!", this);
|
||||
return;
|
||||
}
|
||||
this.clientLevel = clientLevel;
|
||||
|
||||
// FIXME: This A need B and B need A messes needs to be reworked!
|
||||
renderFileHandler = new RenderFileHandler(dataFileHandler, this, save.getRenderCacheFolder(level));
|
||||
renderFileHandler = new RenderFileHandler(dataFileHandler, this, save.getRenderCacheFolder(serverLevel));
|
||||
final RenderFileHandler f_renderFileHandler = renderFileHandler;
|
||||
generationQueue = new GenerationQueue(f_renderFileHandler::write);
|
||||
renderFileHandler.setPlaceHolderQueue(generationQueue);
|
||||
@@ -73,13 +79,13 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
tree = new LodQuadTree(this, Config.Client.Graphics.Quality.lodChunkRenderDistance.get()*16,
|
||||
MC_CLIENT.getPlayerBlockPos().x, MC_CLIENT.getPlayerBlockPos().z, renderFileHandler);
|
||||
renderBufferHandler = new RenderBufferHandler(tree);
|
||||
FileScanner.scanFile(save, level, dataFileHandler, renderFileHandler);
|
||||
FileScanner.scanFile(save, serverLevel, null, renderFileHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Mat4f mcModelViewMatrix, Mat4f mcProjectionMatrix, float partialTicks, IProfilerWrapper profiler) {
|
||||
if (renderBufferHandler == null) {
|
||||
LOGGER.error("Tried to call render() on the clientServerLevel {} when renderer has not been started!", level);
|
||||
LOGGER.error("Tried to call render() on {} when renderer has not been started!", this);
|
||||
return;
|
||||
}
|
||||
if (renderer == null) {
|
||||
@@ -89,9 +95,9 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
}
|
||||
|
||||
public void stopRenderer() {
|
||||
LOGGER.info("Stopping renderer for {}", level);
|
||||
LOGGER.info("Stopping renderer for {}", this);
|
||||
if (renderBufferHandler == null) {
|
||||
LOGGER.warn("Tried to call stopRenderer() on the clientServerLevel {} when renderer is already closed!", level);
|
||||
LOGGER.warn("Tried to call stopRenderer() on {} when renderer is already closed!", this);
|
||||
return;
|
||||
}
|
||||
renderBufferHandler.close();
|
||||
@@ -109,8 +115,13 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int computeBaseColor(IBiomeWrapper biome, IBlockStateWrapper block) {
|
||||
return 0; //TODO
|
||||
public int computeBaseColor(DHBlockPos pos, IBiomeWrapper biome, IBlockStateWrapper block) {
|
||||
return clientLevel.computeBaseColor(pos, biome, block);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IClientLevelWrapper getClientLevelWrapper() {
|
||||
return clientLevel;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -120,7 +131,7 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
|
||||
@Override
|
||||
public int getMinY() {
|
||||
return level.getMinHeight();
|
||||
return serverLevel.getMinHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -137,7 +148,7 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
if (renderBufferHandler != null) renderBufferHandler.close();
|
||||
if (renderFileHandler != null) renderFileHandler.close();
|
||||
dataFileHandler.close();
|
||||
LOGGER.info("Closed DHLevel for {}", level);
|
||||
LOGGER.info("Closed {}", this);
|
||||
}
|
||||
|
||||
|
||||
@@ -155,7 +166,7 @@ public class DhClientServerLevel implements IClientLevel, IServerLevel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ILevelWrapper getLevelWrapper() {
|
||||
return level;
|
||||
public IServerLevelWrapper getServerLevelWrapper() {
|
||||
return serverLevel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.seibel.lod.core.a7.save.structure.LocalSaveStructure;
|
||||
import com.seibel.lod.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.lod.core.objects.DHChunkPos;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -18,9 +19,9 @@ public class DhServerLevel implements IServerLevel {
|
||||
|
||||
public final LocalSaveStructure save;
|
||||
public final LocalDataFileHandler dataFileHandler;
|
||||
public final ILevelWrapper level;
|
||||
public final IServerLevelWrapper level;
|
||||
|
||||
public DhServerLevel(LocalSaveStructure save, ILevelWrapper level) {
|
||||
public DhServerLevel(LocalSaveStructure save, IServerLevelWrapper level) {
|
||||
this.save = save;
|
||||
this.level = level;
|
||||
save.getDataFolder(level).mkdirs();
|
||||
@@ -58,7 +59,7 @@ public class DhServerLevel implements IServerLevel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ILevelWrapper getLevelWrapper() {
|
||||
public IServerLevelWrapper getServerLevelWrapper() {
|
||||
return level;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.seibel.lod.core.a7.level;
|
||||
|
||||
import com.seibel.lod.core.a7.render.RenderBufferHandler;
|
||||
import com.seibel.lod.core.objects.DHBlockPos;
|
||||
import com.seibel.lod.core.objects.math.Mat4f;
|
||||
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
|
||||
public interface IClientLevel extends ILevel {
|
||||
void clientTick();
|
||||
@@ -13,5 +15,7 @@ public interface IClientLevel extends ILevel {
|
||||
|
||||
RenderBufferHandler getRenderBufferHandler();
|
||||
|
||||
int computeBaseColor(IBiomeWrapper biome, IBlockStateWrapper block);
|
||||
int computeBaseColor(DHBlockPos pos, IBiomeWrapper biome, IBlockStateWrapper block);
|
||||
|
||||
IClientLevelWrapper getClientLevelWrapper();
|
||||
}
|
||||
|
||||
@@ -9,6 +9,4 @@ public interface ILevel extends AutoCloseable {
|
||||
CompletableFuture<Void> save();
|
||||
|
||||
void dumpRamUsage();
|
||||
|
||||
ILevelWrapper getLevelWrapper();
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.seibel.lod.core.a7.level;
|
||||
|
||||
import com.seibel.lod.core.a7.datatype.full.ChunkSizedData;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
|
||||
public interface IServerLevel extends ILevel {
|
||||
void serverTick();
|
||||
void doWorldGen();
|
||||
|
||||
IServerLevelWrapper getServerLevelWrapper();
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.seibel.lod.core.a7.save.structure;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftSharedWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@@ -17,20 +18,23 @@ public class LocalSaveStructure extends SaveStructure {
|
||||
|
||||
@Override
|
||||
public File tryGetLevelFolder(ILevelWrapper wrapper) {
|
||||
debugPath = new File(wrapper.getSaveFolder(), "Distant_Horizons");
|
||||
return new File(wrapper.getSaveFolder(), "Distant_Horizons");
|
||||
IServerLevelWrapper serverSide = (IServerLevelWrapper) wrapper;
|
||||
debugPath = new File(serverSide.getSaveFolder(), "Distant_Horizons");
|
||||
return new File(serverSide.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);
|
||||
IServerLevelWrapper serverSide = (IServerLevelWrapper) level;
|
||||
debugPath = new File(serverSide.getSaveFolder(), "Distant_Horizons");
|
||||
return new File(new File(serverSide.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);
|
||||
IServerLevelWrapper serverSide = (IServerLevelWrapper) level;
|
||||
debugPath = new File(serverSide.getSaveFolder(), "Distant_Horizons");
|
||||
return new File(new File(serverSide.getSaveFolder(), "Distant_Horizons"), DATA_FOLDER);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,9 @@ import com.seibel.lod.core.a7.save.structure.LocalSaveStructure;
|
||||
import com.seibel.lod.core.config.Config;
|
||||
import com.seibel.lod.core.util.EventLoop;
|
||||
import com.seibel.lod.core.util.LodUtil;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
@@ -29,11 +31,23 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe
|
||||
|
||||
@Override
|
||||
public DhClientServerLevel getOrLoadLevel(ILevelWrapper wrapper) {
|
||||
return levels.computeIfAbsent(wrapper, (w) -> {
|
||||
File levelFile = saveStructure.tryGetLevelFolder(w);
|
||||
LodUtil.assertTrue(levelFile != null);
|
||||
return new DhClientServerLevel(saveStructure, w);
|
||||
});
|
||||
if (wrapper instanceof IServerLevelWrapper) {
|
||||
return levels.computeIfAbsent(wrapper, (w) -> {
|
||||
File levelFile = saveStructure.tryGetLevelFolder(w);
|
||||
LodUtil.assertTrue(levelFile != null);
|
||||
return new DhClientServerLevel(saveStructure, (IServerLevelWrapper) w);
|
||||
});
|
||||
} else {
|
||||
return levels.computeIfAbsent(wrapper, (w) -> {
|
||||
IClientLevelWrapper clientSide = (IClientLevelWrapper) w;
|
||||
IServerLevelWrapper serverSide = clientSide.tryGetServerSideWrapper();
|
||||
LodUtil.assertTrue(serverSide != null);
|
||||
DhClientServerLevel level = levels.get(serverSide);
|
||||
if (level==null) return null;
|
||||
level.startRenderer(clientSide);
|
||||
return level;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,8 +58,12 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe
|
||||
@Override
|
||||
public void unloadLevel(ILevelWrapper wrapper) {
|
||||
if (levels.containsKey(wrapper)) {
|
||||
LOGGER.info("Unloading level {} ", levels.get(wrapper));
|
||||
levels.remove(wrapper).close();
|
||||
if (wrapper instanceof IServerLevelWrapper) {
|
||||
LOGGER.info("Unloading level {} ", levels.get(wrapper));
|
||||
levels.remove(wrapper).close();
|
||||
} else {
|
||||
levels.remove(wrapper).stopRenderer(); // Ignore resource warning. The level obj is referenced elsewhere.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,21 +103,11 @@ public class DhClientServerWorld extends DhWorld implements IClientWorld, IServe
|
||||
public void close() {
|
||||
saveAndFlush().join();
|
||||
for (DhClientServerLevel level : levels.values()) {
|
||||
LOGGER.info("Unloading level for world " + level.level.getDimensionType().getDimensionName());
|
||||
LOGGER.info("Unloading level " + level.serverLevel.getDimensionType().getDimensionName());
|
||||
level.close();
|
||||
}
|
||||
levels.clear();
|
||||
LOGGER.info("Closed DhWorld of type {}", environment);
|
||||
}
|
||||
|
||||
public void enableRendering(ILevelWrapper wrapper) {
|
||||
DhClientServerLevel level = levels.get(wrapper);
|
||||
if (level==null) return;
|
||||
level.startRenderer();
|
||||
}
|
||||
public void disableRendering(ILevelWrapper wrapper) {
|
||||
DhClientServerLevel level = levels.get(wrapper);
|
||||
if (level==null) return;
|
||||
level.stopRenderer();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.seibel.lod.core.config.Config;
|
||||
import com.seibel.lod.core.util.DetailDistanceUtil;
|
||||
import com.seibel.lod.core.util.EventLoop;
|
||||
import com.seibel.lod.core.util.LodUtil;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
|
||||
import java.io.File;
|
||||
@@ -16,7 +17,7 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
public class DhClientWorld extends DhWorld implements IClientWorld {
|
||||
private final HashMap<ILevelWrapper, DhClientLevel> levels;
|
||||
private final HashMap<IClientLevelWrapper, DhClientLevel> levels;
|
||||
public final ClientOnlySaveStructure saveStructure;
|
||||
public ExecutorService dhTickerThread = LodUtil.makeSingleThreadPool("DHTickerThread", 2);
|
||||
public EventLoop eventLoop = new EventLoop(dhTickerThread, this::_clientTick);
|
||||
@@ -30,7 +31,9 @@ public class DhClientWorld extends DhWorld implements IClientWorld {
|
||||
|
||||
@Override
|
||||
public DhClientLevel getOrLoadLevel(ILevelWrapper wrapper) {
|
||||
return levels.computeIfAbsent(wrapper, (w) -> {
|
||||
if (!(wrapper instanceof IClientLevelWrapper)) return null;
|
||||
|
||||
return levels.computeIfAbsent((IClientLevelWrapper) wrapper, (w) -> {
|
||||
File level = saveStructure.tryGetLevelFolder(wrapper);
|
||||
if (level == null) return null;
|
||||
return new DhClientLevel(saveStructure, w);
|
||||
@@ -39,11 +42,13 @@ public class DhClientWorld extends DhWorld implements IClientWorld {
|
||||
|
||||
@Override
|
||||
public DhClientLevel getLevel(ILevelWrapper wrapper) {
|
||||
if (!(wrapper instanceof IClientLevelWrapper)) return null;
|
||||
return levels.get(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadLevel(ILevelWrapper wrapper) {
|
||||
if (!(wrapper instanceof IClientLevelWrapper)) return;
|
||||
if (levels.containsKey(wrapper)) {
|
||||
LOGGER.info("Unloading level {} ", levels.get(wrapper));
|
||||
levels.remove(wrapper).close();
|
||||
@@ -77,7 +82,7 @@ public class DhClientWorld extends DhWorld implements IClientWorld {
|
||||
public void close() {
|
||||
saveAndFlush().join();
|
||||
for (DhClientLevel level : levels.values()) {
|
||||
LOGGER.info("Unloading level for world " + level.level.getDimensionType().getDimensionName());
|
||||
LOGGER.info("Unloading level " + level.level.getDimensionType().getDimensionName());
|
||||
level.close();
|
||||
}
|
||||
levels.clear();
|
||||
|
||||
@@ -4,13 +4,14 @@ import com.seibel.lod.core.a7.level.DhServerLevel;
|
||||
import com.seibel.lod.core.a7.save.structure.LocalSaveStructure;
|
||||
import com.seibel.lod.core.util.LodUtil;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class DhServerWorld extends DhWorld implements IServerWorld {
|
||||
private final HashMap<ILevelWrapper, DhServerLevel> levels;
|
||||
private final HashMap<IServerLevelWrapper, DhServerLevel> levels;
|
||||
public final LocalSaveStructure saveStructure;
|
||||
|
||||
public DhServerWorld() {
|
||||
@@ -22,7 +23,8 @@ public class DhServerWorld extends DhWorld implements IServerWorld {
|
||||
|
||||
@Override
|
||||
public DhServerLevel getOrLoadLevel(ILevelWrapper wrapper) {
|
||||
return levels.computeIfAbsent(wrapper, (w) -> {
|
||||
if (!(wrapper instanceof IServerLevelWrapper)) return null;
|
||||
return levels.computeIfAbsent((IServerLevelWrapper) wrapper, (w) -> {
|
||||
File levelFile = saveStructure.tryGetLevelFolder(wrapper);
|
||||
LodUtil.assertTrue(levelFile != null);
|
||||
return new DhServerLevel(saveStructure, w);
|
||||
@@ -31,11 +33,13 @@ public class DhServerWorld extends DhWorld implements IServerWorld {
|
||||
|
||||
@Override
|
||||
public DhServerLevel getLevel(ILevelWrapper wrapper) {
|
||||
if (!(wrapper instanceof IServerLevelWrapper)) return null;
|
||||
return levels.get(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadLevel(ILevelWrapper wrapper) {
|
||||
if (!(wrapper instanceof IServerLevelWrapper)) return;
|
||||
if (levels.containsKey(wrapper)) {
|
||||
LOGGER.info("Unloading level {} ", levels.get(wrapper));
|
||||
levels.remove(wrapper).close();
|
||||
@@ -59,7 +63,7 @@ public class DhServerWorld extends DhWorld implements IServerWorld {
|
||||
@Override
|
||||
public void close() {
|
||||
for (DhServerLevel level : levels.values()) {
|
||||
LOGGER.info("Unloading level for world " + level.level.getDimensionType().getDimensionName());
|
||||
LOGGER.info("Unloading level " + level.level.getDimensionType().getDimensionName());
|
||||
level.close();
|
||||
}
|
||||
levels.clear();
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.minecraft.IProfilerWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import org.apache.logging.log4j.Level;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
@@ -118,35 +119,31 @@ public class ClientApi
|
||||
SharedApi.currentWorld = null;
|
||||
}
|
||||
|
||||
public void clientChunkLoadEvent(IChunkWrapper chunk, ILevelWrapper level)
|
||||
public void clientChunkLoadEvent(IChunkWrapper chunk, IClientLevelWrapper level)
|
||||
{
|
||||
if (SharedApi.getEnvironment() == WorldEnvironment.Client_Only) {
|
||||
//TODO: Implement
|
||||
}
|
||||
}
|
||||
public void clientChunkSaveEvent(IChunkWrapper chunk, ILevelWrapper level)
|
||||
public void clientChunkSaveEvent(IChunkWrapper chunk, IClientLevelWrapper level)
|
||||
{
|
||||
if (SharedApi.getEnvironment() == WorldEnvironment.Client_Only) {
|
||||
//TODO: Implement
|
||||
}
|
||||
}
|
||||
|
||||
public void clientLevelUnloadEvent(ILevelWrapper level)
|
||||
public void clientLevelUnloadEvent(IClientLevelWrapper level)
|
||||
{
|
||||
if (ENABLE_EVENT_LOGGING) LOGGER.info("Client level {} unloading.", level);
|
||||
if (SharedApi.currentWorld instanceof DhClientServerWorld) {
|
||||
((DhClientServerWorld)SharedApi.currentWorld).disableRendering(level);
|
||||
} else if (SharedApi.getEnvironment() == WorldEnvironment.Client_Only) {
|
||||
if (SharedApi.currentWorld != null) {
|
||||
SharedApi.currentWorld.unloadLevel(level);
|
||||
}
|
||||
}
|
||||
public void clientLevelLoadEvent(ILevelWrapper level)
|
||||
public void clientLevelLoadEvent(IClientLevelWrapper level)
|
||||
{
|
||||
if (ENABLE_EVENT_LOGGING) LOGGER.info("Client level {} loading.", level);
|
||||
if (SharedApi.currentWorld instanceof DhClientServerWorld) {
|
||||
((DhClientServerWorld)SharedApi.currentWorld).enableRendering(level);
|
||||
} else if (SharedApi.getEnvironment() == WorldEnvironment.Client_Only) {
|
||||
SharedApi.currentWorld.getOrLoadLevel(level); //TODO: This may need to be delayed to after player enters the level
|
||||
if (SharedApi.currentWorld != null) {
|
||||
SharedApi.currentWorld.getOrLoadLevel(level);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,7 +183,7 @@ public class ClientApi
|
||||
profiler.pop();
|
||||
}
|
||||
|
||||
public void renderLods(ILevelWrapper levelWrapper, Mat4f mcModelViewMatrix, Mat4f mcProjectionMatrix, float partialTicks)
|
||||
public void renderLods(IClientLevelWrapper levelWrapper, Mat4f mcModelViewMatrix, Mat4f mcProjectionMatrix, float partialTicks)
|
||||
{
|
||||
IProfilerWrapper profiler = MC.getProfiler();
|
||||
profiler.pop(); // get out of "terrain"
|
||||
|
||||
@@ -23,10 +23,12 @@ import com.seibel.lod.core.a7.world.DhClientServerWorld;
|
||||
import com.seibel.lod.core.a7.world.DhServerWorld;
|
||||
import com.seibel.lod.core.a7.world.IServerWorld;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.lod.core.logging.ConfigBasedLogger;
|
||||
import com.seibel.lod.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.lod.core.wrapperInterfaces.IVersionConstants;
|
||||
import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.lang.invoke.MethodHandles;
|
||||
@@ -42,7 +44,7 @@ public class ServerApi
|
||||
{
|
||||
public static final boolean ENABLE_STACK_DUMP_LOGGING = false;
|
||||
public static final ServerApi INSTANCE = new ServerApi();
|
||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
||||
public static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
||||
private static final IVersionConstants VERSION_CONSTANTS = SingletonInjector.INSTANCE.get(IVersionConstants.class);
|
||||
public static final boolean ENABLE_EVENT_LOGGING = true;
|
||||
|
||||
@@ -67,6 +69,9 @@ public class ServerApi
|
||||
}
|
||||
}
|
||||
}
|
||||
public void serverLevelTickEvent(IServerLevelWrapper level) {
|
||||
//TODO
|
||||
}
|
||||
|
||||
//TODO: rename to serverLoadEvent
|
||||
public void serverWorldLoadEvent(boolean isDedicatedEnvironment) {
|
||||
@@ -85,15 +90,15 @@ public class ServerApi
|
||||
SharedApi.currentWorld = null;
|
||||
}
|
||||
|
||||
public void serverLevelLoadEvent(ILevelWrapper world) {
|
||||
if (ENABLE_EVENT_LOGGING) LOGGER.info("Server Level {} loading", world);
|
||||
if (SharedApi.currentWorld instanceof IServerWorld)
|
||||
SharedApi.currentWorld.getOrLoadLevel(world);
|
||||
public void serverLevelLoadEvent(IServerLevelWrapper level) {
|
||||
if (ENABLE_EVENT_LOGGING) LOGGER.info("Server Level {} loading", level);
|
||||
if (SharedApi.currentWorld != null)
|
||||
SharedApi.currentWorld.getOrLoadLevel(level);
|
||||
}
|
||||
public void serverLevelUnloadEvent(ILevelWrapper world) {
|
||||
if (ENABLE_EVENT_LOGGING) LOGGER.info("Server Level {} unloading", world);
|
||||
if (SharedApi.currentWorld instanceof IServerWorld)
|
||||
SharedApi.currentWorld.unloadLevel(world);
|
||||
public void serverLevelUnloadEvent(IServerLevelWrapper level) {
|
||||
if (ENABLE_EVENT_LOGGING) LOGGER.info("Server Level {} unloading", level);
|
||||
if (SharedApi.currentWorld != null)
|
||||
SharedApi.currentWorld.unloadLevel(level);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
||||
@@ -27,6 +27,7 @@ package com.seibel.lod.core.enums;
|
||||
* @author James Seibel
|
||||
* @version 2022-7-13
|
||||
*/
|
||||
@Deprecated
|
||||
public enum ELevelType
|
||||
{
|
||||
SERVER_LEVEL,
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.Iterator;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import com.seibel.lod.core.a7.util.UncheckedInterruptedException;
|
||||
import com.seibel.lod.core.config.Config;
|
||||
import com.seibel.lod.core.enums.config.EServerFolderNameMode;
|
||||
import com.seibel.lod.core.enums.config.EVanillaOverdraw;
|
||||
@@ -191,61 +192,7 @@ public class LodUtil
|
||||
|
||||
return new DHRegionPos(relativePosX, relativePosZ);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* If on single player this will return the name of the user's
|
||||
* world, if in multiplayer it will return the server name, IP,
|
||||
* and game version.
|
||||
*/
|
||||
public static String getWorldID(ILevelWrapper world)
|
||||
{
|
||||
if (MC_CLIENT.hasSinglePlayerServer())
|
||||
{
|
||||
// chop off the dimension ID as it is not needed/wanted
|
||||
String dimId = getDimensionIDFromWorld(world);
|
||||
|
||||
// get the world name
|
||||
int saveIndex = dimId.indexOf("saves") + 1 + "saves".length();
|
||||
int slashIndex = dimId.indexOf(File.separatorChar, saveIndex);
|
||||
dimId = dimId.substring(saveIndex, slashIndex);
|
||||
return dimId;
|
||||
}
|
||||
else
|
||||
{
|
||||
return getServerFolderName();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* If on single player this will return the name of the user's
|
||||
* world and the dimensional save folder, if in multiplayer
|
||||
* it will return the server name, ip, game version, and dimension.<br>
|
||||
* <br>
|
||||
* This can be used to determine where to save files for a given
|
||||
* dimension.
|
||||
*/
|
||||
@Deprecated // FIXME: There are soooo many duplicated methods doing the same thing everywhere
|
||||
public static String getDimensionIDFromWorld(ILevelWrapper world)
|
||||
{
|
||||
if (MC_CLIENT.hasSinglePlayerServer())
|
||||
{
|
||||
// this will return the world save location
|
||||
// and the dimension folder
|
||||
|
||||
ILevelWrapper serverWorld = LodUtil.getServerWorldFromDimension(world.getDimensionType());
|
||||
if (serverWorld == null)
|
||||
throw new NullPointerException("getDimensionIDFromWorld wasn't able to get the WorldWrapper for the dimension " + world.getDimensionType().getDimensionName());
|
||||
|
||||
return serverWorld.getSaveFolder().toString();
|
||||
}
|
||||
else
|
||||
{
|
||||
return getServerFolderName() + File.separatorChar + "dim_" + world.getDimensionType().getDimensionName() + File.separatorChar;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** returns the server name, IP and game version. */
|
||||
@Deprecated // FIXME: There are soooo many duplicated methods doing the same thing everywhere
|
||||
// Cloned to a7 package's DHFileHandler
|
||||
@@ -421,10 +368,6 @@ public class LodUtil
|
||||
if (Thread.interrupted()) throw new InterruptedException();
|
||||
}
|
||||
|
||||
public static void checkInterruptsUnchecked() {
|
||||
if (Thread.interrupted()) throw new RuntimeException(new InterruptedException());
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a given string with params using log4j's MessageFormat
|
||||
*
|
||||
|
||||
+2
-26
@@ -51,8 +51,6 @@ public interface IMinecraftClientWrapper extends IBindable
|
||||
*/
|
||||
void clearFrameObjectCache();
|
||||
|
||||
|
||||
|
||||
//=================//
|
||||
// method wrappers //
|
||||
//=================//
|
||||
@@ -64,12 +62,6 @@ public interface IMinecraftClientWrapper extends IBindable
|
||||
String getCurrentServerName();
|
||||
String getCurrentServerIp();
|
||||
String getCurrentServerVersion();
|
||||
|
||||
/** Returns the dimension the player is currently in */
|
||||
IDimensionTypeWrapper getCurrentDimension();
|
||||
|
||||
@Deprecated // This should be moved to directly calling the function in core
|
||||
String getCurrentDimensionId();
|
||||
|
||||
//=============//
|
||||
// Simple gets //
|
||||
@@ -80,31 +72,17 @@ public interface IMinecraftClientWrapper extends IBindable
|
||||
DHBlockPos getPlayerBlockPos();
|
||||
|
||||
DHChunkPos getPlayerChunkPos();
|
||||
|
||||
/**
|
||||
* Attempts to get the ServerWorld for the dimension
|
||||
* the user is currently in.
|
||||
* @return null if no ServerWorld is available
|
||||
*/
|
||||
ILevelWrapper getWrappedServerWorld();
|
||||
|
||||
|
||||
@Deprecated
|
||||
ILevelWrapper getWrappedClientWorld();
|
||||
|
||||
File getGameDirectory();
|
||||
|
||||
IProfilerWrapper getProfiler();
|
||||
|
||||
float getSkyDarken(float partialTicks);
|
||||
|
||||
boolean connectedToServer();
|
||||
|
||||
int getPlayerSkylight();
|
||||
|
||||
/** Returns all worlds available to the server */
|
||||
ArrayList<ILevelWrapper> getAllServerWorlds();
|
||||
|
||||
|
||||
|
||||
void sendChatMessage(String string);
|
||||
|
||||
/**
|
||||
@@ -118,6 +96,4 @@ public interface IMinecraftClientWrapper extends IBindable
|
||||
void crashMinecraft(String errorMessage, Throwable exception);
|
||||
|
||||
Object getOptionsObject();
|
||||
|
||||
File getSinglePlayerServerFolder();
|
||||
}
|
||||
|
||||
@@ -27,16 +27,6 @@ import com.seibel.lod.core.handlers.dependencyInjection.IBindable;
|
||||
*/
|
||||
public interface IBiomeWrapper extends IBindable
|
||||
{
|
||||
/** Returns a color int for the given biome. */
|
||||
int getColorForBiome(int x, int z);
|
||||
|
||||
String getName();
|
||||
|
||||
int getGrassTint(int x, int z);
|
||||
|
||||
int getFolliageTint();
|
||||
|
||||
int getWaterTint();
|
||||
|
||||
String serialize();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.seibel.lod.core.wrapperInterfaces.world;
|
||||
|
||||
import com.seibel.lod.core.objects.DHBlockPos;
|
||||
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public interface IClientLevelWrapper extends ILevelWrapper {
|
||||
@Nullable
|
||||
IServerLevelWrapper tryGetServerSideWrapper();
|
||||
int computeBaseColor(DHBlockPos pos, IBiomeWrapper biome, IBlockStateWrapper blockState);
|
||||
}
|
||||
@@ -23,7 +23,9 @@ import java.io.File;
|
||||
|
||||
import com.seibel.lod.core.enums.ELevelType;
|
||||
import com.seibel.lod.core.handlers.dependencyInjection.IBindable;
|
||||
import com.seibel.lod.core.objects.DHBlockPos;
|
||||
import com.seibel.lod.core.objects.DHChunkPos;
|
||||
import com.seibel.lod.core.wrapperInterfaces.block.IBlockStateWrapper;
|
||||
import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;
|
||||
|
||||
/**
|
||||
@@ -36,8 +38,6 @@ public interface ILevelWrapper extends IBindable
|
||||
{
|
||||
IDimensionTypeWrapper getDimensionType();
|
||||
|
||||
ELevelType getLevelType();
|
||||
|
||||
int getBlockLight(int x, int y, int z);
|
||||
|
||||
int getSkyLight(int x, int y, int z);
|
||||
@@ -48,17 +48,16 @@ public interface ILevelWrapper extends IBindable
|
||||
|
||||
int getHeight();
|
||||
|
||||
int getSeaLevel();
|
||||
|
||||
default short getMinHeight()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** @throws UnsupportedOperationException if the WorldWrapper isn't for a ServerWorld */
|
||||
File getSaveFolder() throws UnsupportedOperationException;
|
||||
|
||||
default IChunkWrapper tryGetChunk(DHChunkPos pos) {return null;}
|
||||
|
||||
boolean hasChunkLoaded(int chunkX, int chunkZ);
|
||||
|
||||
IBlockStateWrapper getBlockState(DHBlockPos pos);
|
||||
IBiomeWrapper getBiome(DHBlockPos pos);
|
||||
Object unwrapLevel();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.seibel.lod.core.wrapperInterfaces.world;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
|
||||
public interface IServerLevelWrapper extends ILevelWrapper {
|
||||
@Nullable
|
||||
IClientLevelWrapper tryGetClientSideWrapper();
|
||||
|
||||
File getSaveFolder();
|
||||
}
|
||||
Reference in New Issue
Block a user