Merge remote-tracking branch 'root/main' into fix-portals
# Conflicts: # coreSubProjects
This commit is contained in:
+2
-1
@@ -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
|
||||
|
||||
+34
-13
@@ -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
|
||||
|
||||
|
||||
|
||||
+23
-5
@@ -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);
|
||||
|
||||
+92
-20
@@ -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
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+122
-42
@@ -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 //
|
||||
//================//
|
||||
|
||||
+39
-8
@@ -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";
|
||||
}
|
||||
|
||||
+45
-12
@@ -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);
|
||||
|
||||
+18
-3
@@ -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
Submodule coreSubProjects updated: 1908a0ccbf...1f7cf793c6
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user