Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f67fb1758d | |||
| 506ba05b34 | |||
| 70be3f9364 | |||
| 3a01151137 | |||
| 197051747a | |||
| 45efeb96fa | |||
| e05dff3fb9 | |||
| 106d97e0a1 | |||
| 34412305d0 | |||
| 6a418de153 | |||
| 41c6b2936b | |||
| 97130d1535 | |||
| d61dcfaab6 | |||
| 3c3f1ef41b | |||
| ed1d6396fd | |||
| 518ec18362 | |||
| 5715cd9266 | |||
| 56953efabc | |||
| 351802de4c | |||
| f60e74c838 | |||
| 2007a6af24 | |||
| 4bc199fe14 | |||
| bcd9a0da2c | |||
| 50c97e3ca3 | |||
| 7539cb94d4 | |||
| 3a20329096 | |||
| 702002c540 | |||
| 7f790e2c9c | |||
| b3f8b03fdf | |||
| c84ee721e3 | |||
| c46c056980 |
+1
-1
@@ -248,7 +248,7 @@ subprojects { p ->
|
|||||||
// We cannot relocate this library since we call some MC classes that reference it
|
// We cannot relocate this library since we call some MC classes that reference it
|
||||||
implementation("it.unimi.dsi:fastutil:${rootProject.fastutil_version}")
|
implementation("it.unimi.dsi:fastutil:${rootProject.fastutil_version}")
|
||||||
|
|
||||||
forgeShadowMe("com.github.luben:zstd-jni:1.5.7-4")
|
forgeShadowMe("com.github.luben:zstd-jni:${rootProject.zstd_version}")
|
||||||
|
|
||||||
// Compression
|
// Compression
|
||||||
forgeShadowMe("org.lz4:lz4-java:${rootProject.lz4_version}") // LZ4
|
forgeShadowMe("org.lz4:lz4-java:${rootProject.lz4_version}") // LZ4
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import com.seibel.distanthorizons.coreapi.ModInfo;
|
|||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.dedicated.DedicatedServer;
|
import net.minecraft.server.dedicated.DedicatedServer;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import java.lang.invoke.MethodHandles;
|
import java.lang.invoke.MethodHandles;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@@ -36,7 +36,7 @@ import java.util.function.Supplier;
|
|||||||
*/
|
*/
|
||||||
public abstract class AbstractModInitializer
|
public abstract class AbstractModInitializer
|
||||||
{
|
{
|
||||||
protected static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
protected static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
private CommandInitializer commandInitializer;
|
private CommandInitializer commandInitializer;
|
||||||
|
|
||||||
@@ -172,6 +172,7 @@ public abstract class AbstractModInitializer
|
|||||||
{
|
{
|
||||||
ConfigHandler.tryRunFirstTimeSetup();
|
ConfigHandler.tryRunFirstTimeSetup();
|
||||||
Config.completeDelayedSetup();
|
Config.completeDelayedSetup();
|
||||||
|
DhLogger.runDelayedConfigSetup();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkForUpdates()
|
private void checkForUpdates()
|
||||||
|
|||||||
+5
-5
@@ -1,8 +1,8 @@
|
|||||||
package com.seibel.distanthorizons.common;
|
package com.seibel.distanthorizons.common;
|
||||||
|
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.logging.ConfigBasedLogger;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.network.event.internal.IncompatibleMessageInternalEvent;
|
import com.seibel.distanthorizons.core.network.event.internal.IncompatibleMessageInternalEvent;
|
||||||
import com.seibel.distanthorizons.core.network.event.internal.ProtocolErrorInternalEvent;
|
import com.seibel.distanthorizons.core.network.event.internal.ProtocolErrorInternalEvent;
|
||||||
import com.seibel.distanthorizons.core.network.messages.MessageRegistry;
|
import com.seibel.distanthorizons.core.network.messages.MessageRegistry;
|
||||||
@@ -15,15 +15,15 @@ import io.netty.buffer.ByteBufUtil;
|
|||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public abstract class AbstractPluginPacketSender implements IPluginPacketSender
|
public abstract class AbstractPluginPacketSender implements IPluginPacketSender
|
||||||
{
|
{
|
||||||
private static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(),
|
private static final DhLogger LOGGER = new DhLoggerBuilder()
|
||||||
() -> Config.Common.Logging.logNetworkEvent.get());
|
.fileLevelConfig(Config.Common.Logging.logNetworkEventToFile)
|
||||||
|
.build();
|
||||||
|
|
||||||
#if MC_VER >= MC_1_21_1
|
#if MC_VER >= MC_1_21_1
|
||||||
public static final ResourceLocation WRAPPER_PACKET_RESOURCE = ResourceLocation.fromNamespaceAndPath(ModInfo.RESOURCE_NAMESPACE, ModInfo.WRAPPER_PACKET_PATH);
|
public static final ResourceLocation WRAPPER_PACKET_RESOURCE = ResourceLocation.fromNamespaceAndPath(ModInfo.RESOURCE_NAMESPACE, ModInfo.WRAPPER_PACKET_PATH);
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ public class CrashCommand extends AbstractCommand
|
|||||||
.requires(this::isPlayerSource)
|
.requires(this::isPlayerSource)
|
||||||
.then(literal("encode")
|
.then(literal("encode")
|
||||||
.executes(c -> {
|
.executes(c -> {
|
||||||
assert SharedApi.getIDhServerWorld() != null;
|
assert SharedApi.tryGetDhServerWorld() != null;
|
||||||
|
|
||||||
ServerPlayerState serverPlayerState = SharedApi.getIDhServerWorld().getServerPlayerStateManager()
|
ServerPlayerState serverPlayerState = SharedApi.tryGetDhServerWorld().getServerPlayerStateManager()
|
||||||
.getConnectedPlayer(this.getSourcePlayer(c));
|
.getConnectedPlayer(this.getSourcePlayer(c));
|
||||||
if (serverPlayerState != null)
|
if (serverPlayerState != null)
|
||||||
{
|
{
|
||||||
@@ -29,9 +29,9 @@ public class CrashCommand extends AbstractCommand
|
|||||||
}))
|
}))
|
||||||
.then(literal("decode")
|
.then(literal("decode")
|
||||||
.executes(c -> {
|
.executes(c -> {
|
||||||
assert SharedApi.getIDhServerWorld() != null;
|
assert SharedApi.tryGetDhServerWorld() != null;
|
||||||
|
|
||||||
ServerPlayerState serverPlayerState = SharedApi.getIDhServerWorld().getServerPlayerStateManager()
|
ServerPlayerState serverPlayerState = SharedApi.tryGetDhServerWorld().getServerPlayerStateManager()
|
||||||
.getConnectedPlayer(this.getSourcePlayer(c));
|
.getConnectedPlayer(this.getSourcePlayer(c));
|
||||||
if (serverPlayerState != null)
|
if (serverPlayerState != null)
|
||||||
{
|
{
|
||||||
|
|||||||
+108
-27
@@ -1,6 +1,7 @@
|
|||||||
package com.seibel.distanthorizons.common.wrappers.block;
|
package com.seibel.distanthorizons.common.wrappers.block;
|
||||||
|
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
|
import com.seibel.distanthorizons.core.dataObjects.BlockBiomeWrapperPair;
|
||||||
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2;
|
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.pos.DhSectionPos;
|
import com.seibel.distanthorizons.core.pos.DhSectionPos;
|
||||||
@@ -9,6 +10,7 @@ import com.seibel.distanthorizons.core.util.ColorUtil;
|
|||||||
import com.seibel.distanthorizons.core.util.FullDataPointUtil;
|
import com.seibel.distanthorizons.core.util.FullDataPointUtil;
|
||||||
|
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||||
|
import it.unimi.dsi.fastutil.longs.LongArrayList;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
@@ -18,8 +20,11 @@ import net.minecraft.world.level.biome.Biome;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
#if MC_VER >= MC_1_18_2
|
#if MC_VER >= MC_1_18_2
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
@@ -28,30 +33,41 @@ import net.minecraft.core.Holder;
|
|||||||
|
|
||||||
public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
protected final BiomeWrapper biomeWrapper;
|
|
||||||
|
|
||||||
protected final int smoothingRadiusInBlocks;
|
|
||||||
protected final FullDataSourceV2 fullDataSource;
|
|
||||||
protected final IClientLevelWrapper clientLevelWrapper;
|
|
||||||
|
|
||||||
#if MC_VER < MC_1_18_2
|
#if MC_VER < MC_1_18_2
|
||||||
public static final ConcurrentMap<String, Biome> BIOME_BY_RESOURCE_STRING = new ConcurrentHashMap<>();
|
private static final ConcurrentHashMap<String, Biome> BIOME_BY_RESOURCE_STRING = new ConcurrentHashMap<>();
|
||||||
#else
|
#else
|
||||||
public static final ConcurrentMap<String, Holder<Biome>> BIOME_BY_RESOURCE_STRING = new ConcurrentHashMap<>();
|
private static final ConcurrentHashMap<String, Holder<Biome>> BIOME_BY_RESOURCE_STRING = new ConcurrentHashMap<>();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
private static final ConcurrentHashMap<BlockBiomeWrapperPair, Integer> COLOR_BY_BLOCK_BIOME_PAIR = new ConcurrentHashMap<>();
|
||||||
|
/** returned if the color cache is incomplete */
|
||||||
|
public static final int INVALID_COLOR = Integer.MIN_VALUE;
|
||||||
|
|
||||||
|
|
||||||
|
protected BiomeWrapper biomeWrapper;
|
||||||
|
protected BlockStateWrapper blockStateWrapper;
|
||||||
|
protected FullDataSourceV2 fullDataSource;
|
||||||
|
protected int smoothingRadiusInBlocks;
|
||||||
|
protected IClientLevelWrapper clientLevelWrapper;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=============//
|
//=============//
|
||||||
// constructor //
|
// constructor //
|
||||||
//=============//
|
//=============//
|
||||||
|
|
||||||
public AbstractDhTintGetter(BiomeWrapper biomeWrapper, FullDataSourceV2 fullDataSource, IClientLevelWrapper clientLevelWrapper)
|
public AbstractDhTintGetter() { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mutates this getter so we can access the necessary
|
||||||
|
* variables for tint getting.
|
||||||
|
*/
|
||||||
|
public void update(BiomeWrapper biomeWrapper, BlockStateWrapper blockStateWrapper, FullDataSourceV2 fullDataSource, IClientLevelWrapper clientLevelWrapper)
|
||||||
{
|
{
|
||||||
this.biomeWrapper = biomeWrapper;
|
this.biomeWrapper = biomeWrapper;
|
||||||
|
this.blockStateWrapper = blockStateWrapper;
|
||||||
this.fullDataSource = fullDataSource;
|
this.fullDataSource = fullDataSource;
|
||||||
this.clientLevelWrapper = clientLevelWrapper;
|
this.clientLevelWrapper = clientLevelWrapper;
|
||||||
this.smoothingRadiusInBlocks = Config.Client.Advanced.Graphics.Quality.lodBiomeBlending.get();
|
this.smoothingRadiusInBlocks = Config.Client.Advanced.Graphics.Quality.lodBiomeBlending.get();
|
||||||
@@ -63,8 +79,27 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
// shared methods //
|
// shared methods //
|
||||||
//================//
|
//================//
|
||||||
|
|
||||||
|
/** Called by MC's tint getter */
|
||||||
@Override
|
@Override
|
||||||
public int getBlockTint(BlockPos blockPos, ColorResolver colorResolver)
|
public int getBlockTint(@NotNull BlockPos blockPos, @NotNull ColorResolver colorResolver)
|
||||||
|
{
|
||||||
|
DhBlockPosMutable mutableBlockPos = new DhBlockPosMutable(blockPos.getX(), blockPos.getY(), blockPos.getZ());
|
||||||
|
return this.tryGetBlockTint(mutableBlockPos, colorResolver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be called by DH directly, skipping some of MC's logic
|
||||||
|
* to speed up tint getting slightly.
|
||||||
|
*
|
||||||
|
* @return {@link AbstractDhTintGetter#INVALID_COLOR} if any of the biomes needed for this position
|
||||||
|
* were not cached. In that case calling {@link AbstractDhTintGetter#getBlockTint(BlockPos, ColorResolver)}
|
||||||
|
* will need to be called by MC's ColorResolver so we can
|
||||||
|
* populate the color cache.
|
||||||
|
*/
|
||||||
|
public int tryGetBlockTint(DhBlockPosMutable mutableBlockPos)
|
||||||
|
{ return this.tryGetBlockTint(mutableBlockPos, null); }
|
||||||
|
|
||||||
|
private int tryGetBlockTint(DhBlockPosMutable mutableBlockPos, @Nullable ColorResolver colorResolver)
|
||||||
{
|
{
|
||||||
// determine how wide this data source is so we can determine
|
// determine how wide this data source is so we can determine
|
||||||
// if blending should be used
|
// if blending should be used
|
||||||
@@ -78,7 +113,7 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
if (this.smoothingRadiusInBlocks == 0
|
if (this.smoothingRadiusInBlocks == 0
|
||||||
|| dataSourceLodWidthInBlocks > this.smoothingRadiusInBlocks)
|
|| dataSourceLodWidthInBlocks > this.smoothingRadiusInBlocks)
|
||||||
{
|
{
|
||||||
return colorResolver.getColor(unwrapClientBiome(this.biomeWrapper.biome, this.clientLevelWrapper), blockPos.getX(), blockPos.getZ());
|
return this.tryGetClientBiomeColor(colorResolver, this.biomeWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -88,13 +123,13 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
int rollingGreen = 0;
|
int rollingGreen = 0;
|
||||||
int rollingBlue = 0;
|
int rollingBlue = 0;
|
||||||
|
|
||||||
int xMin = blockPos.getX() - this.smoothingRadiusInBlocks;
|
int xMin = mutableBlockPos.getX() - this.smoothingRadiusInBlocks;
|
||||||
int xMax = blockPos.getX() + this.smoothingRadiusInBlocks;
|
int xMax = mutableBlockPos.getX() + this.smoothingRadiusInBlocks;
|
||||||
|
|
||||||
|
int zMin = mutableBlockPos.getZ() - this.smoothingRadiusInBlocks;
|
||||||
|
int zMax = mutableBlockPos.getZ() + this.smoothingRadiusInBlocks;
|
||||||
|
|
||||||
int zMin = blockPos.getZ() - this.smoothingRadiusInBlocks;
|
|
||||||
int zMax = blockPos.getZ() + this.smoothingRadiusInBlocks;
|
|
||||||
|
|
||||||
DhBlockPosMutable mutableBlockPos = new DhBlockPosMutable(0, blockPos.getY(), 0);
|
|
||||||
for (int x = xMin; x < xMax; x++)
|
for (int x = xMin; x < xMax; x++)
|
||||||
{
|
{
|
||||||
for (int z = zMin; z < zMax; z++)
|
for (int z = zMin; z < zMax; z++)
|
||||||
@@ -105,7 +140,7 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
// this can return the same position/datapoint for larger LODs duplicating work,
|
// this can return the same position/datapoint for larger LODs duplicating work,
|
||||||
// however for small smoothing ranges that isn't a big deal and for large LODs
|
// however for small smoothing ranges that isn't a big deal and for large LODs
|
||||||
// we ignore smoothing anyway
|
// we ignore smoothing anyway
|
||||||
long dataPoint = this.fullDataSource.getAtBlockPos(mutableBlockPos);
|
long dataPoint = this.fullDataSource.getDataPointAtBlockPos(mutableBlockPos);
|
||||||
if (dataPoint == FullDataPointUtil.EMPTY_DATA_POINT)
|
if (dataPoint == FullDataPointUtil.EMPTY_DATA_POINT)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@@ -114,7 +149,11 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
// get the color for this nearby position
|
// get the color for this nearby position
|
||||||
int id = FullDataPointUtil.getId(dataPoint);
|
int id = FullDataPointUtil.getId(dataPoint);
|
||||||
BiomeWrapper biomeWrapper = (BiomeWrapper) this.fullDataSource.mapping.getBiomeWrapper(id);
|
BiomeWrapper biomeWrapper = (BiomeWrapper) this.fullDataSource.mapping.getBiomeWrapper(id);
|
||||||
int color = colorResolver.getColor(unwrapClientBiome(biomeWrapper.biome, this.clientLevelWrapper), mutableBlockPos.getX(), mutableBlockPos.getZ());
|
int color = this.tryGetClientBiomeColor(colorResolver, biomeWrapper);
|
||||||
|
if (color == INVALID_COLOR)
|
||||||
|
{
|
||||||
|
return INVALID_COLOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// rolling average
|
// rolling average
|
||||||
@@ -131,7 +170,7 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
// just use the default center's color
|
// just use the default center's color
|
||||||
if (dataPointCount == 0)
|
if (dataPointCount == 0)
|
||||||
{
|
{
|
||||||
return colorResolver.getColor(unwrapClientBiome(this.biomeWrapper.biome, this.clientLevelWrapper), blockPos.getX(), blockPos.getZ());
|
return this.tryGetClientBiomeColor(colorResolver, this.biomeWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
int colorInt = ColorUtil.argbToInt(
|
int colorInt = ColorUtil.argbToInt(
|
||||||
@@ -142,14 +181,41 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
return colorInt;
|
return colorInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static Biome unwrapClientBiome(#if MC_VER >= MC_1_18_2 Holder<Biome> #else Biome #endif biome, IClientLevelWrapper clientLevelWrapper)
|
/**
|
||||||
|
* If given a ColorResolver this will always succeed. <Br>
|
||||||
|
* If not it will attempt to use the cached color.
|
||||||
|
*/
|
||||||
|
private int tryGetClientBiomeColor(@Nullable ColorResolver colorResolver, BiomeWrapper biomeWrapper)
|
||||||
{
|
{
|
||||||
BiomeWrapper biomeWrapper = (BiomeWrapper)BiomeWrapper.getBiomeWrapper(biome, clientLevelWrapper);
|
BlockBiomeWrapperPair pair = BlockBiomeWrapperPair.get(this.blockStateWrapper, biomeWrapper);
|
||||||
|
|
||||||
|
// use the cached color if possible
|
||||||
|
Integer cachedColor = COLOR_BY_BLOCK_BIOME_PAIR.get(pair); // explicit Integer return here reduces unnecessary allocations
|
||||||
|
if (cachedColor != null)
|
||||||
|
{
|
||||||
|
return cachedColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (colorResolver == null)
|
||||||
|
{
|
||||||
|
// no color resolver is present,
|
||||||
|
// the cache needs to be populated before
|
||||||
|
// we can use the fast path
|
||||||
|
return INVALID_COLOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int color = colorResolver.getColor(unwrapClientBiome(biomeWrapper), 0, 0);
|
||||||
|
COLOR_BY_BLOCK_BIOME_PAIR.put(pair, color);
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static Biome unwrapClientBiome(BiomeWrapper biomeWrapper)
|
||||||
|
{
|
||||||
String biomeString = biomeWrapper.getSerialString();
|
String biomeString = biomeWrapper.getSerialString();
|
||||||
if (biomeString == null
|
if (biomeString == null
|
||||||
|| biomeString.isEmpty()
|
|| biomeString.isEmpty()
|
||||||
|| biomeString.equals(BiomeWrapper.EMPTY_BIOME_STRING))
|
|| biomeString.equals(BiomeWrapper.EMPTY_BIOME_STRING))
|
||||||
{
|
{
|
||||||
// default to "plains" for empty/invalid biomes
|
// default to "plains" for empty/invalid biomes
|
||||||
biomeString = "minecraft:plains";
|
biomeString = "minecraft:plains";
|
||||||
@@ -203,6 +269,21 @@ public abstract class AbstractDhTintGetter implements BlockAndTintGetter
|
|||||||
*/
|
*/
|
||||||
private static #if MC_VER < MC_1_18_2 Biome #else Holder<Biome> #endif getClientBiome(String biomeResourceString)
|
private static #if MC_VER < MC_1_18_2 Biome #else Holder<Biome> #endif getClientBiome(String biomeResourceString)
|
||||||
{
|
{
|
||||||
|
#if MC_VER < MC_1_18_2
|
||||||
|
Biome biome;
|
||||||
|
#else
|
||||||
|
Holder<Biome> biome;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// calling get instead of compute is slightly faster for already
|
||||||
|
// computed values
|
||||||
|
biome = BIOME_BY_RESOURCE_STRING.get(biomeResourceString);
|
||||||
|
if (biome != null)
|
||||||
|
{
|
||||||
|
return biome;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// cache the client biomes so we don't have to re-parse the resource location every time
|
// cache the client biomes so we don't have to re-parse the resource location every time
|
||||||
return BIOME_BY_RESOURCE_STRING.compute(biomeResourceString,
|
return BIOME_BY_RESOURCE_STRING.compute(biomeResourceString,
|
||||||
(resourceString, existingBiome) ->
|
(resourceString, existingBiome) ->
|
||||||
|
|||||||
+8
-7
@@ -26,10 +26,11 @@ import java.util.Optional;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
|
||||||
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ import net.minecraft.world.level.biome.Biomes;
|
|||||||
public class BiomeWrapper implements IBiomeWrapper
|
public class BiomeWrapper implements IBiomeWrapper
|
||||||
{
|
{
|
||||||
// must be defined before AIR, otherwise a null pointer will be thrown
|
// must be defined before AIR, otherwise a null pointer will be thrown
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
#if MC_VER < MC_1_18_2
|
#if MC_VER < MC_1_18_2
|
||||||
@@ -103,8 +104,7 @@ public class BiomeWrapper implements IBiomeWrapper
|
|||||||
// constructors //
|
// constructors //
|
||||||
//==============//
|
//==============//
|
||||||
|
|
||||||
// TODO why not just return BiomeWrapper?
|
public static BiomeWrapper getBiomeWrapper(#if MC_VER < MC_1_18_2 Biome #else Holder<Biome> #endif biome, ILevelWrapper levelWrapper)
|
||||||
static public IBiomeWrapper getBiomeWrapper(#if MC_VER < MC_1_18_2 Biome #else Holder<Biome> #endif biome, ILevelWrapper levelWrapper)
|
|
||||||
{
|
{
|
||||||
if (biome == null)
|
if (biome == null)
|
||||||
{
|
{
|
||||||
@@ -112,9 +112,10 @@ public class BiomeWrapper implements IBiomeWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (WRAPPER_BY_BIOME.containsKey(biome))
|
BiomeWrapper biomeWrapper = WRAPPER_BY_BIOME.get(biome);
|
||||||
|
if (biomeWrapper != null)
|
||||||
{
|
{
|
||||||
return WRAPPER_BY_BIOME.get(biome);
|
return biomeWrapper;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -300,7 +301,7 @@ public class BiomeWrapper implements IBiomeWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
foundWrapper = (BiomeWrapper) getBiomeWrapper(deserializeResult.biome, levelWrapper);
|
foundWrapper = getBiomeWrapper(deserializeResult.biome, levelWrapper);
|
||||||
return foundWrapper;
|
return foundWrapper;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+2
-2
@@ -35,7 +35,7 @@ import net.minecraft.world.level.block.Block;
|
|||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.SoundType;
|
import net.minecraft.world.level.block.SoundType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -72,7 +72,7 @@ public class BlockStateWrapper implements IBlockStateWrapper
|
|||||||
|
|
||||||
|
|
||||||
// must be defined before AIR, otherwise a null pointer will be thrown
|
// must be defined before AIR, otherwise a null pointer will be thrown
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
public static final ConcurrentHashMap<BlockState, BlockStateWrapper> WRAPPER_BY_BLOCK_STATE = new ConcurrentHashMap<>();
|
public static final ConcurrentHashMap<BlockState, BlockStateWrapper> WRAPPER_BY_BLOCK_STATE = new ConcurrentHashMap<>();
|
||||||
public static final ConcurrentHashMap<String, BlockStateWrapper> WRAPPER_BY_RESOURCE_LOCATION = new ConcurrentHashMap<>();
|
public static final ConcurrentHashMap<String, BlockStateWrapper> WRAPPER_BY_RESOURCE_LOCATION = new ConcurrentHashMap<>();
|
||||||
|
|||||||
+56
-50
@@ -23,13 +23,13 @@ import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
|||||||
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2;
|
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos;
|
import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos;
|
||||||
|
import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPosMutable;
|
||||||
import com.seibel.distanthorizons.core.util.ColorUtil;
|
import com.seibel.distanthorizons.core.util.ColorUtil;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.level.LevelReader;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.FlowerBlock;
|
import net.minecraft.world.level.block.FlowerBlock;
|
||||||
import net.minecraft.world.level.block.LeavesBlock;
|
import net.minecraft.world.level.block.LeavesBlock;
|
||||||
@@ -40,7 +40,7 @@ import net.minecraft.util.RandomSource;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
#endif
|
#endif
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -62,10 +62,8 @@ import net.minecraft.client.renderer.block.model.BlockModelPart;
|
|||||||
*/
|
*/
|
||||||
public class ClientBlockStateColorCache
|
public class ClientBlockStateColorCache
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
// TODO it isn't that we need the level, but that we need the adjacent data
|
|
||||||
// maybe we can pass in the full data source?
|
|
||||||
private static final HashSet<BlockState> BLOCK_STATES_THAT_NEED_LEVEL = new HashSet<>();
|
private static final HashSet<BlockState> BLOCK_STATES_THAT_NEED_LEVEL = new HashSet<>();
|
||||||
private static final HashSet<BlockState> BROKEN_BLOCK_STATES = new HashSet<>();
|
private static final HashSet<BlockState> BROKEN_BLOCK_STATES = new HashSet<>();
|
||||||
|
|
||||||
@@ -95,14 +93,11 @@ public class ClientBlockStateColorCache
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private final IClientLevelWrapper clientLevelWrapper;
|
private final IClientLevelWrapper clientLevelWrapper;
|
||||||
private final BlockStateWrapper blockStateWrapper;
|
|
||||||
|
|
||||||
private final BlockState blockState;
|
private final BlockState blockState;
|
||||||
private final LevelReader level;
|
private final BlockStateWrapper blockStateWrapper;
|
||||||
|
|
||||||
private boolean isColorResolved = false;
|
private boolean isColorResolved = false;
|
||||||
private int baseColor = 0;
|
private int baseColor = 0;
|
||||||
private boolean needShade = true;
|
|
||||||
private boolean needPostTinting = false;
|
private boolean needPostTinting = false;
|
||||||
private int tintIndex = 0;
|
private int tintIndex = 0;
|
||||||
|
|
||||||
@@ -170,18 +165,20 @@ public class ClientBlockStateColorCache
|
|||||||
0.93011117f, 0.9386859f, 0.9473069f, 0.9559735f, 0.9646866f, 0.9734455f, 0.98225087f, 0.9911022f, 1.0f
|
0.93011117f, 0.9386859f, 0.9473069f, 0.9559735f, 0.9646866f, 0.9734455f, 0.98225087f, 0.9911022f, 1.0f
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final ThreadLocal<TintWithoutLevelOverrider> TintWithoutLevelOverrideGetter = ThreadLocal.withInitial(() -> new TintWithoutLevelOverrider());
|
||||||
|
private static final ThreadLocal<TintGetterOverride> TintOverrideGetter = ThreadLocal.withInitial(() -> new TintGetterOverride());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=============//
|
//=============//
|
||||||
// constructor //
|
// constructor //
|
||||||
//=============//
|
//=============//
|
||||||
|
|
||||||
public ClientBlockStateColorCache(BlockState blockState, IClientLevelWrapper samplingLevel)
|
public ClientBlockStateColorCache(BlockState blockState, IClientLevelWrapper clientLevelWrapper)
|
||||||
{
|
{
|
||||||
this.blockState = blockState;
|
this.blockState = blockState;
|
||||||
this.clientLevelWrapper = samplingLevel;
|
this.blockStateWrapper = BlockStateWrapper.fromBlockState(blockState, clientLevelWrapper);
|
||||||
this.level = (LevelReader) samplingLevel.getWrappedMcObject();
|
this.clientLevelWrapper = clientLevelWrapper;
|
||||||
this.blockStateWrapper = BlockStateWrapper.fromBlockState(this.blockState, this.clientLevelWrapper);
|
|
||||||
|
|
||||||
this.resolveColors();
|
this.resolveColors();
|
||||||
}
|
}
|
||||||
@@ -235,32 +232,29 @@ public class ClientBlockStateColorCache
|
|||||||
|
|
||||||
this.needPostTinting = firstQuad.isTinted();
|
this.needPostTinting = firstQuad.isTinted();
|
||||||
#if MC_VER <= MC_1_21_4
|
#if MC_VER <= MC_1_21_4
|
||||||
this.needShade = firstQuad.isShade();
|
|
||||||
this.tintIndex = firstQuad.getTintIndex();
|
this.tintIndex = firstQuad.getTintIndex();
|
||||||
#else
|
#else
|
||||||
this.needShade = firstQuad.shade();
|
|
||||||
this.tintIndex = firstQuad.tintIndex();
|
this.tintIndex = firstQuad.tintIndex();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
this.baseColor = calculateColorFromTexture(
|
this.baseColor = calculateColorFromTexture(
|
||||||
firstQuad.sprite,
|
firstQuad.sprite,
|
||||||
ColorMode.getColorMode(this.blockState.getBlock()));
|
EColorMode.getColorMode(this.blockState.getBlock()));
|
||||||
#elif MC_VER < MC_1_21_5
|
#elif MC_VER < MC_1_21_5
|
||||||
this.baseColor = calculateColorFromTexture(
|
this.baseColor = calculateColorFromTexture(
|
||||||
firstQuad.getSprite(),
|
firstQuad.getSprite(),
|
||||||
ColorMode.getColorMode(this.blockState.getBlock()));
|
EColorMode.getColorMode(this.blockState.getBlock()));
|
||||||
#else
|
#else
|
||||||
this.baseColor = calculateColorFromTexture(
|
this.baseColor = calculateColorFromTexture(
|
||||||
firstQuad.sprite(),
|
firstQuad.sprite(),
|
||||||
ColorMode.getColorMode(this.blockState.getBlock()));
|
EColorMode.getColorMode(this.blockState.getBlock()));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Backup method.
|
// Backup method.
|
||||||
this.needPostTinting = false;
|
this.needPostTinting = false;
|
||||||
this.needShade = false;
|
|
||||||
this.tintIndex = 0;
|
this.tintIndex = 0;
|
||||||
this.baseColor = this.getParticleIconColor();
|
this.baseColor = this.getParticleIconColor();
|
||||||
}
|
}
|
||||||
@@ -269,19 +263,11 @@ public class ClientBlockStateColorCache
|
|||||||
{
|
{
|
||||||
// Liquid Block
|
// Liquid Block
|
||||||
this.needPostTinting = true;
|
this.needPostTinting = true;
|
||||||
this.needShade = false;
|
|
||||||
this.tintIndex = 0;
|
this.tintIndex = 0;
|
||||||
this.baseColor = this.getParticleIconColor();
|
this.baseColor = this.getParticleIconColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//String serialString = this.blockStateWrapper.getSerialString();
|
|
||||||
//if (serialString.contains("minecraft:water")
|
|
||||||
// || serialString.contains("grass"))
|
|
||||||
//{
|
|
||||||
// BLOCK_STATES_THAT_NEED_LEVEL.add(this.blockState);
|
|
||||||
//}
|
|
||||||
|
|
||||||
this.isColorResolved = true;
|
this.isColorResolved = true;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -319,7 +305,7 @@ public class ClientBlockStateColorCache
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Perhaps make this not just use the first frame?
|
//TODO: Perhaps make this not just use the first frame?
|
||||||
private static int calculateColorFromTexture(TextureAtlasSprite texture, ColorMode colorMode)
|
private static int calculateColorFromTexture(TextureAtlasSprite texture, EColorMode colorMode)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int alpha = 0;
|
int alpha = 0;
|
||||||
@@ -329,8 +315,8 @@ public class ClientBlockStateColorCache
|
|||||||
int tempColor;
|
int tempColor;
|
||||||
|
|
||||||
// don't render Chiseled blocks.
|
// don't render Chiseled blocks.
|
||||||
// Since ColorMode is set per block, you only need to check this once.
|
// Since EColorMode is set per block, you only need to check this once.
|
||||||
if (colorMode != ColorMode.Chisel)
|
if (colorMode != EColorMode.Chisel)
|
||||||
{
|
{
|
||||||
// textures normally use u and v instead of x and y
|
// textures normally use u and v instead of x and y
|
||||||
for (int v = 0; v < getTextureHeight(texture); v++)
|
for (int v = 0; v < getTextureHeight(texture); v++)
|
||||||
@@ -348,7 +334,7 @@ public class ClientBlockStateColorCache
|
|||||||
int b = (tempColor & 0x00FF0000) >>> 16;
|
int b = (tempColor & 0x00FF0000) >>> 16;
|
||||||
int a = (tempColor & 0xFF000000) >>> 24;
|
int a = (tempColor & 0xFF000000) >>> 24;
|
||||||
int scale = 1;
|
int scale = 1;
|
||||||
if (colorMode == ColorMode.Leaves)
|
if (colorMode == EColorMode.Leaves)
|
||||||
{
|
{
|
||||||
//switch (//FIXME add config option)
|
//switch (//FIXME add config option)
|
||||||
// case BLACK:
|
// case BLACK:
|
||||||
@@ -367,11 +353,11 @@ public class ClientBlockStateColorCache
|
|||||||
// break; //do nothing, let it count towards transparency
|
// break; //do nothing, let it count towards transparency
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (a == 0 && colorMode != ColorMode.Glass)
|
else if (a == 0 && colorMode != EColorMode.Glass)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (colorMode == ColorMode.Flower && (g + 25 < b || g + 25 < r))
|
else if (colorMode == EColorMode.Flower && (g + 25 < b || g + 25 < r))
|
||||||
{
|
{
|
||||||
scale = FLOWER_COLOR_SCALE;
|
scale = FLOWER_COLOR_SCALE;
|
||||||
}
|
}
|
||||||
@@ -454,7 +440,7 @@ public class ClientBlockStateColorCache
|
|||||||
{
|
{
|
||||||
return calculateColorFromTexture(
|
return calculateColorFromTexture(
|
||||||
Minecraft.getInstance().getModelManager().getBlockModelShaper().getParticleIcon(this.blockState),
|
Minecraft.getInstance().getModelManager().getBlockModelShaper().getParticleIcon(this.blockState),
|
||||||
ColorMode.getColorMode(this.blockState.getBlock()));
|
EColorMode.getColorMode(this.blockState.getBlock()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -463,7 +449,7 @@ public class ClientBlockStateColorCache
|
|||||||
// public getter //
|
// public getter //
|
||||||
//===============//
|
//===============//
|
||||||
|
|
||||||
public int getColor(BiomeWrapper biomeWrapper, FullDataSourceV2 fullDataSource, DhBlockPos pos)
|
public int getColor(BiomeWrapper biomeWrapper, FullDataSourceV2 fullDataSource, DhBlockPos blockPos)
|
||||||
{
|
{
|
||||||
// only get the tint if the block needs to be tinted
|
// only get the tint if the block needs to be tinted
|
||||||
if (!this.needPostTinting)
|
if (!this.needPostTinting)
|
||||||
@@ -487,16 +473,27 @@ public class ClientBlockStateColorCache
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
tintColor = Minecraft.getInstance().getBlockColors()
|
TintWithoutLevelOverrider tintOverride = TintWithoutLevelOverrideGetter.get();
|
||||||
.getColor(this.blockState,
|
tintOverride.update(biomeWrapper, this.blockStateWrapper, fullDataSource, this.clientLevelWrapper);
|
||||||
new TintWithoutLevelOverrider(biomeWrapper, fullDataSource, this.clientLevelWrapper), // TODO can this object be cached?
|
|
||||||
McObjectConverter.Convert(pos),
|
// try using DH's cached tint values first if possible
|
||||||
this.tintIndex);
|
tintColor = tintOverride.tryGetBlockTint(new DhBlockPosMutable(blockPos));
|
||||||
|
if (tintColor == AbstractDhTintGetter.INVALID_COLOR)
|
||||||
|
{
|
||||||
|
// one or more tint values weren't calculated,
|
||||||
|
// we need MC's color resolver
|
||||||
|
tintColor = Minecraft.getInstance()
|
||||||
|
.getBlockColors()
|
||||||
|
.getColor(this.blockState,
|
||||||
|
tintOverride,
|
||||||
|
McObjectConverter.Convert(blockPos),
|
||||||
|
this.tintIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (UnsupportedOperationException e)
|
catch (UnsupportedOperationException e)
|
||||||
{
|
{
|
||||||
// this exception generally occurs if the tint requires other blocks besides itself
|
// this exception generally occurs if the tint requires other blocks besides itself
|
||||||
LOGGER.debug("Unable to use ["+ TintWithoutLevelOverrider.class.getSimpleName()+"] to get the block tint for block: [" + this.blockState + "] and biome: [" + biomeWrapper + "] at pos: " + pos + ". Error: [" + e.getMessage() + "]. Attempting to use backup method...", e);
|
LOGGER.debug("Unable to use ["+ TintWithoutLevelOverrider.class.getSimpleName()+"] to get the block tint for block: [" + this.blockState + "] and biome: [" + biomeWrapper + "] at pos: " + blockPos + ". Error: [" + e.getMessage() + "]. Attempting to use backup method...", e);
|
||||||
BLOCK_STATES_THAT_NEED_LEVEL.add(this.blockState);
|
BLOCK_STATES_THAT_NEED_LEVEL.add(this.blockState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -504,13 +501,22 @@ public class ClientBlockStateColorCache
|
|||||||
// use the level logic only if requested
|
// use the level logic only if requested
|
||||||
if (BLOCK_STATES_THAT_NEED_LEVEL.contains(this.blockState))
|
if (BLOCK_STATES_THAT_NEED_LEVEL.contains(this.blockState))
|
||||||
{
|
{
|
||||||
// this logic can't be used all the time due to it breaking some blocks tinting
|
// the level shouldn't be used all the time due to it breaking some blocks tinting
|
||||||
// specifically oceans don't render correctly
|
// specifically oceans don't render correctly
|
||||||
tintColor = Minecraft.getInstance().getBlockColors()
|
|
||||||
.getColor(this.blockState,
|
TintGetterOverride tintOverride = TintOverrideGetter.get();
|
||||||
new TintGetterOverride(this.level, biomeWrapper, fullDataSource, this.clientLevelWrapper), // TODO can this object be cached?
|
tintOverride.update(biomeWrapper, this.blockStateWrapper, fullDataSource, this.clientLevelWrapper);
|
||||||
McObjectConverter.Convert(pos),
|
|
||||||
this.tintIndex);
|
tintColor = tintOverride.tryGetBlockTint(new DhBlockPosMutable(blockPos));
|
||||||
|
if (tintColor == AbstractDhTintGetter.INVALID_COLOR)
|
||||||
|
{
|
||||||
|
tintColor = Minecraft.getInstance()
|
||||||
|
.getBlockColors()
|
||||||
|
.getColor(this.blockState,
|
||||||
|
tintOverride,
|
||||||
|
McObjectConverter.Convert(blockPos),
|
||||||
|
this.tintIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -518,7 +524,7 @@ public class ClientBlockStateColorCache
|
|||||||
// only display the error once per block/biome type to reduce log spam
|
// only display the error once per block/biome type to reduce log spam
|
||||||
if (!BROKEN_BLOCK_STATES.contains(this.blockState))
|
if (!BROKEN_BLOCK_STATES.contains(this.blockState))
|
||||||
{
|
{
|
||||||
LOGGER.warn("Failed to get block color for block: [" + this.blockState + "] and biome: [" + biomeWrapper + "] at pos: " + pos + ". Error: ["+e.getMessage() + "]. Note: future errors for this block/biome will be ignored.", e);
|
LOGGER.warn("Failed to get block color for block: [" + this.blockState + "] and biome: [" + biomeWrapper + "] at pos: " + blockPos + ". Error: ["+e.getMessage() + "]. Note: future errors for this block/biome will be ignored.", e);
|
||||||
BROKEN_BLOCK_STATES.add(this.blockState);
|
BROKEN_BLOCK_STATES.add(this.blockState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -542,7 +548,7 @@ public class ClientBlockStateColorCache
|
|||||||
// helper classes //
|
// helper classes //
|
||||||
//================//
|
//================//
|
||||||
|
|
||||||
enum ColorMode
|
private enum EColorMode
|
||||||
{
|
{
|
||||||
Default,
|
Default,
|
||||||
Flower,
|
Flower,
|
||||||
@@ -550,7 +556,7 @@ public class ClientBlockStateColorCache
|
|||||||
Chisel,
|
Chisel,
|
||||||
Glass;
|
Glass;
|
||||||
|
|
||||||
static ColorMode getColorMode(Block block)
|
static EColorMode getColorMode(Block block)
|
||||||
{
|
{
|
||||||
if (block instanceof LeavesBlock) return Leaves;
|
if (block instanceof LeavesBlock) return Leaves;
|
||||||
if (block instanceof FlowerBlock) return Flower;
|
if (block instanceof FlowerBlock) return Flower;
|
||||||
|
|||||||
+5
-3
@@ -41,7 +41,7 @@ import java.util.stream.Stream;
|
|||||||
|
|
||||||
public class TintGetterOverride extends AbstractDhTintGetter
|
public class TintGetterOverride extends AbstractDhTintGetter
|
||||||
{
|
{
|
||||||
private final LevelReader parent;
|
private LevelReader parent;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -49,9 +49,11 @@ public class TintGetterOverride extends AbstractDhTintGetter
|
|||||||
// constructor //
|
// constructor //
|
||||||
//=============//
|
//=============//
|
||||||
|
|
||||||
public TintGetterOverride(LevelReader parent, BiomeWrapper biomeWrapper, FullDataSourceV2 fullDataSource, IClientLevelWrapper clientLevelWrapper)
|
public TintGetterOverride() { }
|
||||||
|
|
||||||
|
public void update(LevelReader parent, BiomeWrapper biomeWrapper, BlockStateWrapper blockStateWrapper, FullDataSourceV2 fullDataSource, IClientLevelWrapper clientLevelWrapper)
|
||||||
{
|
{
|
||||||
super(biomeWrapper, fullDataSource, clientLevelWrapper);
|
super.update(biomeWrapper, blockStateWrapper, fullDataSource, clientLevelWrapper);
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -23,6 +23,7 @@ import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSour
|
|||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.lighting.LevelLightEngine;
|
import net.minecraft.world.level.lighting.LevelLightEngine;
|
||||||
@@ -36,8 +37,8 @@ public class TintWithoutLevelOverrider extends AbstractDhTintGetter
|
|||||||
// constructor //
|
// constructor //
|
||||||
//=============//
|
//=============//
|
||||||
|
|
||||||
public TintWithoutLevelOverrider(BiomeWrapper biomeWrapper, FullDataSourceV2 fullDataSource, IClientLevelWrapper clientLevelWrapper)
|
public TintWithoutLevelOverrider()
|
||||||
{ super(biomeWrapper, fullDataSource, clientLevelWrapper); }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -38,7 +38,7 @@ import net.minecraft.world.level.chunk.ChunkAccess;
|
|||||||
import net.minecraft.world.level.chunk.ProtoChunk;
|
import net.minecraft.world.level.chunk.ProtoChunk;
|
||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
import net.minecraft.world.level.levelgen.Heightmap;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ import net.minecraft.world.level.chunk.status.ChunkStatus;
|
|||||||
|
|
||||||
public class ChunkWrapper implements IChunkWrapper
|
public class ChunkWrapper implements IChunkWrapper
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
/** can be used for interactions with the underlying chunk where creating new BlockPos objects could cause issues for the garbage collector. */
|
/** can be used for interactions with the underlying chunk where creating new BlockPos objects could cause issues for the garbage collector. */
|
||||||
private static final ThreadLocal<BlockPos.MutableBlockPos> MUTABLE_BLOCK_POS_REF = ThreadLocal.withInitial(() -> new BlockPos.MutableBlockPos());
|
private static final ThreadLocal<BlockPos.MutableBlockPos> MUTABLE_BLOCK_POS_REF = ThreadLocal.withInitial(() -> new BlockPos.MutableBlockPos());
|
||||||
|
|||||||
+7
-6
@@ -22,7 +22,7 @@ import com.seibel.distanthorizons.core.config.types.enums.EConfigCommentTextPosi
|
|||||||
import com.seibel.distanthorizons.core.config.types.enums.EConfigValidity;
|
import com.seibel.distanthorizons.core.config.types.enums.EConfigValidity;
|
||||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||||
import com.seibel.distanthorizons.core.jar.updater.SelfUpdater;
|
import com.seibel.distanthorizons.core.jar.updater.SelfUpdater;
|
||||||
import com.seibel.distanthorizons.core.logging.SpamReducedLogger;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.util.AnnotationUtil;
|
import com.seibel.distanthorizons.core.util.AnnotationUtil;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.config.IConfigGui;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.config.IConfigGui;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.config.ILangWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.config.ILangWrapper;
|
||||||
@@ -38,8 +38,7 @@ import net.minecraft.client.gui.components.events.GuiEventListener;
|
|||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -73,8 +72,10 @@ import static com.seibel.distanthorizons.common.wrappers.gui.GuiHelper.Translata
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class ClassicConfigGUI
|
public class ClassicConfigGUI
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
public static final SpamReducedLogger SPAM_LOGGER = new SpamReducedLogger(4);
|
public static final DhLogger RATE_LIMITED_LOGGER = new DhLoggerBuilder()
|
||||||
|
.maxCountPerSecond(1)
|
||||||
|
.build();
|
||||||
|
|
||||||
public static final ConfigCoreInterface CONFIG_CORE_INTERFACE = new ConfigCoreInterface();
|
public static final ConfigCoreInterface CONFIG_CORE_INTERFACE = new ConfigCoreInterface();
|
||||||
|
|
||||||
@@ -1002,7 +1003,7 @@ public class ClassicConfigGUI
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// should prevent crashing the game if there's an issue
|
// should prevent crashing the game if there's an issue
|
||||||
SPAM_LOGGER.error("Unexpected gui rendering issue: ["+e.getMessage()+"]", e);
|
RATE_LIMITED_LOGGER.error("Unexpected gui rendering issue: ["+e.getMessage()+"]", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -5,11 +5,11 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
|||||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||||
import com.seibel.distanthorizons.core.config.gui.JavaScreenHandlerScreen;
|
import com.seibel.distanthorizons.core.config.gui.JavaScreenHandlerScreen;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
public class GetConfigScreen
|
public class GetConfigScreen
|
||||||
{
|
{
|
||||||
protected static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
protected static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
public static EType useScreen = EType.Classic;
|
public static EType useScreen = EType.Classic;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -14,7 +14,7 @@ import net.minecraft.client.gui.components.ContainerObjectSelectionList;
|
|||||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
#if MC_VER >= MC_1_17_1
|
#if MC_VER >= MC_1_17_1
|
||||||
import net.minecraft.client.gui.narration.NarratableEntry;
|
import net.minecraft.client.gui.narration.NarratableEntry;
|
||||||
@@ -41,7 +41,7 @@ import java.util.*;
|
|||||||
// TODO: Make this
|
// TODO: Make this
|
||||||
public class ChangelogScreen extends DhScreen
|
public class ChangelogScreen extends DhScreen
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
private Screen parent;
|
private Screen parent;
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||||||
#endif
|
#endif
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import static com.seibel.distanthorizons.common.wrappers.gui.GuiHelper.*;
|
import static com.seibel.distanthorizons.common.wrappers.gui.GuiHelper.*;
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ import java.util.*;
|
|||||||
// and also maybe add this suggestion https://discord.com/channels/881614130614767666/1035863487110467625/1035949054485594192
|
// and also maybe add this suggestion https://discord.com/channels/881614130614767666/1035863487110467625/1035949054485594192
|
||||||
public class UpdateModScreen extends DhScreen
|
public class UpdateModScreen extends DhScreen
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
private Screen parent;
|
private Screen parent;
|
||||||
|
|||||||
+2
-2
@@ -36,9 +36,9 @@ public class KeyedClientLevelManager implements IKeyedClientLevelManager
|
|||||||
public IServerKeyedClientLevel getServerKeyedLevel() { return this.serverKeyedLevel; }
|
public IServerKeyedClientLevel getServerKeyedLevel() { return this.serverKeyedLevel; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IServerKeyedClientLevel setServerKeyedLevel(IClientLevelWrapper clientLevel, String levelKey)
|
public IServerKeyedClientLevel setServerKeyedLevel(IClientLevelWrapper clientLevel, String serverKey, String levelKey)
|
||||||
{
|
{
|
||||||
IServerKeyedClientLevel keyedLevel = new ServerKeyedClientLevel((ClientLevel) clientLevel.getWrappedMcObject(), levelKey);
|
IServerKeyedClientLevel keyedLevel = new ServerKeyedClientLevelWrapper((ClientLevel) clientLevel.getWrappedMcObject(), serverKey, levelKey);
|
||||||
this.serverKeyedLevel = keyedLevel;
|
this.serverKeyedLevel = keyedLevel;
|
||||||
this.enabled = true;
|
this.enabled = true;
|
||||||
return keyedLevel;
|
return keyedLevel;
|
||||||
|
|||||||
+18
-4
@@ -2,24 +2,36 @@ package com.seibel.distanthorizons.common.wrappers.level;
|
|||||||
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||||
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
|
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
|
|
||||||
import com.seibel.distanthorizons.coreapi.util.StringUtil;
|
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
|
||||||
public class ServerKeyedClientLevel extends ClientLevelWrapper implements IServerKeyedClientLevel
|
public class ServerKeyedClientLevelWrapper extends ClientLevelWrapper implements IServerKeyedClientLevel
|
||||||
{
|
{
|
||||||
|
/** Returns the folder name the server wants the client to use. */
|
||||||
|
private final String serverKey;
|
||||||
|
|
||||||
/** A unique identifier (generally the level's name) for differentiating multiverse levels */
|
/** A unique identifier (generally the level's name) for differentiating multiverse levels */
|
||||||
private final String serverLevelKey;
|
private final String serverLevelKey;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public ServerKeyedClientLevel(ClientLevel level, String serverLevelKey)
|
//=============//
|
||||||
|
// constructor //
|
||||||
|
//=============//
|
||||||
|
|
||||||
|
public ServerKeyedClientLevelWrapper(ClientLevel level, String serverKey, String serverLevelKey)
|
||||||
{
|
{
|
||||||
super(level);
|
super(level);
|
||||||
|
this.serverKey = serverKey;
|
||||||
this.serverLevelKey = serverLevelKey;
|
this.serverLevelKey = serverLevelKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getServerKey() { return this.serverKey; }
|
||||||
|
|
||||||
|
//======================//
|
||||||
|
// level identification //
|
||||||
|
//======================//
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getServerLevelKey() { return this.serverLevelKey; }
|
public String getServerLevelKey() { return this.serverLevelKey; }
|
||||||
@@ -27,4 +39,6 @@ public class ServerKeyedClientLevel extends ClientLevelWrapper implements IServe
|
|||||||
@Override
|
@Override
|
||||||
public String getDhIdentifier() { return this.getServerLevelKey(); }
|
public String getDhIdentifier() { return this.getServerLevelKey(); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
+2
-2
@@ -57,7 +57,7 @@ import net.minecraft.network.chat.TextComponent;
|
|||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.util.profiling.ProfilerFiller;
|
import net.minecraft.util.profiling.ProfilerFiller;
|
||||||
import net.minecraft.world.level.ChunkPos;
|
import net.minecraft.world.level.ChunkPos;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
#if MC_VER < MC_1_21_3
|
#if MC_VER < MC_1_21_3
|
||||||
@@ -72,7 +72,7 @@ import net.minecraft.util.profiling.Profiler;
|
|||||||
*/
|
*/
|
||||||
public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecraftSharedWrapper
|
public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecraftSharedWrapper
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
private static final Minecraft MINECRAFT = Minecraft.getInstance();
|
private static final Minecraft MINECRAFT = Minecraft.getInstance();
|
||||||
|
|
||||||
public static final MinecraftClientWrapper INSTANCE = new MinecraftClientWrapper();
|
public static final MinecraftClientWrapper INSTANCE = new MinecraftClientWrapper();
|
||||||
|
|||||||
+2
-2
@@ -28,7 +28,7 @@ import com.mojang.blaze3d.opengl.GlStateManager;
|
|||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.lwjgl.opengl.GL32;
|
import org.lwjgl.opengl.GL32;
|
||||||
|
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ public class MinecraftGLWrapper implements IMinecraftGLWrapper
|
|||||||
{
|
{
|
||||||
public static final MinecraftGLWrapper INSTANCE = new MinecraftGLWrapper();
|
public static final MinecraftGLWrapper INSTANCE = new MinecraftGLWrapper();
|
||||||
|
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+11
-8
@@ -59,6 +59,12 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAc
|
|||||||
import net.minecraft.client.Camera;
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
|
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.joml.Vector4f;
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
import net.minecraft.tags.FluidTags;
|
import net.minecraft.tags.FluidTags;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
@@ -67,9 +73,6 @@ import org.lwjgl.opengl.GL15;
|
|||||||
#else
|
#else
|
||||||
import net.minecraft.world.level.material.FogType;
|
import net.minecraft.world.level.material.FogType;
|
||||||
#endif
|
#endif
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.joml.Vector4f;
|
|
||||||
|
|
||||||
#if MC_VER >= MC_1_21_5
|
#if MC_VER >= MC_1_21_5
|
||||||
import com.mojang.blaze3d.opengl.GlTexture;
|
import com.mojang.blaze3d.opengl.GlTexture;
|
||||||
@@ -84,7 +87,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
{
|
{
|
||||||
public static final MinecraftRenderWrapper INSTANCE = new MinecraftRenderWrapper();
|
public static final MinecraftRenderWrapper INSTANCE = new MinecraftRenderWrapper();
|
||||||
|
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
private static final Minecraft MC = Minecraft.getInstance();
|
private static final Minecraft MC = Minecraft.getInstance();
|
||||||
|
|
||||||
private static final IOptifineAccessor OPTIFINE_ACCESSOR = ModAccessorInjector.INSTANCE.get(IOptifineAccessor.class);
|
private static final IOptifineAccessor OPTIFINE_ACCESSOR = ModAccessorInjector.INSTANCE.get(IOptifineAccessor.class);
|
||||||
@@ -318,7 +321,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTargetFrameBuffer()
|
public int getTargetFramebuffer()
|
||||||
{
|
{
|
||||||
// used so we can access the framebuffer shaders end up rendering to
|
// used so we can access the framebuffer shaders end up rendering to
|
||||||
if (AbstractOptifineAccessor.optifinePresent())
|
if (AbstractOptifineAccessor.optifinePresent())
|
||||||
@@ -399,7 +402,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTargetFrameBufferViewportWidth()
|
public int getTargetFramebufferViewportWidth()
|
||||||
{
|
{
|
||||||
#if MC_VER < MC_1_21_9
|
#if MC_VER < MC_1_21_9
|
||||||
return this.getRenderTarget().viewWidth;
|
return this.getRenderTarget().viewWidth;
|
||||||
@@ -409,7 +412,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTargetFrameBufferViewportHeight()
|
public int getTargetFramebufferViewportHeight()
|
||||||
{
|
{
|
||||||
#if MC_VER < MC_1_21_9
|
#if MC_VER < MC_1_21_9
|
||||||
return this.getRenderTarget().viewHeight;
|
return this.getRenderTarget().viewHeight;
|
||||||
@@ -419,7 +422,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ILightMapWrapper getLightmapWrapper(ILevelWrapper level) { return this.lightmapByDimensionType.get(level.getDimensionType()); }
|
public ILightMapWrapper getLightmapWrapper(@NotNull ILevelWrapper level) { return this.lightmapByDimensionType.get(level.getDimensionType()); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFogStateSpecial()
|
public boolean isFogStateSpecial()
|
||||||
|
|||||||
+2
-2
@@ -24,7 +24,7 @@ import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
|||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftGLWrapper;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.lwjgl.opengl.GL32;
|
import org.lwjgl.opengl.GL32;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
@@ -32,7 +32,7 @@ import java.nio.ByteBuffer;
|
|||||||
public class LightMapWrapper implements ILightMapWrapper
|
public class LightMapWrapper implements ILightMapWrapper
|
||||||
{
|
{
|
||||||
private static final IMinecraftGLWrapper GLMC = SingletonInjector.INSTANCE.get(IMinecraftGLWrapper.class);
|
private static final IMinecraftGLWrapper GLMC = SingletonInjector.INSTANCE.get(IMinecraftGLWrapper.class);
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
private int textureId = 0;
|
private int textureId = 0;
|
||||||
|
|
||||||
|
|||||||
+30
-81
@@ -2,7 +2,6 @@ package com.seibel.distanthorizons.common.wrappers.world;
|
|||||||
|
|
||||||
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType;
|
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType;
|
||||||
import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister;
|
import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister;
|
||||||
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper;
|
import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper;
|
||||||
import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper;
|
import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper;
|
||||||
import com.seibel.distanthorizons.common.wrappers.block.ClientBlockStateColorCache;
|
import com.seibel.distanthorizons.common.wrappers.block.ClientBlockStateColorCache;
|
||||||
@@ -25,8 +24,7 @@ import net.minecraft.client.multiplayer.ClientLevel;
|
|||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
import net.minecraft.world.level.chunk.ChunkSource;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -54,7 +52,7 @@ import com.seibel.distanthorizons.core.util.ColorUtil;
|
|||||||
|
|
||||||
public class ClientLevelWrapper implements IClientLevelWrapper
|
public class ClientLevelWrapper implements IClientLevelWrapper
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(ClientLevelWrapper.class.getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
/**
|
/**
|
||||||
* weak references are to prevent rare issues
|
* weak references are to prevent rare issues
|
||||||
* where, upon world closure, some levels aren't shutdown/removed properly
|
* where, upon world closure, some levels aren't shutdown/removed properly
|
||||||
@@ -66,17 +64,14 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
private static final Minecraft MINECRAFT = Minecraft.getInstance();
|
private static final Minecraft MINECRAFT = Minecraft.getInstance();
|
||||||
|
|
||||||
private final ClientLevel level;
|
private final ClientLevel level;
|
||||||
private final ConcurrentHashMap<BlockState, ClientBlockStateColorCache> blockCache = new ConcurrentHashMap<>();
|
private final ConcurrentHashMap<BlockState, ClientBlockStateColorCache> blockColorCacheByBlockState = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
/** cached method reference to reduce GC overhead */
|
/** cached method reference to reduce GC overhead */
|
||||||
private final Function<BlockState, ClientBlockStateColorCache> cachedBlockColorCacheFunction = (blockState) -> this.createBlockColorCache(blockState);
|
private final Function<BlockState, ClientBlockStateColorCache> createCachedBlockColorCacheFunc = (blockState) -> new ClientBlockStateColorCache(blockState, this);
|
||||||
|
|
||||||
|
|
||||||
private BlockStateWrapper dirtBlockWrapper;
|
private BlockStateWrapper dirtBlockWrapper;
|
||||||
private BlockStateWrapper waterBlockWrapper;
|
private IDhLevel dhLevel;
|
||||||
private BiomeWrapper plainsBiomeWrapper;
|
|
||||||
@Deprecated // TODO circular references are bad
|
|
||||||
private IDhLevel parentDhLevel;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -168,13 +163,17 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// this method only makes sense if we are running a single-player server
|
||||||
|
if (MINECRAFT.getSingleplayerServer() == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
Iterable<ServerLevel> serverLevels = MINECRAFT.getSingleplayerServer().getAllLevels();
|
Iterable<ServerLevel> serverLevels = MINECRAFT.getSingleplayerServer().getAllLevels();
|
||||||
|
|
||||||
// attempt to find the server level with the same dimension type
|
// attempt to find the server level with the same dimension type
|
||||||
// TODO this assumes only one level per dimension type, the SubDimensionLevelMatcher will need to be added for supporting multiple levels per dimension
|
// Note: this assumes only one level per dimension type, multiverse servers may not behave correctly
|
||||||
ServerLevelWrapper foundLevelWrapper = null;
|
ServerLevelWrapper foundLevelWrapper = null;
|
||||||
|
|
||||||
// TODO: Surely there is a more efficient way to write this code
|
|
||||||
for (ServerLevel serverLevel : serverLevels)
|
for (ServerLevel serverLevel : serverLevels)
|
||||||
{
|
{
|
||||||
if (serverLevel.dimension() == this.level.dimension())
|
if (serverLevel.dimension() == this.level.dimension())
|
||||||
@@ -200,16 +199,18 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
//====================//
|
//====================//
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBlockColor(DhBlockPos pos, IBiomeWrapper biome, FullDataSourceV2 fullDataSource, IBlockStateWrapper blockWrapper)
|
public int getBlockColor(DhBlockPos blockPos, IBiomeWrapper biome, FullDataSourceV2 fullDataSource, IBlockStateWrapper blockWrapper)
|
||||||
{
|
{
|
||||||
ClientBlockStateColorCache blockColorCache = this.blockCache.computeIfAbsent(
|
ClientBlockStateColorCache blockColorCache = this.blockColorCacheByBlockState.get(((BlockStateWrapper) blockWrapper).blockState);
|
||||||
((BlockStateWrapper) blockWrapper).blockState,
|
if (blockColorCache == null)
|
||||||
this.cachedBlockColorCacheFunction);
|
{
|
||||||
|
blockColorCache = this.blockColorCacheByBlockState.computeIfAbsent(
|
||||||
|
((BlockStateWrapper) blockWrapper).blockState,
|
||||||
|
this.createCachedBlockColorCacheFunc);
|
||||||
|
}
|
||||||
|
|
||||||
return blockColorCache.getColor((BiomeWrapper) biome, fullDataSource, pos);
|
return blockColorCache.getColor((BiomeWrapper) biome, fullDataSource, blockPos);
|
||||||
}
|
}
|
||||||
/** used by {@link ClientLevelWrapper#cachedBlockColorCacheFunction} */
|
|
||||||
private ClientBlockStateColorCache createBlockColorCache(BlockState block) { return new ClientBlockStateColorCache(block, this); }
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -233,47 +234,7 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getWaterBlockColor()
|
public void clearBlockColorCache() { this.blockColorCacheByBlockState.clear(); }
|
||||||
{
|
|
||||||
if (this.waterBlockWrapper == null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.waterBlockWrapper = (BlockStateWrapper) BlockStateWrapper.deserialize(BlockStateWrapper.WATER_RESOURCE_LOCATION_STRING, this);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
// shouldn't happen, but just in case
|
|
||||||
LOGGER.warn("Unable to get water color with resource location ["+BlockStateWrapper.WATER_RESOURCE_LOCATION_STRING+"] with level ["+this+"].", e);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.getBlockColor(DhBlockPos.ZERO, BiomeWrapper.EMPTY_WRAPPER, null, this.waterBlockWrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clearBlockColorCache() { this.blockCache.clear(); }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IBiomeWrapper getPlainsBiomeWrapper()
|
|
||||||
{
|
|
||||||
if (this.plainsBiomeWrapper == null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.plainsBiomeWrapper = (BiomeWrapper) BiomeWrapper.deserialize(BiomeWrapper.PLAINS_RESOURCE_LOCATION_STRING, this);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
// shouldn't happen, but just in case
|
|
||||||
LOGGER.warn("Unable to get planes biome with resource location ["+BiomeWrapper.PLAINS_RESOURCE_LOCATION_STRING+"] with level ["+this+"].", e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.plainsBiomeWrapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IDimensionTypeWrapper getDimensionType() { return DimensionTypeWrapper.getDimensionTypeWrapper(this.level.dimensionType()); }
|
public IDimensionTypeWrapper getDimensionType() { return DimensionTypeWrapper.getDimensionTypeWrapper(this.level.dimensionType()); }
|
||||||
@@ -331,20 +292,6 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
return new ChunkWrapper(chunk, this);
|
return new ChunkWrapper(chunk, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasChunkLoaded(int chunkX, int chunkZ)
|
|
||||||
{
|
|
||||||
ChunkSource source = this.level.getChunkSource();
|
|
||||||
return source.hasChunk(chunkX, chunkZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IBlockStateWrapper getBlockState(DhBlockPos pos)
|
|
||||||
{ return BlockStateWrapper.fromBlockState(this.level.getBlockState(McObjectConverter.Convert(pos)), this); }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IBiomeWrapper getBiome(DhBlockPos pos) { return BiomeWrapper.getBiomeWrapper(this.level.getBiome(McObjectConverter.Convert(pos)), this); }
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClientLevel getWrappedMcObject() { return this.level; }
|
public ClientLevel getWrappedMcObject() { return this.level; }
|
||||||
|
|
||||||
@@ -352,18 +299,18 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
public void onUnload()
|
public void onUnload()
|
||||||
{
|
{
|
||||||
LEVEL_WRAPPER_REF_BY_CLIENT_LEVEL.remove(this.level);
|
LEVEL_WRAPPER_REF_BY_CLIENT_LEVEL.remove(this.level);
|
||||||
this.parentDhLevel = null;
|
this.dhLevel = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public File getDhSaveFolder()
|
public File getDhSaveFolder()
|
||||||
{
|
{
|
||||||
if (this.parentDhLevel == null)
|
if (this.dhLevel == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.parentDhLevel.getSaveStructure().getSaveFolder(this);
|
return this.dhLevel.getSaveStructure().getSaveFolder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -374,17 +321,19 @@ public class ClientLevelWrapper implements IClientLevelWrapper
|
|||||||
//===================//
|
//===================//
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setParentLevel(IDhLevel parentLevel) { this.parentDhLevel = parentLevel; }
|
public void setDhLevel(IDhLevel dhLevel) { this.dhLevel = dhLevel; }
|
||||||
|
@Override
|
||||||
|
public IDhLevel getDhLevel() { return this.dhLevel; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IDhApiCustomRenderRegister getRenderRegister()
|
public IDhApiCustomRenderRegister getRenderRegister()
|
||||||
{
|
{
|
||||||
if (this.parentDhLevel == null)
|
if (this.dhLevel == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.parentDhLevel.getGenericRenderer();
|
return this.dhLevel.getGenericRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+79
-50
@@ -24,21 +24,18 @@ import java.lang.ref.WeakReference;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType;
|
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType;
|
||||||
import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister;
|
import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister;
|
||||||
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper;
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper;
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
||||||
|
import com.seibel.distanthorizons.core.api.internal.SharedApi;
|
||||||
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.level.IDhLevel;
|
import com.seibel.distanthorizons.core.level.IDhLevel;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos;
|
import com.seibel.distanthorizons.core.network.messages.base.LevelInitMessage;
|
||||||
import com.seibel.distanthorizons.core.pos.DhChunkPos;
|
import com.seibel.distanthorizons.core.pos.DhChunkPos;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper;
|
import com.seibel.distanthorizons.core.world.EWorldEnvironment;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
|
|
||||||
|
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
@@ -52,16 +49,12 @@ import net.minecraft.world.level.chunk.ChunkStatus;
|
|||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MC_VER < MC_1_21_3
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
#else
|
import org.jetbrains.annotations.Nullable;
|
||||||
import java.nio.file.Path;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
|
|
||||||
public class ServerLevelWrapper implements IServerLevelWrapper
|
public class ServerLevelWrapper implements IServerLevelWrapper
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
/**
|
/**
|
||||||
* weak references are to prevent rare issues
|
* weak references are to prevent rare issues
|
||||||
* where, upon world closure, some levels aren't shutdown/removed properly
|
* where, upon world closure, some levels aren't shutdown/removed properly
|
||||||
@@ -69,8 +62,13 @@ public class ServerLevelWrapper implements IServerLevelWrapper
|
|||||||
private static final Map<ServerLevel, WeakReference<ServerLevelWrapper>> LEVEL_WRAPPER_REF_BY_SERVER_LEVEL = Collections.synchronizedMap(new WeakHashMap<>());
|
private static final Map<ServerLevel, WeakReference<ServerLevelWrapper>> LEVEL_WRAPPER_REF_BY_SERVER_LEVEL = Collections.synchronizedMap(new WeakHashMap<>());
|
||||||
|
|
||||||
private final ServerLevel level;
|
private final ServerLevel level;
|
||||||
@Deprecated // TODO circular references are bad
|
private IDhLevel dhLevel;
|
||||||
private IDhLevel parentDhLevel;
|
|
||||||
|
/**
|
||||||
|
* this name is cached to prevent issues during shutdown where
|
||||||
|
* the server variables needed may no longer be available.
|
||||||
|
*/
|
||||||
|
private final String KeyedLevelDimensionName;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -95,7 +93,11 @@ public class ServerLevelWrapper implements IServerLevelWrapper
|
|||||||
}).get();
|
}).get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerLevelWrapper(ServerLevel level) { this.level = level; }
|
public ServerLevelWrapper(ServerLevel level)
|
||||||
|
{
|
||||||
|
this.level = level;
|
||||||
|
this.KeyedLevelDimensionName = this.createKeyedLevelDimensionName();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -114,16 +116,60 @@ public class ServerLevelWrapper implements IServerLevelWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getWorldFolderName()
|
public String getKeyedLevelDimensionName() { return this.KeyedLevelDimensionName; }
|
||||||
{
|
|
||||||
// Need specifically overworld since it's the only dimension that is stored in a server root folder
|
|
||||||
|
|
||||||
#if MC_VER >= MC_1_21_3
|
private String createKeyedLevelDimensionName()
|
||||||
return this.level.getServer().getLevel(Level.OVERWORLD).getChunkSource().getDataStorage().dataFolder.getParent().getFileName().toString();
|
{
|
||||||
#else // <= 1.21.3
|
String dimensionName = this.getDhIdentifier();
|
||||||
return this.level.getServer().getLevel(Level.OVERWORLD).getChunkSource().getDataStorage().dataFolder.getParentFile().getName();
|
|
||||||
#endif
|
if (Config.Server.sendLevelKeys.get())
|
||||||
|
{
|
||||||
|
String levelKeyPrefix = Config.Server.levelKeyPrefix.get();
|
||||||
|
|
||||||
|
if (SharedApi.getEnvironment() == EWorldEnvironment.CLIENT_SERVER)
|
||||||
|
{
|
||||||
|
String cleanWorldFolderName = this.getWorldFolderName()
|
||||||
|
.replaceAll("[^" + LevelInitMessage.ALLOWED_CHARS_REGEX + " ]", "")
|
||||||
|
.replaceAll(" ", "_");
|
||||||
|
|
||||||
|
levelKeyPrefix += (!levelKeyPrefix.isEmpty() ? "_" : "") + cleanWorldFolderName
|
||||||
|
+ "_" + this.getHashedSeedEncoded();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (levelKeyPrefix.isEmpty())
|
||||||
|
{
|
||||||
|
levelKeyPrefix = this.getHashedSeedEncoded();
|
||||||
|
}
|
||||||
|
|
||||||
|
String mainPart = "@" + dimensionName;
|
||||||
|
|
||||||
|
return levelKeyPrefix.substring(0, Math.min(
|
||||||
|
LevelInitMessage.MAX_LENGTH - mainPart.length(),
|
||||||
|
levelKeyPrefix.length()
|
||||||
|
)) + mainPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dimensionName;
|
||||||
}
|
}
|
||||||
|
private String getWorldFolderName()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// We use the overworld since it's the only dimension that is stored in the server root folder
|
||||||
|
|
||||||
|
#if MC_VER >= MC_1_21_3
|
||||||
|
return this.level.getServer().getLevel(Level.OVERWORLD).getChunkSource().getDataStorage().dataFolder.getParent().getFileName().toString();
|
||||||
|
#else // <= 1.21.3
|
||||||
|
return this.level.getServer().getLevel(Level.OVERWORLD).getChunkSource().getDataStorage().dataFolder.getParentFile().getName();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
LOGGER.warn("Unable to get world folder name. LODs may not load or save correctly. Error: ["+e.getMessage()+"].", e);
|
||||||
|
return "unknown_world";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DimensionTypeWrapper getDimensionType() { return DimensionTypeWrapper.getDimensionTypeWrapper(this.level.dimensionType()); }
|
public DimensionTypeWrapper getDimensionType() { return DimensionTypeWrapper.getDimensionTypeWrapper(this.level.dimensionType()); }
|
||||||
@@ -180,26 +226,6 @@ public class ServerLevelWrapper implements IServerLevelWrapper
|
|||||||
return new ChunkWrapper(chunk, this);
|
return new ChunkWrapper(chunk, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasChunkLoaded(int chunkX, int chunkZ)
|
|
||||||
{
|
|
||||||
// world.hasChunk(chunkX, chunkZ); THIS DOES NOT WORK FOR CLIENT LEVEL CAUSE MOJANG ALWAYS RETURN TRUE FOR THAT!
|
|
||||||
ChunkSource source = this.level.getChunkSource();
|
|
||||||
return source.hasChunk(chunkX, chunkZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IBlockStateWrapper getBlockState(DhBlockPos pos)
|
|
||||||
{
|
|
||||||
return BlockStateWrapper.fromBlockState(this.level.getBlockState(McObjectConverter.Convert(pos)), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IBiomeWrapper getBiome(DhBlockPos pos)
|
|
||||||
{
|
|
||||||
return BiomeWrapper.getBiomeWrapper(this.level.getBiome(McObjectConverter.Convert(pos)), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ServerLevel getWrappedMcObject() { return this.level; }
|
public ServerLevel getWrappedMcObject() { return this.level; }
|
||||||
|
|
||||||
@@ -208,28 +234,31 @@ public class ServerLevelWrapper implements IServerLevelWrapper
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setParentLevel(IDhLevel parentLevel) { this.parentDhLevel = parentLevel; }
|
public void setDhLevel(IDhLevel dhLevel) { this.dhLevel = dhLevel; }
|
||||||
|
@Override
|
||||||
|
@Nullable
|
||||||
|
public IDhLevel getDhLevel() { return this.dhLevel; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IDhApiCustomRenderRegister getRenderRegister()
|
public IDhApiCustomRenderRegister getRenderRegister()
|
||||||
{
|
{
|
||||||
if (this.parentDhLevel == null)
|
if (this.dhLevel == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.parentDhLevel.getGenericRenderer();
|
return this.dhLevel.getGenericRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public File getDhSaveFolder()
|
public File getDhSaveFolder()
|
||||||
{
|
{
|
||||||
if (this.parentDhLevel == null)
|
if (this.dhLevel == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.parentDhLevel.getSaveStructure().getSaveFolder(this);
|
return this.dhLevel.getSaveStructure().getSaveFolder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+60
-38
@@ -29,8 +29,8 @@ import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
|||||||
import com.seibel.distanthorizons.core.generation.DhLightingEngine;
|
import com.seibel.distanthorizons.core.generation.DhLightingEngine;
|
||||||
import com.seibel.distanthorizons.core.level.IDhServerLevel;
|
import com.seibel.distanthorizons.core.level.IDhServerLevel;
|
||||||
import com.seibel.distanthorizons.core.config.Config;
|
import com.seibel.distanthorizons.core.config.Config;
|
||||||
import com.seibel.distanthorizons.core.logging.ConfigBasedLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.logging.ConfigBasedSpamLogger;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import com.seibel.distanthorizons.core.pos.DhChunkPos;
|
import com.seibel.distanthorizons.core.pos.DhChunkPos;
|
||||||
import com.seibel.distanthorizons.core.util.objects.EventTimer;
|
import com.seibel.distanthorizons.core.util.objects.EventTimer;
|
||||||
import com.seibel.distanthorizons.core.util.LodUtil;
|
import com.seibel.distanthorizons.core.util.LodUtil;
|
||||||
@@ -42,6 +42,8 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.worldGeneration.Abstrac
|
|||||||
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.channels.ClosedByInterruptException;
|
||||||
|
import java.nio.channels.ClosedChannelException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
@@ -71,15 +73,17 @@ import net.minecraft.world.level.levelgen.FlatLevelSource;
|
|||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
import net.minecraft.world.level.levelgen.Heightmap;
|
||||||
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
|
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
|
|
||||||
#if MC_VER <= MC_1_17_1
|
#if MC_VER <= MC_1_17_1
|
||||||
#elif MC_VER <= MC_1_19_2
|
#elif MC_VER <= MC_1_19_2
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
#else
|
#elif MC_VER <= MC_1_19_4
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
|
#elif MC_VER < MC_1_21_3
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if MC_VER <= MC_1_20_4
|
#if MC_VER <= MC_1_20_4
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||||
#else
|
#else
|
||||||
@@ -101,28 +105,32 @@ Lod Generation: 0.269023348s
|
|||||||
*/
|
*/
|
||||||
public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnvironmentWrapper
|
public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnvironmentWrapper
|
||||||
{
|
{
|
||||||
public static final ConfigBasedSpamLogger PREF_LOGGER =
|
public static final DhLogger PREF_LOGGER = new DhLoggerBuilder()
|
||||||
new ConfigBasedSpamLogger(LogManager.getLogger("LodWorldGen"),
|
.name("LOD World Gen")
|
||||||
() -> Config.Common.Logging.logWorldGenPerformance.get(), 1);
|
.fileLevelConfig(Config.Common.Logging.logWorldGenPerformanceToFile)
|
||||||
public static final ConfigBasedLogger EVENT_LOGGER =
|
.maxCountPerSecond(1)
|
||||||
new ConfigBasedLogger(LogManager.getLogger("LodWorldGen"),
|
.build();
|
||||||
() -> Config.Common.Logging.logWorldGenEvent.get());
|
public static final DhLogger EVENT_LOGGER = new DhLoggerBuilder()
|
||||||
public static final ConfigBasedLogger LOAD_LOGGER =
|
.name("LOD World Gen")
|
||||||
new ConfigBasedLogger(LogManager.getLogger("LodWorldGen"),
|
.fileLevelConfig(Config.Common.Logging.logWorldGenEventToFile)
|
||||||
() -> Config.Common.Logging.logWorldGenLoadEvent.get());
|
.build();
|
||||||
|
public static final DhLogger CHUNK_LOAD_LOGGER = new DhLoggerBuilder()
|
||||||
|
.name("LOD World Gen")
|
||||||
|
.fileLevelConfig(Config.Common.Logging.logWorldGenChunkLoadEventToFile)
|
||||||
|
.build();
|
||||||
|
|
||||||
#if MC_VER < MC_1_21_5
|
#if MC_VER < MC_1_21_5
|
||||||
private static final TicketType<ChunkPos> DH_SERVER_GEN_TICKET = TicketType.create("dh_server_gen_ticket", Comparator.comparingLong(ChunkPos::toLong));
|
private static final TicketType<ChunkPos> DH_SERVER_GEN_TICKET = TicketType.create("dh_server_gen_ticket", Comparator.comparingLong(ChunkPos::toLong));
|
||||||
#elif MC_VER < MC_1_21_9
|
#elif MC_VER < MC_1_21_9
|
||||||
private static final TicketType DH_SERVER_GEN_TICKET = new TicketType(/* timeout, 0 = disabled*/0L, /* persist */ false, TicketType.TicketUse.LOADING);
|
private static final TicketType DH_SERVER_GEN_TICKET = new TicketType(/* timeout, 0 = disabled*/0L, /* persist */ false, TicketType.TicketUse.LOADING);
|
||||||
#else
|
#else
|
||||||
private static final TicketType DH_SERVER_GEN_TICKET = new TicketType(/* timeout, 0 = disabled*/0L, /* flags */0);
|
private static final TicketType DH_SERVER_GEN_TICKET = new TicketType(/* timeout, 0 = disabled*/0L, /* flags */TicketType.FLAG_LOADING);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private static final IModChecker MOD_CHECKER = SingletonInjector.INSTANCE.get(IModChecker.class);
|
private static final IModChecker MOD_CHECKER = SingletonInjector.INSTANCE.get(IModChecker.class);
|
||||||
|
|
||||||
|
|
||||||
private final IDhServerLevel serverlevel;
|
private final IDhServerLevel serverLevel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* will be true if C2ME is installed (since they require us to
|
* will be true if C2ME is installed (since they require us to
|
||||||
@@ -214,16 +222,16 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
MAX_WORLD_GEN_CHUNK_BORDER_NEEDED = 0;
|
MAX_WORLD_GEN_CHUNK_BORDER_NEEDED = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BatchGenerationEnvironment(IDhServerLevel serverlevel)
|
public BatchGenerationEnvironment(IDhServerLevel serverLevel)
|
||||||
{
|
{
|
||||||
super(serverlevel);
|
super(serverLevel);
|
||||||
this.serverlevel = serverlevel;
|
this.serverLevel = serverLevel;
|
||||||
|
|
||||||
EVENT_LOGGER.info("================WORLD_GEN_STEP_INITING=============");
|
EVENT_LOGGER.info("================WORLD_GEN_STEP_INITING=============");
|
||||||
|
|
||||||
serverlevel.getServerLevelWrapper().getDimensionType();
|
serverLevel.getServerLevelWrapper().getDimensionType();
|
||||||
|
|
||||||
ChunkGenerator generator = ((ServerLevelWrapper) (serverlevel.getServerLevelWrapper())).getLevel().getChunkSource().getGenerator();
|
ChunkGenerator generator = ((ServerLevelWrapper) (serverLevel.getServerLevelWrapper())).getLevel().getChunkSource().getGenerator();
|
||||||
if (!(generator instanceof NoiseBasedChunkGenerator ||
|
if (!(generator instanceof NoiseBasedChunkGenerator ||
|
||||||
generator instanceof DebugLevelSource ||
|
generator instanceof DebugLevelSource ||
|
||||||
generator instanceof FlatLevelSource))
|
generator instanceof FlatLevelSource))
|
||||||
@@ -251,7 +259,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
this.pullExistingChunkUsingMcAsyncMethod = true;
|
this.pullExistingChunkUsingMcAsyncMethod = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.params = new GlobalParameters(serverlevel);
|
this.params = new GlobalParameters(serverLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -311,7 +319,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
event.future.get(); // Should throw exception
|
event.future.get(); // Should throw exception
|
||||||
LodUtil.assertNotReach();
|
LodUtil.assertNotReach("Exceptionally completed world gen Future should have thrown an exception.");
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -465,7 +473,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
else if (chunk != null)
|
else if (chunk != null)
|
||||||
{
|
{
|
||||||
// wrap the chunk
|
// wrap the chunk
|
||||||
ChunkWrapper chunkWrapper = new ChunkWrapper(chunk, this.serverlevel.getLevelWrapper());
|
ChunkWrapper chunkWrapper = new ChunkWrapper(chunk, this.serverLevel.getLevelWrapper());
|
||||||
chunkWrapperList.set(relX, relZ, chunkWrapper);
|
chunkWrapperList.set(relX, relZ, chunkWrapper);
|
||||||
|
|
||||||
// try setting the wrapper's lighting
|
// try setting the wrapper's lighting
|
||||||
@@ -523,10 +531,10 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
|
|
||||||
genEvent.timer.complete();
|
genEvent.timer.complete();
|
||||||
genEvent.refreshTimeout();
|
genEvent.refreshTimeout();
|
||||||
if (PREF_LOGGER.canMaybeLog())
|
if (PREF_LOGGER.canLog())
|
||||||
{
|
{
|
||||||
genEvent.threadedParam.perf.recordEvent(genEvent.timer);
|
genEvent.threadedParam.perf.recordEvent(genEvent.timer);
|
||||||
PREF_LOGGER.debugInc(genEvent.timer.toString());
|
PREF_LOGGER.debug(genEvent.timer.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -675,15 +683,28 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
actualThrowable = completionException.getCause();
|
actualThrowable = completionException.getCause();
|
||||||
}
|
}
|
||||||
|
|
||||||
LOAD_LOGGER.warn("DistantHorizons: Couldn't load or make chunk ["+chunkPos+"], error: ["+actualThrowable.getMessage()+"].", actualThrowable);
|
// interrupts mean the world generator is being shut down, no need to log that
|
||||||
|
boolean isShutdownException =
|
||||||
|
actualThrowable instanceof InterruptedException
|
||||||
|
|| actualThrowable instanceof ClosedByInterruptException;
|
||||||
|
if (!isShutdownException)
|
||||||
|
{
|
||||||
|
CHUNK_LOAD_LOGGER.warn("DistantHorizons: Couldn't load or make chunk ["+chunkPos+"], error: ["+actualThrowable.getMessage()+"].", actualThrowable);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
catch (ClosedByInterruptException ignore)
|
||||||
|
{
|
||||||
|
// this just means the world generator is being shut down
|
||||||
|
return CompletableFuture.completedFuture(null);
|
||||||
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LOAD_LOGGER.warn("DistantHorizons: Couldn't load or make chunk [" + chunkPos + "]. Error: [" + e.getMessage() + "].", e);
|
CHUNK_LOAD_LOGGER.warn("DistantHorizons: Couldn't load or make chunk [" + chunkPos + "]. Error: [" + e.getMessage() + "].", e);
|
||||||
return CompletableFuture.completedFuture(null);
|
return CompletableFuture.completedFuture(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -699,7 +720,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LOAD_LOGGER.debug("DistantHorizons: Loading chunk [" + chunkPos + "] from disk.");
|
CHUNK_LOAD_LOGGER.debug("DistantHorizons: Loading chunk [" + chunkPos + "] from disk.");
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
ChunkAccess chunk = ChunkFileReader.read(level, chunkPos, chunkData);
|
ChunkAccess chunk = ChunkFileReader.read(level, chunkPos, chunkData);
|
||||||
@@ -721,7 +742,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LOAD_LOGGER.error(
|
CHUNK_LOAD_LOGGER.error(
|
||||||
"DistantHorizons: couldn't load or make chunk at [" + chunkPos + "]." +
|
"DistantHorizons: couldn't load or make chunk at [" + chunkPos + "]." +
|
||||||
"Please try optimizing your world to fix this issue. \n" +
|
"Please try optimizing your world to fix this issue. \n" +
|
||||||
"World optimization can be done from the singleplayer world selection screen.\n" +
|
"World optimization can be done from the singleplayer world selection screen.\n" +
|
||||||
@@ -783,12 +804,12 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
|
|
||||||
if (throwable != null)
|
if (throwable != null)
|
||||||
{
|
{
|
||||||
LOAD_LOGGER.warn("DistantHorizons: Couldn't load chunk [" + chunkPos + "] from server, error: [" + actualThrowable.getMessage() + "].", actualThrowable);
|
CHUNK_LOAD_LOGGER.warn("DistantHorizons: Couldn't load chunk [" + chunkPos + "] from server, error: [" + actualThrowable.getMessage() + "].", actualThrowable);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chunk != null)
|
if (chunk != null)
|
||||||
{
|
{
|
||||||
ChunkWrapper chunkWrapper = new ChunkWrapper(chunk, this.serverlevel.getLevelWrapper());
|
ChunkWrapper chunkWrapper = new ChunkWrapper(chunk, this.serverLevel.getLevelWrapper());
|
||||||
chunkWrappersByDhPos.put(new DhChunkPos(chunkPos.x, chunkPos.z), chunkWrapper);
|
chunkWrappersByDhPos.put(new DhChunkPos(chunkPos.x, chunkPos.z), chunkWrapper);
|
||||||
}
|
}
|
||||||
}, runnableQueue::add);
|
}, runnableQueue::add);
|
||||||
@@ -802,7 +823,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
{
|
{
|
||||||
// generate chunk lighting using DH's lighting engine
|
// generate chunk lighting using DH's lighting engine
|
||||||
genEvent.timer.nextEvent("light");
|
genEvent.timer.nextEvent("light");
|
||||||
int maxSkyLight = this.serverlevel.getServerLevelWrapper().hasSkyLight() ? LodUtil.MAX_MC_LIGHT : LodUtil.MIN_MC_LIGHT;
|
int maxSkyLight = this.serverLevel.getServerLevelWrapper().hasSkyLight() ? LodUtil.MAX_MC_LIGHT : LodUtil.MIN_MC_LIGHT;
|
||||||
|
|
||||||
ArrayList<IChunkWrapper> generatedChunks = new ArrayList<>(chunkWrappersByDhPos.values());
|
ArrayList<IChunkWrapper> generatedChunks = new ArrayList<>(chunkWrappersByDhPos.values());
|
||||||
for (IChunkWrapper iChunkWrapper : generatedChunks)
|
for (IChunkWrapper iChunkWrapper : generatedChunks)
|
||||||
@@ -815,7 +836,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
DhLightingEngine.INSTANCE.bakeChunkBlockLighting(iChunkWrapper, generatedChunks, maxSkyLight);
|
DhLightingEngine.INSTANCE.bakeChunkBlockLighting(iChunkWrapper, generatedChunks, maxSkyLight);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.serverlevel.updateBeaconBeamsForChunk(iChunkWrapper, generatedChunks);
|
this.serverLevel.updateBeaconBeamsForChunk(iChunkWrapper, generatedChunks);
|
||||||
}
|
}
|
||||||
|
|
||||||
genEvent.timer.nextEvent("cleanup");
|
genEvent.timer.nextEvent("cleanup");
|
||||||
@@ -838,10 +859,10 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
|
|
||||||
genEvent.timer.complete();
|
genEvent.timer.complete();
|
||||||
genEvent.refreshTimeout();
|
genEvent.refreshTimeout();
|
||||||
if (PREF_LOGGER.canMaybeLog())
|
if (PREF_LOGGER.canLog())
|
||||||
{
|
{
|
||||||
genEvent.threadedParam.perf.recordEvent(genEvent.timer);
|
genEvent.threadedParam.perf.recordEvent(genEvent.timer);
|
||||||
PREF_LOGGER.debugInc(genEvent.timer.toString());
|
PREF_LOGGER.debug(genEvent.timer.toString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1046,7 +1067,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
|
|
||||||
// generate lighting using DH's lighting engine
|
// generate lighting using DH's lighting engine
|
||||||
|
|
||||||
int maxSkyLight = this.serverlevel.getServerLevelWrapper().hasSkyLight() ? 15 : 0;
|
int maxSkyLight = this.serverLevel.getServerLevelWrapper().hasSkyLight() ? 15 : 0;
|
||||||
|
|
||||||
// only light generated chunks,
|
// only light generated chunks,
|
||||||
// attempting to light un-generated chunks will cause lighting issues on bordering generated chunks
|
// attempting to light un-generated chunks will cause lighting issues on bordering generated chunks
|
||||||
@@ -1082,7 +1103,7 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
DhLightingEngine.INSTANCE.bakeChunkBlockLighting(centerChunk, iChunkWrapperList, maxSkyLight);
|
DhLightingEngine.INSTANCE.bakeChunkBlockLighting(centerChunk, iChunkWrapperList, maxSkyLight);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.serverlevel.updateBeaconBeamsForChunk(centerChunk, iChunkWrapperList);
|
this.serverLevel.updateBeaconBeamsForChunk(centerChunk, iChunkWrapperList);
|
||||||
}
|
}
|
||||||
|
|
||||||
genEvent.refreshTimeout();
|
genEvent.refreshTimeout();
|
||||||
@@ -1118,9 +1139,10 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv
|
|||||||
{
|
{
|
||||||
regionStorage.close();
|
regionStorage.close();
|
||||||
}
|
}
|
||||||
|
catch (ClosedChannelException ignore) { /* world generator is being shut down */ }
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
EVENT_LOGGER.error("Failed to close region file storage cache!", e);
|
EVENT_LOGGER.error("Failed to close region file storage cache, error: ["+e.getMessage()+"].", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -32,11 +32,11 @@ import com.seibel.distanthorizons.core.util.objects.EventTimer;
|
|||||||
import com.seibel.distanthorizons.core.util.threading.ThreadPoolUtil;
|
import com.seibel.distanthorizons.core.util.threading.ThreadPoolUtil;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
public final class GenerationEvent
|
public final class GenerationEvent
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();;
|
||||||
private static int generationFutureDebugIDs = 0;
|
private static int generationFutureDebugIDs = 0;
|
||||||
|
|
||||||
public final int id;
|
public final int id;
|
||||||
|
|||||||
+3
-2
@@ -24,7 +24,7 @@ import com.mojang.serialization.Dynamic;
|
|||||||
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
||||||
import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment;
|
import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment;
|
||||||
|
|
||||||
import com.seibel.distanthorizons.core.logging.ConfigBasedLogger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import com.seibel.distanthorizons.core.util.LodUtil;
|
import com.seibel.distanthorizons.core.util.LodUtil;
|
||||||
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.ChunkLightStorage;
|
import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.ChunkLightStorage;
|
||||||
|
|
||||||
@@ -93,6 +93,8 @@ public class ChunkFileReader
|
|||||||
{
|
{
|
||||||
private static final AtomicBoolean ZERO_CHUNK_POS_ERROR_LOGGED_REF = new AtomicBoolean(false);
|
private static final AtomicBoolean ZERO_CHUNK_POS_ERROR_LOGGED_REF = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
private static final DhLogger LOGGER = BatchGenerationEnvironment.CHUNK_LOAD_LOGGER;
|
||||||
|
|
||||||
|
|
||||||
#if MC_VER >= MC_1_21_9
|
#if MC_VER >= MC_1_21_9
|
||||||
// BLOCK_STATE_CODEC can no longer be statically created since
|
// BLOCK_STATE_CODEC can no longer be statically created since
|
||||||
@@ -108,7 +110,6 @@ public class ChunkFileReader
|
|||||||
private static final String FLUID_TICKS_TAG_18 = "fluid_ticks";
|
private static final String FLUID_TICKS_TAG_18 = "fluid_ticks";
|
||||||
private static final String BLOCK_TICKS_TAG_PRE18 = "TileTicks";
|
private static final String BLOCK_TICKS_TAG_PRE18 = "TileTicks";
|
||||||
private static final String FLUID_TICKS_TAG_PRE18 = "LiquidTicks";
|
private static final String FLUID_TICKS_TAG_PRE18 = "LiquidTicks";
|
||||||
private static final ConfigBasedLogger LOGGER = BatchGenerationEnvironment.LOAD_LOGGER;
|
|
||||||
|
|
||||||
private static boolean lightingSectionErrorLogged = false;
|
private static boolean lightingSectionErrorLogged = false;
|
||||||
|
|
||||||
|
|||||||
+7
-6
@@ -28,7 +28,7 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
|||||||
import com.seibel.distanthorizons.core.util.LodUtil;
|
import com.seibel.distanthorizons.core.util.LodUtil;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
import net.minecraft.world.level.block.SpawnerBlock;
|
import net.minecraft.world.level.block.SpawnerBlock;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ import net.minecraft.world.ticks.LevelTickAccess;
|
|||||||
|
|
||||||
public class DhLitWorldGenRegion extends WorldGenRegion
|
public class DhLitWorldGenRegion extends WorldGenRegion
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
private static ChunkStatus debugTriggeredForStatus = null;
|
private static ChunkStatus debugTriggeredForStatus = null;
|
||||||
|
|
||||||
@@ -352,7 +352,7 @@ public class DhLitWorldGenRegion extends WorldGenRegion
|
|||||||
ChunkAccess chunk = this.getChunkAccess(chunkX, chunkZ, chunkStatus, returnNonNull);
|
ChunkAccess chunk = this.getChunkAccess(chunkX, chunkZ, chunkStatus, returnNonNull);
|
||||||
if (chunk instanceof LevelChunk)
|
if (chunk instanceof LevelChunk)
|
||||||
{
|
{
|
||||||
chunk = new ImposterProtoChunk((LevelChunk) chunk #if MC_VER >= MC_1_18_2 , true #endif );
|
chunk = new ImposterProtoChunk((LevelChunk) chunk #if MC_VER >= MC_1_18_2 ,/* allow writes */ false #endif );
|
||||||
}
|
}
|
||||||
return chunk;
|
return chunk;
|
||||||
}
|
}
|
||||||
@@ -392,10 +392,11 @@ public class DhLitWorldGenRegion extends WorldGenRegion
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chunkStatus != ChunkStatus.EMPTY && chunkStatus != debugTriggeredForStatus)
|
if (chunkStatus != ChunkStatus.EMPTY
|
||||||
|
&& chunkStatus != debugTriggeredForStatus)
|
||||||
{
|
{
|
||||||
LOGGER.info("WorldGen requiring " + chunkStatus
|
LOGGER.info("WorldGen requiring [" + chunkStatus + "]"
|
||||||
+ " outside expected range detected. Force passing EMPTY chunk and seeing if it works.");
|
+ " is outside the expected range. Returning EMPTY chunk.");
|
||||||
debugTriggeredForStatus = chunkStatus;
|
debugTriggeredForStatus = chunkStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -7,7 +7,7 @@ import net.minecraft.nbt.NbtIo;
|
|||||||
import net.minecraft.world.level.ChunkPos;
|
import net.minecraft.world.level.ChunkPos;
|
||||||
import net.minecraft.world.level.chunk.storage.RegionFile;
|
import net.minecraft.world.level.chunk.storage.RegionFile;
|
||||||
import net.minecraft.world.level.chunk.storage.RegionFileStorage;
|
import net.minecraft.world.level.chunk.storage.RegionFileStorage;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
@@ -29,7 +29,7 @@ import net.minecraft.world.level.chunk.storage.RegionStorageInfo;
|
|||||||
*/
|
*/
|
||||||
public class RegionFileStorageExternalCache implements AutoCloseable
|
public class RegionFileStorageExternalCache implements AutoCloseable
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
/** Can be null due to the C2ME mod */
|
/** Can be null due to the C2ME mod */
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -139,7 +139,7 @@ public class RegionFileStorageExternalCache implements AutoCloseable
|
|||||||
|
|
||||||
if (retryCount >= maxRetryCount)
|
if (retryCount >= maxRetryCount)
|
||||||
{
|
{
|
||||||
BatchGenerationEnvironment.LOAD_LOGGER.warn("Concurrency issue detected when getting region file for chunk at [" + pos + "].");
|
BatchGenerationEnvironment.CHUNK_LOAD_LOGGER.warn("Concurrency issue detected when getting region file for chunk at [" + pos + "].");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -29,7 +29,7 @@ import com.seibel.distanthorizons.core.util.gridList.ArrayGridList;
|
|||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
import net.minecraft.world.level.chunk.ProtoChunk;
|
import net.minecraft.world.level.chunk.ProtoChunk;
|
||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
import net.minecraft.world.level.levelgen.Heightmap;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
#if MC_VER <= MC_1_20_4
|
#if MC_VER <= MC_1_20_4
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||||
@@ -42,7 +42,7 @@ import java.util.ConcurrentModificationException;
|
|||||||
|
|
||||||
public final class StepFeatures extends AbstractWorldGenStep
|
public final class StepFeatures extends AbstractWorldGenStep
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
public static final ChunkStatus STATUS = ChunkStatus.FEATURES;
|
public static final ChunkStatus STATUS = ChunkStatus.FEATURES;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -35,7 +35,7 @@ import net.minecraft.server.level.WorldGenRegion;
|
|||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
import net.minecraft.world.level.chunk.ProtoChunk;
|
import net.minecraft.world.level.chunk.ProtoChunk;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
#if MC_VER <= MC_1_20_4
|
#if MC_VER <= MC_1_20_4
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||||
@@ -46,7 +46,7 @@ import net.minecraft.world.level.chunk.status.ChunkStatus;
|
|||||||
|
|
||||||
public final class StepStructureStart extends AbstractWorldGenStep
|
public final class StepStructureStart extends AbstractWorldGenStep
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
private static final ChunkStatus STATUS = ChunkStatus.STRUCTURE_STARTS;
|
private static final ChunkStatus STATUS = ChunkStatus.STRUCTURE_STARTS;
|
||||||
private static final ReentrantLock STRUCTURE_PLACEMENT_LOCK = new ReentrantLock();
|
private static final ReentrantLock STRUCTURE_PLACEMENT_LOCK = new ReentrantLock();
|
||||||
|
|
||||||
|
|||||||
+1
-1
Submodule coreSubProjects updated: 9ddd917f3b...b82a59ecbc
@@ -68,7 +68,7 @@ import net.minecraft.client.multiplayer.ClientLevel;
|
|||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
import net.minecraft.world.phys.HitResult;
|
import net.minecraft.world.phys.HitResult;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -85,7 +85,7 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
private final ClientApi clientApi = ClientApi.INSTANCE;
|
private final ClientApi clientApi = ClientApi.INSTANCE;
|
||||||
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
||||||
private static final AbstractPluginPacketSender PACKET_SENDER = (AbstractPluginPacketSender) SingletonInjector.INSTANCE.get(IPluginPacketSender.class);
|
private static final AbstractPluginPacketSender PACKET_SENDER = (AbstractPluginPacketSender) SingletonInjector.INSTANCE.get(IPluginPacketSender.class);
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
// TODO we shouldn't be filtering keys on the Forge/Fabric side, only in ClientApi
|
// TODO we shouldn't be filtering keys on the Forge/Fabric side, only in ClientApi
|
||||||
private static final int[] KEY_TO_CHECK_FOR = { GLFW.GLFW_KEY_F6, GLFW.GLFW_KEY_F8, GLFW.GLFW_KEY_P};
|
private static final int[] KEY_TO_CHECK_FOR = { GLFW.GLFW_KEY_F6, GLFW.GLFW_KEY_F8, GLFW.GLFW_KEY_P};
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
|||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.lwjgl.util.tinyfd.TinyFileDialogs;
|
import org.lwjgl.util.tinyfd.TinyFileDialogs;
|
||||||
|
|
||||||
#if MC_VER >= MC_1_19_2
|
#if MC_VER >= MC_1_19_2
|
||||||
@@ -64,7 +64,7 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti
|
|||||||
private static final ResourceLocation INITIAL_PHASE = new ResourceLocation(ModInfo.RESOURCE_NAMESPACE, ModInfo.DEDICATED_SERVER_INITIAL_PATH);
|
private static final ResourceLocation INITIAL_PHASE = new ResourceLocation(ModInfo.RESOURCE_NAMESPACE, ModInfo.DEDICATED_SERVER_INITIAL_PATH);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import net.minecraft.client.gui.screens.TitleScreen;
|
|||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
#if MC_VER >= MC_1_20_6
|
#if MC_VER >= MC_1_20_6
|
||||||
import com.seibel.distanthorizons.common.CommonPacketPayload;
|
import com.seibel.distanthorizons.common.CommonPacketPayload;
|
||||||
@@ -52,7 +52,7 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
|
|||||||
private static final ServerApi SERVER_API = ServerApi.INSTANCE;
|
private static final ServerApi SERVER_API = ServerApi.INSTANCE;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private static final AbstractPluginPacketSender PACKET_SENDER = (AbstractPluginPacketSender) SingletonInjector.INSTANCE.get(IPluginPacketSender.class);
|
private static final AbstractPluginPacketSender PACKET_SENDER = (AbstractPluginPacketSender) SingletonInjector.INSTANCE.get(IPluginPacketSender.class);
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
private final boolean isDedicatedServer;
|
private final boolean isDedicatedServer;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -77,7 +77,7 @@ import org.spongepowered.asm.mixin.Unique;
|
|||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ public class MixinLevelRenderer
|
|||||||
private ClientLevel level;
|
private ClientLevel level;
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
#if MC_VER < MC_1_17_1
|
#if MC_VER < MC_1_17_1
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ import net.minecraft.client.gui.screens.Screen;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screens.TitleScreen;
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
@@ -34,7 +34,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
public abstract class MixinMinecraft
|
public abstract class MixinMinecraft
|
||||||
{
|
{
|
||||||
@Unique
|
@Unique
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MixinMinecraft.class.getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
|
|||||||
+2
-2
@@ -5,13 +5,13 @@ import com.seibel.distanthorizons.api.interfaces.block.IDhApiBlockStateWrapper;
|
|||||||
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiChunkProcessingEvent;
|
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiChunkProcessingEvent;
|
||||||
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiEventParam;
|
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiEventParam;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class TestChunkInputReplacerEvent extends DhApiChunkProcessingEvent
|
public class TestChunkInputReplacerEvent extends DhApiChunkProcessingEvent
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
private static final String REPLACEMENT_BLOCK_STATE_NAMESPACE = "minecraft:stone";
|
private static final String REPLACEMENT_BLOCK_STATE_NAMESPACE = "minecraft:stone";
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -13,7 +13,7 @@ import com.seibel.distanthorizons.api.objects.data.IDhApiFullDataSource;
|
|||||||
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
|
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -23,7 +23,7 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
public class TestGenericWorldGenerator implements IDhApiWorldGenerator
|
public class TestGenericWorldGenerator implements IDhApiWorldGenerator
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
private final IDhApiLevelWrapper levelWrapper;
|
private final IDhApiLevelWrapper levelWrapper;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -6,12 +6,12 @@ import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiLevelLo
|
|||||||
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiEventParam;
|
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiEventParam;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
// TODO add to API example once Builderb0y has given the all-clear
|
// TODO add to API example once Builderb0y has given the all-clear
|
||||||
public class TestWorldGenBindingEvent extends DhApiLevelLoadEvent
|
public class TestWorldGenBindingEvent extends DhApiLevelLoadEvent
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLevelLoad(DhApiEventParam<DhApiLevelLoadEvent.EventParam> event)
|
public void onLevelLoad(DhApiEventParam<DhApiLevelLoadEvent.EventParam> event)
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
|||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ public class ForgeClientProxy implements AbstractModInitializer.IEventProxy
|
|||||||
{
|
{
|
||||||
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
||||||
private static final ForgePluginPacketSender PACKET_SENDER = (ForgePluginPacketSender) SingletonInjector.INSTANCE.get(IPluginPacketSender.class);
|
private static final ForgePluginPacketSender PACKET_SENDER = (ForgePluginPacketSender) SingletonInjector.INSTANCE.get(IPluginPacketSender.class);
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
#if MC_VER < MC_1_19_2
|
#if MC_VER < MC_1_19_2
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ import net.minecraftforge.event.server.ServerStoppingEvent;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.client.gui.screens.TitleScreen;
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -29,7 +29,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
public class MixinMinecraft
|
public class MixinMinecraft
|
||||||
{
|
{
|
||||||
@Unique
|
@Unique
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MixinMinecraft.class.getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -5,8 +5,8 @@ org.gradle.caching=true
|
|||||||
|
|
||||||
# Mod Info
|
# Mod Info
|
||||||
mod_name=DistantHorizons
|
mod_name=DistantHorizons
|
||||||
mod_version=2.3.6-b
|
mod_version=2.3.7-b-dev
|
||||||
api_version=4.1.0
|
api_version=5.0.0
|
||||||
maven_group=com.seibel.distanthorizons
|
maven_group=com.seibel.distanthorizons
|
||||||
mod_readable_name=Distant Horizons
|
mod_readable_name=Distant Horizons
|
||||||
mod_description=This mod generates and renders simplified terrain beyond the normal view distance at a low performance cost. Allowing you to see much farther without turning your game into a slideshow.
|
mod_description=This mod generates and renders simplified terrain beyond the normal view distance at a low performance cost. Allowing you to see much farther without turning your game into a slideshow.
|
||||||
@@ -23,6 +23,7 @@ manifold_version=2025.1.27
|
|||||||
nightconfig_version=3.6.6
|
nightconfig_version=3.6.6
|
||||||
lz4_version=1.8.0
|
lz4_version=1.8.0
|
||||||
xz_version=1.9
|
xz_version=1.9
|
||||||
|
zstd_version=1.5.7-6
|
||||||
# Before updating, read relocate_natives/README.md
|
# Before updating, read relocate_natives/README.md
|
||||||
sqlite_jdbc_version=3.47.2.0
|
sqlite_jdbc_version=3.47.2.0
|
||||||
# 8.2.1 is the newest version we can use since that's the version MC 1.16.5 uses
|
# 8.2.1 is the newest version we can use since that's the version MC 1.16.5 uses
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import net.neoforged.neoforge.event.level.LevelEvent;
|
|||||||
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent;
|
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent;
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
|
||||||
@@ -64,7 +64,7 @@ import java.util.concurrent.AbstractExecutorService;
|
|||||||
public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||||
{
|
{
|
||||||
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import net.neoforged.bus.api.SubscribeEvent;
|
|||||||
import net.neoforged.neoforge.event.server.ServerAboutToStartEvent;
|
import net.neoforged.neoforge.event.server.ServerAboutToStartEvent;
|
||||||
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
|
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ public class NeoforgeServerProxy implements AbstractModInitializer.IEventProxy
|
|||||||
private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); }
|
private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); }
|
||||||
|
|
||||||
private final ServerApi serverApi = ServerApi.INSTANCE;
|
private final ServerApi serverApi = ServerApi.INSTANCE;
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
private final boolean isDedicated;
|
private final boolean isDedicated;
|
||||||
public static Supplier<Boolean> isGenerationThreadChecker = null;
|
public static Supplier<Boolean> isGenerationThreadChecker = null;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -48,7 +48,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
import com.seibel.distanthorizons.neoforge.NeoforgeClientProxy;
|
import com.seibel.distanthorizons.neoforge.NeoforgeClientProxy;
|
||||||
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
||||||
@@ -76,7 +76,7 @@ public class MixinLevelRenderer
|
|||||||
private ClientLevel level;
|
private ClientLevel level;
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants;
|
|||||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screens.TitleScreen;
|
import net.minecraft.client.gui.screens.TitleScreen;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -29,7 +29,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
public class MixinMinecraft
|
public class MixinMinecraft
|
||||||
{
|
{
|
||||||
@Unique
|
@Unique
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MixinMinecraft.class.getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Can be enabled for testing the auto updater UI. <br/>
|
* Can be enabled for testing the auto updater UI. <br/>
|
||||||
|
|||||||
+2
-2
@@ -3,7 +3,7 @@ package com.seibel.distanthorizons.neoforge.wrappers;
|
|||||||
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
|
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
|
||||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import org.apache.logging.log4j.Logger;
|
import com.seibel.distanthorizons.core.logging.DhLogger;
|
||||||
|
|
||||||
#if MC_VER < MC_1_21_9
|
#if MC_VER < MC_1_21_9
|
||||||
#else
|
#else
|
||||||
@@ -18,7 +18,7 @@ public class NeoforgeMinecraftRenderWrapper extends MinecraftRenderWrapper
|
|||||||
{
|
{
|
||||||
public static final NeoforgeMinecraftRenderWrapper INSTANCE = new NeoforgeMinecraftRenderWrapper();
|
public static final NeoforgeMinecraftRenderWrapper INSTANCE = new NeoforgeMinecraftRenderWrapper();
|
||||||
|
|
||||||
private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
private static final DhLogger LOGGER = new DhLoggerBuilder().build();
|
||||||
private static final Minecraft MC = Minecraft.getInstance();
|
private static final Minecraft MC = Minecraft.getInstance();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user