preprocessor cleanup

This commit is contained in:
James Seibel
2026-05-14 20:11:32 -05:00
parent 2884094dee
commit 7c3e279237
6 changed files with 333 additions and 94 deletions
@@ -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
}
@@ -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[] 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
}
@@ -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 //
//================//
@@ -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();