From 7c3e2792370aa6d77c720df071e476e562756d70 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 14 May 2026 20:11:32 -0500 Subject: [PATCH 1/5] preprocessor cleanup --- .../CleanroomPluginPacketSender.java | 47 +++-- .../common/AbstractPluginPacketSender.java | 26 ++- .../common/wrappers/McObjectConverter.java | 112 +++++++++--- .../common/wrappers/WrapperFactory.java | 164 +++++++++++++----- .../InternalServerGenerator.java | 57 ++++-- .../params/GlobalWorldGenParams.java | 21 ++- 6 files changed, 333 insertions(+), 94 deletions(-) diff --git a/cleanroom/src/main/java/com/seibel/distanthorizons/cleanroom/CleanroomPluginPacketSender.java b/cleanroom/src/main/java/com/seibel/distanthorizons/cleanroom/CleanroomPluginPacketSender.java index 05ed2c9c6..452297dc5 100644 --- a/cleanroom/src/main/java/com/seibel/distanthorizons/cleanroom/CleanroomPluginPacketSender.java +++ b/cleanroom/src/main/java/com/seibel/distanthorizons/cleanroom/CleanroomPluginPacketSender.java @@ -43,10 +43,10 @@ public class CleanroomPluginPacketSender extends AbstractPluginPacketSender AbstractPluginPacketSender.WRAPPER_PACKET_RESOURCE ); + + public static void setPacketHandler(Consumer consumer) - { - setPacketHandler((player, message) -> consumer.accept(message)); - } + { setPacketHandler((player, message) -> consumer.accept(message)); } static BiConsumer consumerPacket; public static void setPacketHandler(BiConsumer 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 { @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 + + + } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java index a4b5d6235..ac9141559 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java @@ -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); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java index aa08f77db..d4b9c79ac 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java @@ -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[] directions; + #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 + + } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java index 8af7cb4fd..5d425af8c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java @@ -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 + World 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 + IBlockState 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 // //================// diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java index fc82afcc2..d034aa86b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java @@ -121,14 +121,25 @@ public class InternalServerGenerator // create gen requests // //=====================// - ArrayList> getChunkFutureList = new ArrayList<>(); + #if MC_VER <= MC_1_12_2 + ArrayList> getChunkFutureList = new ArrayList<>(); + #else + ArrayList> getChunkFutureList = new ArrayList<>(); + #endif + { Iterator 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 requestChunkFuture; + #else + CompletableFuture requestChunkFuture; + #endif + + requestChunkFuture = this.requestChunkFromServerAsync(chunkPos) // log errors if necessary .whenCompleteAsync( @@ -171,8 +182,16 @@ public class InternalServerGenerator ArrayList 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 getChunkFuture; + Chunk chunk; + #else + CompletableFuture 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 requestChunkFromServerAsync(ChunkPos chunkPos) + #else + private CompletableFuture 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.
* See: https://github.com/pop4959/Chunky/pull/383 */ - private CompletableFuture releaseChunkFromServerAsync(#if MC_VER <= MC_1_12_2 WorldServer #else ServerLevel #endif level, ChunkPos chunkPos) + #if MC_VER <= MC_1_12_2 + private CompletableFuture releaseChunkFromServerAsync(WorldServer level, ChunkPos chunkPos) + #else + private CompletableFuture releaseChunkFromServerAsync(ServerLevel level, ChunkPos chunkPos) + #endif { CompletableFuture 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); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/params/GlobalWorldGenParams.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/params/GlobalWorldGenParams.java index 68137faed..b0c5a0f56 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/params/GlobalWorldGenParams.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/params/GlobalWorldGenParams.java @@ -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 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(); From 14fd5729e2e5fb00840ae295619108aad089b8f3 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 14 May 2026 20:11:41 -0500 Subject: [PATCH 2/5] use ModInfo packet path --- .../distanthorizons/common/AbstractPluginPacketSender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java index ac9141559..e7849654d 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java @@ -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 From b164e4646d7d6546496cab82d31bd1b37dcfa07e Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 14 May 2026 20:13:22 -0500 Subject: [PATCH 3/5] add 1.12.2 to the build script --- .gitlab-ci.yml | 3 ++- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 540b56661..de99ad82a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/gradle.properties b/gradle.properties index 38f2d23ff..1287140ff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 From 271f4e8b21889e9b6830cc4666ec2f540815d799 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 14 May 2026 20:52:36 -0500 Subject: [PATCH 4/5] Fix compiling MC 1.16.5+ --- .../distanthorizons/common/wrappers/McObjectConverter.java | 2 +- .../distanthorizons/common/wrappers/WrapperFactory.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java index d4b9c79ac..898636033 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/McObjectConverter.java @@ -117,7 +117,7 @@ public class McObjectConverter #if MC_VER <= MC_1_12_2 private static final EnumFacing[] mcDirections; #else - private static final Direction[] directions; + private static final Direction[] mcDirections; #endif private static final EDhDirection[] dhDirections; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java index 5d425af8c..da84e5c09 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java @@ -254,7 +254,7 @@ public class WrapperFactory implements IWrapperFactory #if MC_VER <= MC_1_12_2 World level = (World) objectArray[1]; #else - World Level = (Level) objectArray[1]; + Level level = (Level) objectArray[1]; #endif //endregion @@ -423,7 +423,7 @@ public class WrapperFactory implements IWrapperFactory IBlockState blockState = (IBlockState) objectArray[0]; return BlockStateWrapper.fromBlockState(blockState, coreLevelWrapper); #else - IBlockState BlockState = (BlockState) objectArray[0]; + BlockState blockState = (BlockState) objectArray[0]; return BlockStateWrapper.fromBlockState(blockState, coreLevelWrapper); #endif } From 36f1c49f49a83a9c8d0e03152e07695c14a45dfc Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 15 May 2026 07:44:22 -0500 Subject: [PATCH 5/5] Add MC Version locking to the config --- .../common/AbstractModInitializer.java | 21 +++++++++ .../gui/classicConfig/DhConfigScreen.java | 47 +++++++++++++++---- coreSubProjects | 2 +- 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java index 17bec1ddc..116d38886 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java @@ -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 diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/classicConfig/DhConfigScreen.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/classicConfig/DhConfigScreen.java index 073b6b242..51540f0d6 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/classicConfig/DhConfigScreen.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/classicConfig/DhConfigScreen.java @@ -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"; } diff --git a/coreSubProjects b/coreSubProjects index e3f586da5..fd3a8f7dd 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit e3f586da5698c8529a249b0214d58bb95f27143d +Subproject commit fd3a8f7ddfb3674d7e9af4b5d40efaad85340320