diff --git a/build.gradle b/build.gradle index f7254bc32..88d5f8979 100644 --- a/build.gradle +++ b/build.gradle @@ -88,7 +88,7 @@ def loadProperties() { "1.18.2": "1_18", "1.19.1" : "1_19", "1.19.2" : "1_19", - "1.19.3" : "1_19" + "1.19.3" : "1_19_3" ] // Use this as sometimes multiple versions use the same access wideners rootProject.ext.set("acsessWidenerVersion", mcVersionToAcsessWidenerVersion.get(mcVersion)) diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/McObjectConverter.java b/common/src/main/java/com/seibel/lod/common/wrappers/McObjectConverter.java index 259c707fa..805ea52a8 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/McObjectConverter.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/McObjectConverter.java @@ -50,7 +50,7 @@ public class McObjectConverter #if PRE_MC_1_19_3 mcMatrix.store(buffer); #else - mcMatrix.add(buffer); + mcMatrix.store(buffer); #endif Mat4f matrix = new Mat4f(buffer); matrix.transpose(); diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/block/TextureAtlasSpriteWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/block/TextureAtlasSpriteWrapper.java index d13ea4276..379ca9ca9 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/block/TextureAtlasSpriteWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/block/TextureAtlasSpriteWrapper.java @@ -41,12 +41,19 @@ public class TextureAtlasSpriteWrapper { return sprite.mainImage[0].getPixelRGBA( x + sprite.framesX[frameIndex] * sprite.getWidth(), y + sprite.framesY[frameIndex] * sprite.getHeight()); - #else + #elif PRE_MC_19_3 if (sprite.animatedTexture != null) { x += sprite.animatedTexture.getFrameX(frameIndex) * sprite.width; y += sprite.animatedTexture.getFrameY(frameIndex) * sprite.height; } return sprite.mainImage[0].getPixelRGBA(x, y); + #else + // FIXME[1.19.3]: Furthest I could get was this + if (sprite.contents().getUniqueFrames().sum() > 1) { + x += sprite.contents().getFrameX(frameIndex) * sprite.contents().width(); + y += sprite.contents().getFrameY(frameIndex) * sprite.contents().width(); + } + return sprite.mainImage[0].getPixelRGBA(x, y); #endif } } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigGui.java b/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigGui.java index ab5e1e2da..97e993152 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigGui.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigGui.java @@ -569,11 +569,11 @@ public abstract class ConfigGui if (!reload) loadFromFile(); - addBtn(new Button(this.width / 2 - 154, this.height - 28, 150, 20, CommonComponents.GUI_CANCEL, button -> { + addBtn(createButton(this.width / 2 - 154, this.height - 28, 150, 20, CommonComponents.GUI_CANCEL, button -> { loadFromFile(); Objects.requireNonNull(minecraft).setScreen(parent); })); - Button done = addBtn(new Button(this.width / 2 + 4, this.height - 28, 150, 20, CommonComponents.GUI_DONE, (button) -> { + Button done = addBtn(createButton(this.width / 2 + 4, this.height - 28, 150, 20, CommonComponents.GUI_DONE, (button) -> { saveToFile(); Objects.requireNonNull(minecraft).setScreen(parent); })); @@ -591,7 +591,7 @@ public abstract class ConfigGui Button resetButton = new Button(this.width - ConfigScreenConfigs.SpaceFromRightScreen - info.width - ConfigScreenConfigs.ButtonWidthSpacing - ConfigScreenConfigs.ResetButtonWidth, 0, ConfigScreenConfigs.ResetButtonWidth, 20, new TextComponent("Reset").withStyle(ChatFormatting.RED), (button -> { #else Component name = (info.name == null ? Component.translatable(translationPrefix + (!info.category.isEmpty() ? info.category + "." : "") + info.field.getName()) : info.name); - Button resetButton = new Button(this.width - ConfigScreenConfigs.SpaceFromRightScreen - info.width - ConfigScreenConfigs.ButtonWidthSpacing - ConfigScreenConfigs.ResetButtonWidth, 0, ConfigScreenConfigs.ResetButtonWidth, 20, Component.translatable("Reset").withStyle(ChatFormatting.RED), (button -> { + Button resetButton = createButton(this.width - ConfigScreenConfigs.SpaceFromRightScreen - info.width - ConfigScreenConfigs.ButtonWidthSpacing - ConfigScreenConfigs.ResetButtonWidth, 0, ConfigScreenConfigs.ResetButtonWidth, 20, Component.translatable("Reset").withStyle(ChatFormatting.RED), (button -> { #endif info.value = info.defaultValue; info.tempValue = info.defaultValue.toString(); @@ -609,7 +609,7 @@ public abstract class ConfigGui #else widget.setValue(value -> Component.translatable(translationPrefix + "enum." + info.field.getType().getSimpleName() + "." + info.value.toString())); #endif - this.list.addButton(new Button(this.width - info.width - ConfigScreenConfigs.SpaceFromRightScreen, 0, info.width, 20, widget.getValue().apply(info.value), widget.getKey()), resetButton, null, name); + this.list.addButton(createButton(this.width - info.width - ConfigScreenConfigs.SpaceFromRightScreen, 0, info.width, 20, widget.getValue().apply(info.value), widget.getKey()), resetButton, null, name); } else if (info.field.getType() == List.class) { @@ -629,7 +629,7 @@ public abstract class ConfigGui Button cycleButton = new Button(this.width - 185, 0, 20, 20, new TextComponent(String.valueOf(info.index)).withStyle(ChatFormatting.GOLD), (button -> { #else resetButton.setMessage(Component.translatable("R").withStyle(ChatFormatting.RED)); - Button cycleButton = new Button(this.width - 185, 0, 20, 20, Component.translatable(String.valueOf(info.index)).withStyle(ChatFormatting.GOLD), (button -> { + Button cycleButton = createButton(this.width - 185, 0, 20, 20, Component.translatable(String.valueOf(info.index)).withStyle(ChatFormatting.GOLD), (button -> { #endif ((List) info.value).remove(""); this.reload = true; @@ -651,7 +651,7 @@ public abstract class ConfigGui } else if (info.screenButton) { - Button widget = new Button(this.width / 2 - info.width, this.height - 28, info.width * 2, 20, name, (button -> { + Button widget = createButton(this.width / 2 - info.width, this.height - 28, info.width * 2, 20, name, (button -> { saveToFile(); Objects.requireNonNull(minecraft).setScreen(ConfigGui.getScreen(this, info.gotoScreen)); })); @@ -826,4 +826,16 @@ public abstract class ConfigGui } #endif } + + + + public static Button createButton(int x, int y, int width, int height, Component component, Button.OnPress onPress) { + #if PRE_MC_1_19_3 + return new Button(x, y, width, height, component, onPress); + #else + return Button.builder(component, onPress) + .bounds(x, y, width, height) + .build(); + #endif + } } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java index a87b83a93..fe719798c 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/GlobalParameters.java @@ -38,8 +38,11 @@ import net.minecraft.world.level.levelgen.WorldGenSettings; #if PRE_MC_1_19 import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; #else -import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import net.minecraft.world.level.levelgen.RandomState; +#if POST_MC_1_19_3 +import net.minecraft.world.level.levelgen.WorldOptions; +#endif #endif import net.minecraft.world.level.storage.WorldData; @@ -52,7 +55,11 @@ public final class GlobalParameters public final StructureTemplateManager structures; public final RandomState randomState; #endif + #if PRE_MC_1_19_3 public final WorldGenSettings worldGenSettings; + #else + public final WorldOptions worldOptions; + #endif public final ThreadedLevelLightEngine lightEngine; public final LodBuilder lodBuilder; public final LodDimension lodDim; @@ -74,10 +81,14 @@ public final class GlobalParameters lightEngine = (ThreadedLevelLightEngine) level.getLightEngine(); MinecraftServer server = level.getServer(); WorldData worldData = server.getWorldData(); + #if PRE_MC_1_19_3 worldGenSettings = worldData.worldGenSettings(); + #else + worldOptions = worldData.worldGenOptions(); + #endif registry = server.registryAccess(); biomes = registry.registryOrThrow(Registry.BIOME_REGISTRY); - worldSeed = worldGenSettings.seed(); + worldSeed = worldOptions.seed(); #if POST_MC_1_18_1 biomeManager = new BiomeManager(level, BiomeManager.obfuscateSeed(worldSeed)); chunkScanner = level.getChunkSource().chunkScanner(); diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java index 5e84aec39..58f8bccf1 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/ThreadedParameters.java @@ -71,8 +71,11 @@ public final class ThreadedParameters #endif } - public void makeStructFeat(WorldGenLevel genLevel, GlobalParameters param) - { + public void makeStructFeat(WorldGenLevel genLevel, GlobalParameters param) { + #if PRE_MC_1_19_3 structFeat = new WorldGenStructFeatManager(param.worldGenSettings, genLevel #if POST_MC_1_18_1, structCheck #endif); + #else + structFeat = new WorldGenStructFeatManager(param.worldOptions, genLevel #if POST_MC_1_18_1, structCheck #endif); + #endif } } \ No newline at end of file diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/WorldGenStructFeatManager.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/WorldGenStructFeatManager.java index 7adef654e..330128ea7 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/WorldGenStructFeatManager.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/WorldGenStructFeatManager.java @@ -46,6 +46,9 @@ import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.StructureFeatureManager; #else +#if POST_MC_1_19_3 +import net.minecraft.world.level.levelgen.WorldOptions; +#endif import net.minecraft.world.level.levelgen.structure.Structure; import net.minecraft.world.level.StructureManager; #endif @@ -61,10 +64,15 @@ public class WorldGenStructFeatManager extends StructureFeatureManager { public class WorldGenStructFeatManager extends StructureManager { #endif final WorldGenLevel genLevel; + #if PRE_MC_1_19_3 WorldGenSettings worldGenSettings; + #else + WorldOptions worldOptions; + #endif #if POST_MC_1_18_1 StructureCheck structureCheck; #endif + #if PRE_MC_1_19_3 public WorldGenStructFeatManager(WorldGenSettings worldGenSettings, WorldGenLevel genLevel #if POST_MC_1_18_1, StructureCheck structureCheck #endif) { @@ -72,15 +80,24 @@ public class WorldGenStructFeatManager extends StructureManager { worldGenSettings #if POST_MC_1_19_3 .options() #endif #if POST_MC_1_18_1, structureCheck #endif ); - this.genLevel = genLevel; this.worldGenSettings = worldGenSettings; + #else + public WorldGenStructFeatManager(WorldOptions worldOptions, + WorldGenLevel genLevel #if POST_MC_1_18_1, StructureCheck structureCheck #endif) { + + super(genLevel, worldOptions, structureCheck); + this.worldOptions = worldOptions; + #endif + this.genLevel = genLevel; } @Override public WorldGenStructFeatManager forWorldGenRegion(WorldGenRegion worldGenRegion) { if (worldGenRegion == genLevel) return this; - return new WorldGenStructFeatManager(worldGenSettings, worldGenRegion #if POST_MC_1_18_1, structureCheck #endif); + return new WorldGenStructFeatManager( + #if PRE_MC_1_19_3 worldGenSettings #else worldOptions #endif + , worldGenRegion #if POST_MC_1_18_1, structureCheck #endif); } private ChunkAccess _getChunk(int x, int z, ChunkStatus status) { diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java index cb88c2d9a..2d61fed3c 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureStart.java @@ -69,17 +69,25 @@ public final class StepStructureStart { #if PRE_MC_1_19 if (environment.params.worldGenSettings.generateFeatures()) { - #elif POST_MC_1_19 + #elif PRE_MC_1_19_3 if (environment.params.worldGenSettings.generateStructures()) { + #else + if (environment.params.worldOptions.generateStructures()) { #endif for (ChunkAccess chunk : chunksToDo) { // System.out.println("StepStructureStart: "+chunk.getPos()); #if PRE_MC_1_19 environment.params.generator.createStructures(environment.params.registry, tParams.structFeat, chunk, environment.params.structures, environment.params.worldSeed); - #elif POST_MC_1_19 + #elif PRE_MC_1_19_3 environment.params.generator.createStructures(environment.params.registry, environment.params.randomState, tParams.structFeat, chunk, environment.params.structures, environment.params.worldSeed); + #else + // FIXME[1.19.3]: This is the furthest I got with porting this to 1.19.3 + environment.params.generator.createStructures(environment.params.registry, + environment.params.generator.createState( + environment.params.level.holderLookup(), environment.params.randomState, environment.params.worldSeed), + tParams.structFeat, chunk, environment.params.structures); #endif #if POST_MC_1_18_1 try { diff --git a/common/src/main/resources/1_19_3.lod.accesswidener b/common/src/main/resources/1_19_3.lod.accesswidener new file mode 100644 index 000000000..d6232332f --- /dev/null +++ b/common/src/main/resources/1_19_3.lod.accesswidener @@ -0,0 +1,47 @@ +accessWidener v1 named + + +# used when determining where to save files to +accessible field net/minecraft/world/level/storage/DimensionDataStorage dataFolder Ljava/io/File; + +# used when rendering +accessible field com/mojang/blaze3d/vertex/VertexBuffer indexCount I +accessible method net/minecraft/client/renderer/GameRenderer getFov (Lnet/minecraft/client/Camera;FZ)D + +# used for grabbing vanilla rendered chunks +accessible field net/minecraft/client/renderer/LevelRenderer renderChunkStorage Ljava/util/concurrent/atomic/AtomicReference; +accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkStorage +accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo +accessible field net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo chunk Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$RenderChunk; + +# lighting +accessible field net/minecraft/client/renderer/LightTexture lightPixels Lcom/mojang/blaze3d/platform/NativeImage; +accessible field net/minecraft/client/renderer/LightTexture lightTexture Lnet/minecraft/client/renderer/texture/DynamicTexture; +accessible field net/minecraft/world/level/lighting/LevelLightEngine blockEngine Lnet/minecraft/world/level/lighting/LayerLightEngine; +accessible field net/minecraft/world/level/lighting/LevelLightEngine skyEngine Lnet/minecraft/world/level/lighting/LayerLightEngine; + +# world generation +accessible method net/minecraft/world/level/levelgen/Heightmap setHeight (III)V +accessible field net/minecraft/world/level/biome/Biome generationSettings Lnet/minecraft/world/level/biome/BiomeGenerationSettings; +# accessible field net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator settings Lnet/minecraft/core/Holder; +accessible method net/minecraft/world/level/lighting/LayerLightEngine queueSectionData (JLnet/minecraft/world/level/chunk/DataLayer;Z)V +accessible method net/minecraft/server/level/ChunkMap readChunk (Lnet/minecraft/world/level/ChunkPos;)Ljava/util/concurrent/CompletableFuture; + + +# lod generation from save file +accessible field net/minecraft/server/level/ChunkMap mainThreadExecutor Lnet/minecraft/util/thread/BlockableEventLoop; + + +# grabbing textures +accessible field net/minecraft/client/renderer/texture/TextureAtlasSprite animatedTexture Lnet/minecraft/client/renderer/texture/TextureAtlasSprite$AnimatedTexture; +accessible field net/minecraft/client/renderer/texture/TextureAtlasSprite width I +accessible field net/minecraft/client/renderer/texture/TextureAtlasSprite height I +accessible field net/minecraft/client/renderer/texture/TextureAtlasSprite mainImage [Lcom/mojang/blaze3d/platform/NativeImage; +accessible class net/minecraft/client/renderer/texture/TextureAtlasSprite$AnimatedTexture +accessible method net/minecraft/client/renderer/texture/TextureAtlasSprite$AnimatedTexture getFrameX (I)I +accessible method net/minecraft/client/renderer/texture/TextureAtlasSprite$AnimatedTexture getFrameY (I)I +extendable class com/mojang/math/Matrix4f + +# hacky stuff +accessible field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; +mutable field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; \ No newline at end of file