Merge remote-tracking branch 'root/main' into fix-portals

# Conflicts:
#	coreSubProjects
This commit is contained in:
Acuadragon100
2026-05-15 16:42:34 +02:00
11 changed files with 398 additions and 106 deletions
+2 -1
View File
@@ -41,7 +41,8 @@ build:
"1.19.4", "1.19.2",
"1.18.2",
"1.17.1",
"1.16.5"
"1.16.5",
"1.12.2"
]
script:
# this both runs the unit tests and assembles the code
@@ -43,10 +43,10 @@ public class CleanroomPluginPacketSender extends AbstractPluginPacketSender
AbstractPluginPacketSender.WRAPPER_PACKET_RESOURCE
);
public static void setPacketHandler(Consumer<AbstractNetworkMessage> consumer)
{
setPacketHandler((player, message) -> consumer.accept(message));
}
{ setPacketHandler((player, message) -> consumer.accept(message)); }
static BiConsumer<IServerPlayerWrapper, AbstractNetworkMessage> consumerPacket;
public static void setPacketHandler(BiConsumer<IServerPlayerWrapper, AbstractNetworkMessage> consumer)
{
@@ -57,15 +57,18 @@ public class CleanroomPluginPacketSender extends AbstractPluginPacketSender
@Override
public void sendToServer(AbstractNetworkMessage message)
{
PLUGIN_CHANNEL.sendToServer(new MessageWrapper(message));
}
{ PLUGIN_CHANNEL.sendToServer(new MessageWrapper(message)); }
@Override
public void sendToClient(EntityPlayerMP serverPlayer, AbstractNetworkMessage message)
{
PLUGIN_CHANNEL.sendTo(new MessageWrapper(message), serverPlayer);
}
{ PLUGIN_CHANNEL.sendTo(new MessageWrapper(message), serverPlayer); }
//================//
// helper classes //
//================//
//region
// Forge doesn't support using abstract classes
@SuppressWarnings({"ClassCanBeRecord", "RedundantSuppression"})
@@ -73,6 +76,12 @@ public class CleanroomPluginPacketSender extends AbstractPluginPacketSender
{
public AbstractNetworkMessage message;
//=============//
// constructor //
//=============//
//region
public MessageWrapper(AbstractNetworkMessage message) { this.message = message; }
public MessageWrapper()
@@ -80,15 +89,20 @@ public class CleanroomPluginPacketSender extends AbstractPluginPacketSender
// For reflection
}
//endregion
@Override
public void fromBytes(ByteBuf buf) {
public void fromBytes(ByteBuf buf)
{
int messageId = buf.readByte();
message = MessageRegistry.INSTANCE.createMessage(messageId);
message.decode(buf);
}
@Override
public void toBytes(ByteBuf buf) {
public void toBytes(ByteBuf buf)
{
buf.writeByte(MessageRegistry.INSTANCE.getMessageId(message));
message.encode(buf);
}
@@ -96,20 +110,27 @@ public class CleanroomPluginPacketSender extends AbstractPluginPacketSender
public static class Handler implements IMessageHandler<MessageWrapper, IMessage>
{
@Override
public IMessage onMessage(MessageWrapper wrapper, MessageContext context) {
public IMessage onMessage(MessageWrapper wrapper, MessageContext context)
{
if (wrapper.message != null)
{
if (context.side == Side.SERVER)
{
consumerPacket.accept(ServerPlayerWrapper.getWrapper(context.getServerHandler().player), wrapper.message);
}
else {
else
{
consumerPacket.accept(null, wrapper.message);
}
}
return null; // No response needed
}
}
}
//endregion
}
@@ -1,6 +1,8 @@
package com.seibel.distanthorizons.common;
import com.seibel.distanthorizons.api.enums.config.EDhApiMcRenderingFadeMode;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiDistantGeneratorMode;
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent;
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent;
import com.seibel.distanthorizons.common.commands.CommandInitializer;
@@ -101,6 +103,7 @@ public abstract class AbstractModInitializer
// Client uses config for auto-updater, so it's initialized here instead of post-init stage
this.initConfig();
logIncompatibilityWarnings(); // needs to be called after config loading
setUnsupportedConfigsBasedOnMcVersion();
Initializer.postConfigInit();
LOGGER.info(ModInfo.READABLE_NAME + " client Initialized.");
@@ -409,6 +412,24 @@ public abstract class AbstractModInitializer
}
/**
* Some Minecraft versions don't support all
* DH options.
* In that case we need to override what options are available.
*/
private static void setUnsupportedConfigsBasedOnMcVersion()
{
#if MC_VER <= MC_1_12_2
Config.Client.Advanced.Graphics.Experimental.renderingApi.setMcVersionOverrideValue(EDhApiRenderApi.OPEN_GL);
Config.Client.Advanced.Graphics.Quality.vanillaFadeMode.setMcVersionOverrideValue(EDhApiMcRenderingFadeMode.NONE);
Config.Common.WorldGenerator.distantGeneratorMode.setMcVersionOverrideValue(EDhApiDistantGeneratorMode.INTERNAL_SERVER);
#elif MC_VER <= MC_1_21_10
Config.Client.Advanced.Graphics.Experimental.renderingApi.setMcVersionOverrideValue(EDhApiRenderApi.OPEN_GL);
#else
#endif
}
//endregion
@@ -38,7 +38,7 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender
.build();
#if MC_VER <= MC_1_12_2
public static final String WRAPPER_PACKET_RESOURCE = "channelDH"; // resource_namespace + packet_path > 20 characters
public static final String WRAPPER_PACKET_RESOURCE = ModInfo.RESOURCE_NAMESPACE + ModInfo.WRAPPER_PACKET_PATH;
#elif MC_VER <= MC_1_20_6
public static final ResourceLocation WRAPPER_PACKET_RESOURCE = new ResourceLocation(ModInfo.RESOURCE_NAMESPACE, ModInfo.WRAPPER_PACKET_PATH);
#elif MC_VER <= MC_1_21_10
@@ -61,14 +61,28 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender
@Override
public final void sendToClient(IServerPlayerWrapper serverPlayer, AbstractNetworkMessage message)
{
this.sendToClient(#if MC_VER <= MC_1_12_2 (EntityPlayerMP) #else (ServerPlayer) #endif serverPlayer.getWrappedMcObject(), message);
#if MC_VER <= MC_1_12_2
this.sendToClient((EntityPlayerMP) serverPlayer.getWrappedMcObject(), message);
#else
this.sendToClient((ServerPlayer) serverPlayer.getWrappedMcObject(), message);
#endif
}
public abstract void sendToClient(#if MC_VER <= MC_1_12_2 EntityPlayerMP #else ServerPlayer #endif serverPlayer, AbstractNetworkMessage message);
#if MC_VER <= MC_1_12_2
public abstract void sendToClient(EntityPlayerMP serverPlayer, AbstractNetworkMessage message);
#else
public abstract void sendToClient(ServerPlayer serverPlayer, AbstractNetworkMessage message);
#endif
@Override
public abstract void sendToServer(AbstractNetworkMessage message);
public AbstractNetworkMessage decodeMessage(#if MC_VER <= MC_1_12_2 PacketBuffer #else FriendlyByteBuf #endif in)
#if MC_VER <= MC_1_12_2
public AbstractNetworkMessage decodeMessage(PacketBuffer in)
#else
public AbstractNetworkMessage decodeMessage(FriendlyByteBuf in)
#endif
{
AbstractNetworkMessage message = null;
@@ -109,7 +123,11 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender
}
}
public void encodeMessage(#if MC_VER <= MC_1_12_2 PacketBuffer #else FriendlyByteBuf #endif out, AbstractNetworkMessage message)
#if MC_VER <= MC_1_12_2
public void encodeMessage(PacketBuffer out, AbstractNetworkMessage message)
#else
public void encodeMessage(FriendlyByteBuf out, AbstractNetworkMessage message)
#endif
{
// This is intentionally unhandled, because errors related to this are unlikely to appear in wild
Objects.requireNonNull(message);
@@ -45,12 +45,13 @@ import net.minecraft.world.level.ChunkPos;
*/
public class McObjectConverter
{
private static int bufferIndex(int x, int y)
{
return y * 4 + x;
}
//========//
// matrix //
//========//
//region
/** 4x4 float matrix converter */
public static Mat4f Convert(
#if MC_VER <= MC_1_12_2 org.joml.Matrix4f
@@ -102,39 +103,85 @@ public class McObjectConverter
buffer.put(bufferIndex(3, 3), matrix.m33());
#endif
}
private static int bufferIndex(int x, int y) { return y * 4 + x; }
//endregion
static final #if MC_VER <= MC_1_12_2 EnumFacing[] #else Direction[] #endif directions;
static final EDhDirection[] lodDirections;
//===========//
// direction //
//===========//
//region
#if MC_VER <= MC_1_12_2
private static final EnumFacing[] mcDirections;
#else
private static final Direction[] mcDirections;
#endif
private static final EDhDirection[] dhDirections;
static
{
EDhDirection[] lodDirs = EDhDirection.values();
directions = new #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif[lodDirs.length];
#if MC_VER <= MC_1_12_2
mcDirections = new EnumFacing[lodDirs.length];
#else
mcDirections = new Direction[lodDirs.length];
#endif
lodDirections = new EDhDirection[lodDirs.length];
dhDirections = new EDhDirection[lodDirs.length];
for (EDhDirection lodDir : lodDirs)
{
#if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif dir;
#if MC_VER <= MC_1_12_2
EnumFacing dir;
#else
Direction dir;
#endif
switch (lodDir.name().toUpperCase())
{
case "DOWN":
dir = #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif.DOWN;
#if MC_VER <= MC_1_12_2
dir = EnumFacing.DOWN;
#else
dir = Direction.DOWN;
#endif
break;
case "UP":
dir = #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif.UP;
#if MC_VER <= MC_1_12_2
dir = EnumFacing.UP;
#else
dir = Direction.UP;
#endif
break;
case "NORTH":
dir = #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif.NORTH;
#if MC_VER <= MC_1_12_2
dir = EnumFacing.NORTH;
#else
dir = Direction.NORTH;
#endif
break;
case "SOUTH":
dir = #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif.SOUTH;
#if MC_VER <= MC_1_12_2
dir = EnumFacing.SOUTH;
#else
dir = Direction.SOUTH;
#endif
break;
case "WEST":
dir = #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif.WEST;
#if MC_VER <= MC_1_12_2
dir = EnumFacing.WEST;
#else
dir = Direction.WEST;
#endif
break;
case "EAST":
dir = #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif.EAST;
#if MC_VER <= MC_1_12_2
dir = EnumFacing.EAST;
#else
dir = Direction.EAST;
#endif
break;
default:
dir = null;
@@ -143,13 +190,37 @@ public class McObjectConverter
if (dir == null)
{
throw new IllegalArgumentException("Invalid direction on init mapping: " + lodDir);
throw new IllegalArgumentException("Invalid direction on init mapping: [" + lodDir + "].");
}
directions[lodDir.ordinal()] = dir;
lodDirections[dir.ordinal()] = lodDir;
mcDirections[lodDir.ordinal()] = dir;
dhDirections[dir.ordinal()] = lodDir;
}
}
#if MC_VER <= MC_1_12_2
public static EnumFacing Convert(EDhDirection lodDirection)
#else
public static Direction Convert(EDhDirection lodDirection)
#endif
{ return mcDirections[lodDirection.ordinal()]; }
#if MC_VER <= MC_1_12_2
public static EDhDirection Convert(EnumFacing direction)
#else
public static EDhDirection Convert(Direction direction)
#endif
{ return dhDirections[direction.ordinal()]; }
//endregion
//==================//
// position objects //
//==================//
//region
public static BlockPos Convert(DhBlockPos wrappedPos) { return new BlockPos(wrappedPos.getX(), wrappedPos.getY(), wrappedPos.getZ()); }
public static ChunkPos Convert(DhChunkPos wrappedPos) { return new ChunkPos(wrappedPos.getX(), wrappedPos.getZ()); }
@@ -162,7 +233,8 @@ public class McObjectConverter
#endif
}
public static #if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif Convert(EDhDirection lodDirection) { return directions[lodDirection.ordinal()]; }
public static EDhDirection Convert(#if MC_VER <= MC_1_12_2 EnumFacing #else Direction #endif direction) { return lodDirections[direction.ordinal()]; }
//endregion
}
@@ -97,6 +97,7 @@ public class WrapperFactory implements IWrapperFactory
this.renderDefinition = SingletonInjector.INSTANCE.get(AbstractDhRenderApiDefinition.class);
return this.renderDefinition;
}
//endregion
@@ -184,7 +185,8 @@ public class WrapperFactory implements IWrapperFactory
*/
public IChunkWrapper createChunkWrapper(Object[] objectArray) throws ClassCastException
{
if (objectArray.length == 1 && objectArray[0] instanceof IChunkWrapper)
if (objectArray.length == 1
&& objectArray[0] instanceof IChunkWrapper)
{
try
{
@@ -198,41 +200,102 @@ public class WrapperFactory implements IWrapperFactory
}
}
//#if MC_VER <= MC_1_XX_X
else if (objectArray.length == 2)
{
// correct number of parameters from the API
// chunk
if (!(objectArray[0] instanceof #if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif))
{
throw new ClassCastException(createChunkWrapperErrorMessage(objectArray));
}
#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif chunk = (#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif) objectArray[0];
// level / light source
if (!(objectArray[1] instanceof #if MC_VER <= MC_1_12_2 World #else Level #endif))
{
throw new ClassCastException(createChunkWrapperErrorMessage(objectArray));
}
// the level is needed for the DH level wrapper...
#if MC_VER <= MC_1_12_2 World #else Level #endif level = (#if MC_VER <= MC_1_12_2 World #else Level #endif) objectArray[1];
// level wrapper
ILevelWrapper levelWrapper = #if MC_VER <= MC_1_12_2 !level.isRemote #else level.isClientSide() #endif
? ClientLevelWrapper.getWrapper((#if MC_VER <= MC_1_12_2 WorldClient #else ClientLevel #endif)level)
: ServerLevelWrapper.getWrapper((#if MC_VER <= MC_1_12_2 WorldServer #else ServerLevel #endif)level);
return new ChunkWrapper(chunk, levelWrapper);
}
// incorrect number of parameters from the API
else
else if (objectArray.length != 2)
{
throw new ClassCastException(createChunkWrapperErrorMessage(objectArray));
}
//#endif
// correct number of parameters from the API
//=======//
// chunk //
//=======//
//region
boolean chunkClassCorrect;
#if MC_VER <= MC_1_12_2
chunkClassCorrect = (objectArray[0] instanceof Chunk);
#else
chunkClassCorrect = (objectArray[0] instanceof ChunkAccess);
#endif
if (!chunkClassCorrect)
{
throw new ClassCastException(createChunkWrapperErrorMessage(objectArray));
}
#if MC_VER <= MC_1_12_2
Chunk chunk = (Chunk) objectArray[0];
#else
ChunkAccess chunk = (ChunkAccess) objectArray[0];
#endif
//endregion
//=======//
// level //
//=======//
//region
boolean levelClassCorrect;
#if MC_VER <= MC_1_12_2
levelClassCorrect = (objectArray[1] instanceof World);
#else
levelClassCorrect = (objectArray[1] instanceof Level);
#endif
if (!levelClassCorrect)
{
throw new ClassCastException(createChunkWrapperErrorMessage(objectArray));
}
#if MC_VER <= MC_1_12_2
World level = (World) objectArray[1];
#else
Level level = (Level) objectArray[1];
#endif
//endregion
//===============//
// level wrapper //
//===============//
//region
boolean isClientSide;
#if MC_VER <= MC_1_12_2
isClientSide = !level.isRemote;
#else
isClientSide = level.isClientSide();
#endif
ILevelWrapper levelWrapper;
if (isClientSide)
{
#if MC_VER <= MC_1_12_2
levelWrapper = ClientLevelWrapper.getWrapper((WorldClient)level);
#else
levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel)level);
#endif
}
else
{
#if MC_VER <= MC_1_12_2
levelWrapper = ServerLevelWrapper.getWrapper((WorldServer)level);
#else
levelWrapper = ServerLevelWrapper.getWrapper((ServerLevel)level);
#endif
}
//endregion
return new ChunkWrapper(chunk, levelWrapper);
}
/**
* Note: when this is updated for different MC versions,
@@ -242,13 +305,19 @@ public class WrapperFactory implements IWrapperFactory
{
String[] expectedClassNames;
//#if MC_VER <= MC_1_XX_X
#if MC_VER <= MC_1_12_2
expectedClassNames = new String[]
{
#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif.class.getName(),
Chunk.class.getName(),
"[WorldClient] or [WorldServer]" // Classes are not referenced by names to avoid exception when one of them is missing
};
#else
expectedClassNames = new String[]
{
ChunkAccess.class.getName(),
"[ServerLevel] or [ClientLevel]" // Classes are not referenced by names to avoid exception when one of them is missing
};
//#endif
#endif
return createWrapperErrorMessage("Chunk wrapper", expectedClassNames, objectArray);
}
@@ -334,19 +403,29 @@ public class WrapperFactory implements IWrapperFactory
//#if MC_VER <= MC_1_XX_X
if (objectArray.length != 1)
{
throw new ClassCastException(createBlockStateWrapperErrorMessage(objectArray));
}
if (!(objectArray[0] instanceof #if MC_VER <= MC_1_12_2 IBlockState #else BlockState #endif))
boolean blockClassCorrect;
#if MC_VER <= MC_1_12_2
blockClassCorrect = (objectArray[0] instanceof IBlockState);
#else
blockClassCorrect = (objectArray[0] instanceof BlockState);
#endif
if (!blockClassCorrect)
{
throw new ClassCastException(createBlockStateWrapperErrorMessage(objectArray));
}
#if MC_VER <= MC_1_12_2 IBlockState #else BlockState #endif blockState = (#if MC_VER <= MC_1_12_2 IBlockState #else BlockState #endif) objectArray[0];
#if MC_VER <= MC_1_12_2
IBlockState blockState = (IBlockState) objectArray[0];
return BlockStateWrapper.fromBlockState(blockState, coreLevelWrapper);
//#endif
#else
BlockState blockState = (BlockState) objectArray[0];
return BlockStateWrapper.fromBlockState(blockState, coreLevelWrapper);
#endif
}
/**
* Note: when this is updated for different MC versions,
@@ -356,7 +435,9 @@ public class WrapperFactory implements IWrapperFactory
{
String[] expectedClassNames;
#if MC_VER <= MC_1_17_1
#if MC_VER <= MC_1_12_2
expectedClassNames = new String[] { IBlockState.class.getName() };
#elif MC_VER <= MC_1_17_1
expectedClassNames = new String[] { Biome.class.getName() };
#else
expectedClassNames = new String[] { Holder.class.getName()+"<"+Biome.class.getName()+">" };
@@ -369,7 +450,6 @@ public class WrapperFactory implements IWrapperFactory
//================//
// helper methods //
//================//
@@ -565,6 +565,7 @@ class DhConfigScreen extends DhScreen
{
configEntry.uiSetWithoutSaving(configEntry.getDefaultValue());
this.reload = true;
#if MC_VER <= MC_1_12_2
Objects.requireNonNull(this.mc).displayGuiScreen(ClassicConfigGUI.getScreen(this.parent, this.category));
#else
@@ -587,7 +588,18 @@ class DhConfigScreen extends DhScreen
ClassicConfigGUI.ConfigScreenConfigs.RESET_BUTTON_WIDTH, ClassicConfigGUI.ConfigScreenConfigs.RESET_BUTTON_HEIGHT,
btnAction);
if (configEntry.apiIsOverriding())
if (configEntry.mcVersionOverridePresent())
{
#if MC_VER <= MC_1_12_2
resetButton.enabled = false;
resetButton.displayString = Translatable("distanthorizons.general.unsupportedMcVersion").setStyle(new Style().setColor(TextFormatting.DARK_GRAY)).getFormattedText();
#else
resetButton.active = false;
resetButton.setMessage(Translatable("distanthorizons.general.unsupportedMcVersion").withStyle(ChatFormatting.DARK_GRAY));
#endif
}
else if (configEntry.apiIsOverriding())
{
#if MC_VER <= MC_1_12_2
resetButton.enabled = false;
@@ -599,7 +611,11 @@ class DhConfigScreen extends DhScreen
}
else
{
resetButton.#if MC_VER <= MC_1_12_2 enabled #else active #endif = true;
#if MC_VER <= MC_1_12_2
resetButton.enabled = true;
#else
resetButton.active = true;
#endif
}
//endregion
@@ -648,12 +664,20 @@ class DhConfigScreen extends DhScreen
ClassicConfigGUI.ConfigScreenConfigs.OPTION_FIELD_WIDTH, ClassicConfigGUI.ConfigScreenConfigs.CATEGORY_BUTTON_HEIGHT,
widget.getKey());
// deactivate the button if the API is overriding it
#if MC_VER <= MC_1_12_2
button.enabled = !configEntry.apiIsOverriding();
#else
button.active = !configEntry.apiIsOverriding();
#endif
// or the MC version doesn't support it
if (configEntry.mcVersionOverridePresent()
|| configEntry.apiIsOverriding())
{
#if MC_VER <= MC_1_12_2
button.enabled = false;
#else
button.active = false;
#endif
}
this.configListWidget.addButton(this, configEntry,
button,
@@ -957,14 +981,21 @@ class DhConfigScreen extends DhScreen
button.dhConfigType;
boolean apiOverrideActive = false;
boolean unsupportedMcVersion = false;
if (configBase instanceof ConfigEntry)
{
apiOverrideActive = ((ConfigEntry<?>) configBase).apiIsOverriding();
unsupportedMcVersion = ((ConfigEntry<?>) configBase).mcVersionOverridePresent();
}
String key = TRANSLATION_PREFIX + (configBase.category.isEmpty() ? "" : configBase.category + ".") + configBase.getName() + ".@tooltip";
if (apiOverrideActive)
if (unsupportedMcVersion)
{
key = "distanthorizons.general.unsupportedMcVersion.@tooltip";
}
else if (apiOverrideActive)
{
key = "distanthorizons.general.disabledByApi.@tooltip";
}
@@ -121,14 +121,25 @@ public class InternalServerGenerator
// create gen requests //
//=====================//
ArrayList<CompletableFuture<#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif>> getChunkFutureList = new ArrayList<>();
#if MC_VER <= MC_1_12_2
ArrayList<CompletableFuture<Chunk>> getChunkFutureList = new ArrayList<>();
#else
ArrayList<CompletableFuture<ChunkAccess>> getChunkFutureList = new ArrayList<>();
#endif
{
Iterator<ChunkPos> chunkPosIterator = ChunkPosGenStream.getIterator(genEvent.minPos.getX(), genEvent.minPos.getZ(), genEvent.widthInChunks, 0);
while (chunkPosIterator.hasNext())
{
ChunkPos chunkPos = chunkPosIterator.next();
CompletableFuture<#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif> requestChunkFuture =
#if MC_VER <= MC_1_12_2
CompletableFuture<Chunk> requestChunkFuture;
#else
CompletableFuture<ChunkAccess> requestChunkFuture;
#endif
requestChunkFuture =
this.requestChunkFromServerAsync(chunkPos)
// log errors if necessary
.whenCompleteAsync(
@@ -171,8 +182,16 @@ public class InternalServerGenerator
ArrayList<IChunkWrapper> chunkWrappers = new ArrayList<>();
for (int i = 0; i < getChunkFutureList.size(); i++)
{
CompletableFuture<#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif> getChunkFuture = getChunkFutureList.get(i);
#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif chunk = getChunkFuture.join();
#if MC_VER <= MC_1_12_2
CompletableFuture<Chunk> getChunkFuture;
Chunk chunk;
#else
CompletableFuture<ChunkAccess> getChunkFuture;
ChunkAccess chunk;
#endif
getChunkFuture = getChunkFutureList.get(i);
chunk = getChunkFuture.join();
if (chunk != null)
{
ChunkWrapper chunkWrapper = new ChunkWrapper(chunk, this.dhServerLevel.getLevelWrapper());
@@ -256,7 +275,11 @@ public class InternalServerGenerator
LOGGER.warn(c2meWarning);
}
}
private CompletableFuture<#if MC_VER <= MC_1_12_2 Chunk #else ChunkAccess #endif> requestChunkFromServerAsync(ChunkPos chunkPos)
#if MC_VER <= MC_1_12_2
private CompletableFuture<Chunk> requestChunkFromServerAsync(ChunkPos chunkPos)
#else
private CompletableFuture<ChunkAccess> requestChunkFromServerAsync(ChunkPos chunkPos)
#endif
{
#if MC_VER <= MC_1_12_2
WorldServer level = this.params.mcServerLevel;
@@ -272,7 +295,7 @@ public class InternalServerGenerator
{
ChunkProviderServer provider = level.getChunkProvider();
// load neighbours first so the target chunk can fully populate
// load neighbors first so the target chunk can fully populate
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
@@ -341,7 +364,11 @@ public class InternalServerGenerator
* mitigates out of memory issues in the vanilla chunk system. <br>
* See: https://github.com/pop4959/Chunky/pull/383
*/
private CompletableFuture<Void> releaseChunkFromServerAsync(#if MC_VER <= MC_1_12_2 WorldServer #else ServerLevel #endif level, ChunkPos chunkPos)
#if MC_VER <= MC_1_12_2
private CompletableFuture<Void> releaseChunkFromServerAsync(WorldServer level, ChunkPos chunkPos)
#else
private CompletableFuture<Void> releaseChunkFromServerAsync(ServerLevel level, ChunkPos chunkPos)
#endif
{
CompletableFuture<Void> removeTicketFuture = new CompletableFuture<>();
#if MC_VER <= MC_1_12_2
@@ -353,13 +380,14 @@ public class InternalServerGenerator
try
{
#if MC_VER <= MC_1_12_2
for (int i = -1; i <= 1; i++)
for (int difX = -1; difX <= 1; difX++)
{
for (int j = -1; j <= 1; j++)
for (int difZ = -1; difZ <= 1; difZ++)
{
if (i != 0 || j != 0)
if (difX != 0 || difZ != 0)
{
final int di = i, dj = j;
final int finalDifX = difX;
final int finalDifZ = difZ;
this.chunkSaveIgnoreTimer.schedule(new TimerTask()
{
@Override
@@ -367,7 +395,12 @@ public class InternalServerGenerator
{
if (InternalServerGenerator.this.updateManager != null)
{
InternalServerGenerator.this.updateManager.removePosToIgnore(new DhChunkPos(chunkPos.x + di, chunkPos.z + dj));
InternalServerGenerator.this.updateManager.removePosToIgnore(
new DhChunkPos(
chunkPos.x + finalDifX,
chunkPos.z + finalDifZ
)
);
}
}
}, MS_TO_IGNORE_CHUNK_AFTER_COMPLETION);
@@ -26,8 +26,11 @@ import com.seibel.distanthorizons.core.level.IDhServerLevel;
#if MC_VER <= MC_1_12_2
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.datafix.DataFixer;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.WorldServer;
import net.minecraft.world.gen.IChunkGenerator;
import java.util.concurrent.CompletableFuture;
#else
import com.mojang.datafixers.DataFixer;
import net.minecraft.core.Registry;
@@ -75,9 +78,16 @@ import net.minecraft.world.level.levelgen.WorldOptions;
public final class GlobalWorldGenParams
{
public final #if MC_VER <= MC_1_12_2 IChunkGenerator #else ChunkGenerator #endif generator;
public final IDhServerLevel dhServerLevel;
public final #if MC_VER <= MC_1_12_2 WorldServer #else ServerLevel #endif mcServerLevel;
#if MC_VER <= MC_1_12_2
public final IChunkGenerator generator;
public final WorldServer mcServerLevel;
#else
public final ChunkGenerator generator;
public final ServerLevel mcServerLevel;
#endif
#if MC_VER > MC_1_12_2
public final Registry<Biome> biomes;
public final RegistryAccess registry;
@@ -117,7 +127,12 @@ public final class GlobalWorldGenParams
this.dhServerLevel = dhServerLevel;
this.mcServerLevel = ((ServerLevelWrapper) dhServerLevel.getServerLevelWrapper()).getWrappedMcObject();
MinecraftServer server = this.mcServerLevel.#if MC_VER <= MC_1_12_2 getMinecraftServer() #else getServer() #endif;
#if MC_VER <= MC_1_12_2
MinecraftServer server = this.mcServerLevel.getMinecraftServer();
#else
MinecraftServer server = this.mcServerLevel.getServer();
#endif
#if MC_VER > MC_1_12_2
WorldData worldData = server.getWorldData();
this.registry = server.registryAccess();
+1 -1
View File
@@ -48,7 +48,7 @@ versionStr=
# This defines what MC version Intellij will use for the preprocessor
# and what version is used automatically by build and run commands
mcVer=1.12.2
mcVer=26.1.2
# Defines the maximum amount of memory Minecraft is allowed when run in a development environment
minecraftMemoryJavaArg=-Xmx6G