diff --git a/1.19.properties b/1.19.properties index 49bb0ce3e..567f2793a 100644 --- a/1.19.properties +++ b/1.19.properties @@ -8,15 +8,16 @@ compatible_minecraft_versions=["1.19"] # Fabric loader fabric_loader_version=0.14.7 fabric_api_version=0.55.3+1.19 +architectury_version=5.6.24 # Fabric mod versions modmenu_version=4.0.0 - starlight_version_fabric=0 - phosphor_version_fabric=0 - lithium_version=0 - sodium_version=3820973 + starlight_version_fabric= + phosphor_version_fabric= + lithium_version= + sodium_version=mc1.19-0.4.2 iris_version=1.19.x-v1.2.5 - immersive_portals_version = 0 - bclib_version=0 + immersive_portals_version = + bclib_version= # Fabric mod run # 0 = Don't enable and don't run diff --git a/Readme.md b/Readme.md index 5008788ab..c0acb8689 100644 --- a/Readme.md +++ b/Readme.md @@ -16,7 +16,7 @@ If you want to see a quick demo, check out a video covering the mod here: ### Versions This branch is for these versions of Minecraft -- 1.19 (WIP) +- 1.19 - 1.18.2 - 1.18.1 & 1.18 - 1.17.1 & 1.17 @@ -66,7 +66,7 @@ This version has been confirmed to work in IDE and Retail Minecraft with ether t #### Nightlly builds This mod has an autobuild system to automatically build the mod on each commit -- 1.19: https://gitlab.com/jeseibel/minecraft-lod-mod/-/jobs/artifacts/main/download?job=build_19 (WIP) +- 1.19: https://gitlab.com/jeseibel/minecraft-lod-mod/-/jobs/artifacts/main/download?job=build_19 - 1.18.2: https://gitlab.com/jeseibel/minecraft-lod-mod/-/jobs/artifacts/main/download?job=build_18_2 - 1.18.1: https://gitlab.com/jeseibel/minecraft-lod-mod/-/jobs/artifacts/main/download?job=build_18_1 - 1.17.1: https://gitlab.com/jeseibel/minecraft-lod-mod/-/jobs/artifacts/main/download?job=build_17_1 @@ -94,7 +94,7 @@ https://fabricmc.net/wiki/tutorial:setup ## Switching Versions This branch support 5 built versions: - - 1.19 (WIP) + - 1.19 - 1.18.2 - 1.18.1 (which also runs on 1.18) - 1.17.1 (which also runs on 1.17) @@ -149,6 +149,7 @@ Build only Forge: `./gradlew fabric:assemble` or `./gradlew forge:build`\ Run the Fabric client (for debugging): `./gradlew fabric:runClient`\ Run the Forge client (for debugging): `./gradlew forge:runClient` +To build all versions: `./buildAll` (all builds will end up in the `Merged` folder) ## Open Source Acknowledgements XZ for Java (data compression)\ diff --git a/buildAll b/buildAll new file mode 100755 index 000000000..2636fdc81 --- /dev/null +++ b/buildAll @@ -0,0 +1,14 @@ +#!/usr/bin/env sh + +buildVersion() +{ + ./gradlew -PmcVer=$1 build + ./gradlew mergeJars -PmcVer=$1 + rm -R build/libs common/build/libs fabric/build/libs forge/build/libs +} + +buildVersion 1.19 +buildVersion 1.18.2 +buildVersion 1.18.1 +buildVersion 1.17.1 +buildVersion 1.16.5 diff --git a/buildAll.bat b/buildAll.bat new file mode 100644 index 000000000..8d8ddae4e --- /dev/null +++ b/buildAll.bat @@ -0,0 +1,16 @@ +@echo off + +:buildVersion +call gradlew.bat -PmcVer=%~1 build +call gradlew.bat mergeJars -PmcVer=%~1 +rm -R build/libs common/build/libs fabric/build/libs forge/build/libs +EXIT /B 0 + +SETLOCAL +CALL :buildVersion 1.19 +CALL :buildVersion 1.18.2 +CALL :buildVersion 1.18.1 +CALL :buildVersion 1.17.1 +CALL :buildVersion 1.16.5 +EXIT /B %ERRORLEVEL% + diff --git a/common/src/main/java/com/seibel/lod/common/forge/LodForgeMethodCaller.java b/common/src/main/java/com/seibel/lod/common/forge/LodForgeMethodCaller.java index a2e9eb0e3..d2cc70be3 100644 --- a/common/src/main/java/com/seibel/lod/common/forge/LodForgeMethodCaller.java +++ b/common/src/main/java/com/seibel/lod/common/forge/LodForgeMethodCaller.java @@ -22,6 +22,9 @@ package com.seibel.lod.common.forge; import com.seibel.lod.common.wrappers.minecraft.MinecraftClientWrapper; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.core.Direction; +#if POST_MC_1_19 +import net.minecraft.util.RandomSource; +#endif import net.minecraft.world.level.ColorResolver; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; @@ -36,7 +39,11 @@ import java.util.Random; * @author Ran */ public interface LodForgeMethodCaller { - List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, Random random); + #if PRE_MC_1_19 + List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, Random random); // FIXME: For 1.19 + #else + List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, RandomSource random); // FIXME: For 1.19 + #endif int colorResolverGetColor(ColorResolver resolver, Biome biome, double x, double z); } 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 669840260..3be2c1182 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 @@ -61,11 +61,14 @@ public class McObjectConverter lodDirections = new ELodDirection[lodDirs.length]; for (ELodDirection lodDir : lodDirs) { Direction dir = Direction.byName(lodDir.name()); - directions[lodDir.ordinal()] = dir; + if (dir == null) { + throw new IllegalArgumentException("Invalid direction on init mapping: " + lodDir); + } + directions[lodDir.ordinal()] = dir; lodDirections[dir.ordinal()] = lodDir; } } - + public static BlockPos Convert(DHBlockPos wrappedPos) { return new BlockPos(wrappedPos.x, wrappedPos.y, wrappedPos.z); } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/block/BlockDetailWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/block/BlockDetailWrapper.java index 0ebd20757..8573c3023 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/block/BlockDetailWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/block/BlockDetailWrapper.java @@ -48,6 +48,9 @@ import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.VoxelShape; +#if POST_MC_1_19 +import net.minecraft.util.RandomSource; +#endif /*-- WARN: This class should NEVER hold reference to anything large, as this is never dealloc until the end of runtime!! --*/ @@ -55,7 +58,11 @@ public class BlockDetailWrapper extends IBlockDetailWrapper { public static final int FLOWER_COLOR_SCALE = 5; + #if PRE_MC_1_19 public static final Random random = new Random(0); + #else + public static final RandomSource random = RandomSource.create(); + #endif enum ColorMode { Default, diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/config/ClassicConfigGUI.java b/common/src/main/java/com/seibel/lod/common/wrappers/config/ClassicConfigGUI.java index 4a87f0f99..fe384c341 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/config/ClassicConfigGUI.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/config/ClassicConfigGUI.java @@ -43,12 +43,14 @@ import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; -import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.client.resources.language.I18n; // translation #if POST_MC_1_17_1 import net.minecraft.client.gui.narration.NarratableEntry; #endif +#if PRE_MC_1_19 +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +#endif /** * Based upon TinyConfig but is highly modified @@ -108,7 +110,11 @@ public abstract class ClassicConfigGUI { textField(info, String::length, null, true); } else if (fieldClass == Boolean.class) { // For boolean + #if PRE_MC_1_19 Function func = value -> new TextComponent((Boolean) value ? "True" : "False").withStyle((Boolean) value ? ChatFormatting.GREEN : ChatFormatting.RED); + #else + Function func = value -> Component.translatable((Boolean) value ? "True" : "False").withStyle((Boolean) value ? ChatFormatting.GREEN : ChatFormatting.RED); + #endif ((EntryInfo) info.guiValue).widget = new AbstractMap.SimpleEntry>(button -> { ((ConfigEntry) info).setWithoutSaving(!(Boolean) info.get()); button.setMessage(func.apply(info.get())); @@ -118,7 +124,11 @@ public abstract class ClassicConfigGUI { { // For enum List values = Arrays.asList(info.getType().getEnumConstants()); + #if PRE_MC_1_19 Function func = value -> new TranslatableComponent(ModInfo.ID + ".config." + "enum." + fieldClass.getSimpleName() + "." + info.get().toString()); + #else + Function func = value -> Component.translatable(ModInfo.ID + ".config." + "enum." + fieldClass.getSimpleName() + "." + info.get().toString()); + #endif ((EntryInfo) info.guiValue).widget = new AbstractMap.SimpleEntry>(button -> { int index = values.indexOf(info.get()) + 1; info.set(values.get(index >= values.size() ? 0 : index)); @@ -148,7 +158,11 @@ public abstract class ClassicConfigGUI { ((EntryInfo) info.guiValue).error = null; if (isNumber && !stringValue.isEmpty() && !stringValue.equals("-") && !stringValue.equals(".")) { value = func.apply(stringValue); + #if PRE_MC_1_19 ((EntryInfo) info.guiValue).error = ((ConfigEntry) info).isValid(value) == 0 ? null : new AbstractMap.SimpleEntry<>(editBox, new TextComponent(((ConfigEntry) info).isValid(value) == -1 ? + #else + ((EntryInfo) info.guiValue).error = ((ConfigEntry) info).isValid(value) == 0 ? null : new AbstractMap.SimpleEntry<>(editBox, Component.translatable(((ConfigEntry) info).isValid(value) == -1 ? + #endif "§cMinimum " + "length" + (cast ? " is " + (int) ((ConfigEntry) info).getMin() : " is " + ((ConfigEntry) info).getMin()) : "§cMaximum " + "length" + (cast ? " is " + (int) ((ConfigEntry) info).getMax() : " is " + ((ConfigEntry) info).getMax()))); } @@ -191,7 +205,11 @@ public abstract class ClassicConfigGUI { */ private static class ConfigScreen extends Screen { protected ConfigScreen(Screen parent, String category) { + #if PRE_MC_1_19 super(new TranslatableComponent( + #else + super(Component.translatable( + #endif I18n.exists(ModInfo.ID + ".config" + (category.isEmpty() ? "." + category : "") + ".title") ? ModInfo.ID + ".config.title" : ModInfo.ID + ".config" + (category.isEmpty() ? "" : "." + category) + ".title") @@ -256,9 +274,17 @@ public abstract class ClassicConfigGUI { for (AbstractConfigType info : ConfigBase.entries) { if (info.getCategory().matches(category) && info.getAppearance().showInGui) { initEntry(info); + #if PRE_MC_1_19 TranslatableComponent name = new TranslatableComponent(translationPrefix + info.getNameWCategory()); + #else + Component name = Component.translatable(translationPrefix + info.getNameWCategory()); + #endif if (ConfigEntry.class.isAssignableFrom(info.getClass())) { + #if PRE_MC_1_19 Button resetButton = new Button(this.width - ConfigScreenConfigs.SpaceFromRightScreen - 150 - ConfigScreenConfigs.ButtonWidthSpacing - ConfigScreenConfigs.ResetButtonWidth, 0, ConfigScreenConfigs.ResetButtonWidth, 20, new TextComponent("Reset").withStyle(ChatFormatting.RED), (button -> { + #else + Button resetButton = new Button(this.width - ConfigScreenConfigs.SpaceFromRightScreen - 150 - ConfigScreenConfigs.ButtonWidthSpacing - ConfigScreenConfigs.ResetButtonWidth, 0, ConfigScreenConfigs.ResetButtonWidth, 20, Component.translatable("Reset").withStyle(ChatFormatting.RED), (button -> { + #endif ((ConfigEntry) info).setWithoutSaving(((ConfigEntry) info).getDefaultValue()); ((EntryInfo) info.guiValue).index = 0; this.reload = true; @@ -268,7 +294,11 @@ public abstract class ClassicConfigGUI { if (((EntryInfo) info.guiValue).widget instanceof Map.Entry) { Map.Entry> widget = (Map.Entry>) ((EntryInfo) info.guiValue).widget; if (info.getType().isEnum()) + #if PRE_MC_1_19 widget.setValue(value -> new TranslatableComponent(translationPrefix + "enum." + info.getType().getSimpleName() + "." + info.get().toString())); + #else + widget.setValue(value -> Component.translatable(translationPrefix + "enum." + info.getType().getSimpleName() + "." + info.get().toString())); + #endif this.list.addButton(new Button(this.width - 150 - ConfigScreenConfigs.SpaceFromRightScreen, 0, 150, 20, widget.getValue().apply(info.get()), widget.getKey()), resetButton, null, name); } else if (((EntryInfo) info.guiValue).widget != null) { EditBox widget = new EditBox(font, this.width - 150 - ConfigScreenConfigs.SpaceFromRightScreen + 2, 0, 150 - 4, 20, null); @@ -302,7 +332,11 @@ public abstract class ClassicConfigGUI { if (list.getHoveredButton(mouseX, mouseY).isPresent()) { AbstractWidget buttonWidget = list.getHoveredButton(mouseX, mouseY).get(); Component text = ButtonEntry.buttonsWithText.get(buttonWidget); + #if PRE_MC_1_19 TranslatableComponent name = new TranslatableComponent(this.translationPrefix + (info.category.isEmpty() ? "" : info.category + ".") + info.getName()); + #else + Component name = Component.translatable(this.translationPrefix + (info.category.isEmpty() ? "" : info.category + ".") + info.getName()); + #endif String key = translationPrefix + (info.category.isEmpty() ? "" : info.category + ".") + info.getName() + ".@tooltip"; if (((EntryInfo) info.guiValue).error != null && text.equals(name)) @@ -310,7 +344,11 @@ public abstract class ClassicConfigGUI { else if (I18n.exists(key) && (text != null && text.equals(name))) { List list = new ArrayList<>(); for (String str : I18n.get(key).split("\n")) + #if PRE_MC_1_19 list.add(new TextComponent(str)); + #else + list.add(Component.translatable(str)); + #endif renderComponentTooltip(matrices, list, mouseX, mouseY); } } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigScreenMC.java b/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigScreenMC.java index 75ed37206..68c346247 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigScreenMC.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/config/ConfigScreenMC.java @@ -6,7 +6,10 @@ import com.seibel.lod.core.config.gui.AbstractScreen; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.ContainerObjectSelectionList; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +#if PRE_MC_1_19 import net.minecraft.network.chat.TranslatableComponent; +#endif import java.util.*; @@ -21,7 +24,11 @@ public class ConfigScreenMC { private ConfigListWidget list; private AbstractScreen screen; protected ConfigScreenRenderer(Screen parent, AbstractScreen screen) { + #if PRE_MC_1_19 super(new TranslatableComponent(ModInfo.ID + ".config.title")); + #else + super(Component.translatable(ModInfo.ID + ".config.title")); + #endif this.parent = parent; this.screen = screen; } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftClientWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftClientWrapper.java index 7725e0923..4fca28adf 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftClientWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftClientWrapper.java @@ -51,7 +51,10 @@ import net.minecraft.client.resources.model.ModelManager; import net.minecraft.client.server.IntegratedServer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +#if PRE_MC_1_19 import net.minecraft.network.chat.TextComponent; +#endif +import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ChunkPos; @@ -359,7 +362,11 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper @Override public void sendChatMessage(String string) { + #if PRE_MC_1_19 getPlayer().sendMessage(new TextComponent(string), getPlayer().getUUID()); + #else + getPlayer().sendSystemMessage(Component.translatable(string)); + #endif } /** diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java index 01cdc6198..d3cce7003 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -120,7 +120,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper public Mat4f getDefaultProjectionMatrix(float partialTicks) { #if PRE_MC_1_17_1 - return McObjectConverter.Convert(GAME_RENDERER.getProjectionMatrix(GAME_RENDERER.getMainCamera(), partialTicks, true)); + return McObjectConverter.Convert(Minecraft.getInstance().gameRenderer.getProjectionMatrix(Minecraft.getInstance().gameRenderer.getMainCamera(), partialTicks, true)); #else return McObjectConverter.Convert(MC.gameRenderer.getProjectionMatrix(MC.gameRenderer.getFov(MC.gameRenderer.getMainCamera(), partialTicks, true))); #endif @@ -129,7 +129,11 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper @Override public double getGamma() { + #if PRE_MC_1_19 return MC.options.gamma; + #else + return MC.options.gamma().get(); + #endif } @Override @@ -266,7 +270,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper @Override public boolean isFogStateSpecial() { #if PRE_MC_1_17_1 - Camera camera = GAME_RENDERER.getMainCamera(); + Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera(); FluidState fluidState = camera.getFluidInCamera(); Entity entity = camera.getEntity(); boolean isUnderWater = (entity instanceof LivingEntity) && ((LivingEntity)entity).hasEffect(MobEffects.BLINDNESS); diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java index a7ece09a8..5f5ce0ffb 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/world/BiomeWrapper.java @@ -20,17 +20,30 @@ package com.seibel.lod.common.wrappers.world; import java.awt.Color; +import java.util.List; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.function.Function; +import java.util.function.Supplier; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableList; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper; +import net.minecraft.data.BuiltinRegistries; +#if POST_MC_1_19 +import net.minecraft.data.worldgen.biome.EndBiomes; +import net.minecraft.data.worldgen.biome.NetherBiomes; +#endif +import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; + //This class wraps the minecraft BlockPos.Mutable (and BlockPos) class public class BiomeWrapper implements IBiomeWrapper { @@ -60,6 +73,7 @@ public class BiomeWrapper implements IBiomeWrapper /** Returns a color int for the given biome. */ + #if PRE_MC_1_19 @Override public int getColorForBiome(int x, int z) { @@ -121,7 +135,139 @@ public class BiomeWrapper implements IBiomeWrapper return colorInt; } - + #else + private static int _colorEnd(Biome b) { + return Blocks.END_STONE.defaultMaterialColor().col; + } + private static int _colorNether(Biome b) { + return Blocks.NETHERRACK.defaultMaterialColor().col; + } + private static int _colorSand(Biome b) { + return Blocks.SAND.defaultMaterialColor().col; + } + private static int _colorStone(Biome b) { + return Blocks.STONE.defaultMaterialColor().col; + } + private static int _colorGravel(Biome b) { + return Blocks.GRAVEL.defaultMaterialColor().col; + } + private static int _colorDripStone(Biome b) { + return Blocks.DRIPSTONE_BLOCK.defaultMaterialColor().col; + } + private static int _colorMoss(Biome b) { + return Blocks.MOSS_BLOCK.defaultMaterialColor().col; + } + private static int _colorSculk(Biome b) { + return Blocks.SCULK.defaultMaterialColor().col; + } + private static int _colorMushoom(Biome b) { + return Blocks.MYCELIUM.defaultMaterialColor().col; + } + private static int _colorBamboo(Biome b) { + return Blocks.BAMBOO.defaultMaterialColor().col; + } + private static int _colorSnow(Biome b) { + return Blocks.SNOW.defaultMaterialColor().col; + } + private static int _colorIce(Biome b) { + return Blocks.ICE.defaultMaterialColor().col; + } + private static int _colorRedSand(Biome b) { + return Blocks.RED_SAND.defaultMaterialColor().col; + } + private static int _colorSoulSand(Biome b) { + return Blocks.SOUL_SAND.defaultMaterialColor().col; + } + private static int _colorBasalt(Biome b) { + return Blocks.BASALT.defaultMaterialColor().col; + } + private static int _colorWater(Biome b) { + return b.getWaterColor(); + } + private static int _colorFoliage(Biome b) { + return b.getFoliageColor(); + } + + private static Biome _get(ResourceKey r) { + return BuiltinRegistries.BIOME.getOrThrow(r); + } + + //FIXME: THIS IS HELL! + private static final ImmutableBiMap> BIOME_COLOR_MAP = + ImmutableBiMap.>builder() + .put(_get(Biomes.SNOWY_PLAINS), BiomeWrapper::_colorSnow) + .put(_get(Biomes.ICE_SPIKES), BiomeWrapper::_colorIce) + .put(_get(Biomes.DESERT), BiomeWrapper::_colorSand) + .put(_get(Biomes.SWAMP), BiomeWrapper::_colorWater) + .put(_get(Biomes.MANGROVE_SWAMP), BiomeWrapper::_colorWater) + .put(_get(Biomes.FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.FLOWER_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.BIRCH_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.DARK_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.OLD_GROWTH_BIRCH_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.OLD_GROWTH_PINE_TAIGA), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.OLD_GROWTH_SPRUCE_TAIGA), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.TAIGA), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.SNOWY_TAIGA), BiomeWrapper::_colorSnow) + .put(_get(Biomes.WINDSWEPT_GRAVELLY_HILLS), BiomeWrapper::_colorGravel) + .put(_get(Biomes.WINDSWEPT_FOREST), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.JUNGLE), BiomeWrapper::_colorFoliage) + .put(_get(Biomes.BAMBOO_JUNGLE), BiomeWrapper::_colorBamboo) + .put(_get(Biomes.BADLANDS), BiomeWrapper::_colorRedSand) + .put(_get(Biomes.ERODED_BADLANDS), BiomeWrapper::_colorRedSand) + .put(_get(Biomes.WOODED_BADLANDS), BiomeWrapper::_colorStone) + .put(_get(Biomes.GROVE), BiomeWrapper::_colorSnow) + .put(_get(Biomes.SNOWY_SLOPES), BiomeWrapper::_colorSnow) + .put(_get(Biomes.FROZEN_PEAKS), BiomeWrapper::_colorIce) + .put(_get(Biomes.JAGGED_PEAKS), BiomeWrapper::_colorSnow) + .put(_get(Biomes.STONY_PEAKS), BiomeWrapper::_colorStone) + .put(_get(Biomes.RIVER), BiomeWrapper::_colorWater) + .put(_get(Biomes.FROZEN_RIVER), BiomeWrapper::_colorIce) + .put(_get(Biomes.BEACH), BiomeWrapper::_colorSand) + .put(_get(Biomes.SNOWY_BEACH), BiomeWrapper::_colorSnow) + .put(_get(Biomes.STONY_SHORE), BiomeWrapper::_colorStone) + .put(_get(Biomes.WARM_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.LUKEWARM_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.DEEP_LUKEWARM_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.DEEP_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.COLD_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.DEEP_COLD_OCEAN), BiomeWrapper::_colorWater) + .put(_get(Biomes.FROZEN_OCEAN), BiomeWrapper::_colorIce) + .put(_get(Biomes.DEEP_FROZEN_OCEAN), BiomeWrapper::_colorIce) + .put(_get(Biomes.MUSHROOM_FIELDS), BiomeWrapper::_colorMushoom) + .put(_get(Biomes.DRIPSTONE_CAVES), BiomeWrapper::_colorDripStone) + .put(_get(Biomes.LUSH_CAVES), BiomeWrapper::_colorMoss) + .put(_get(Biomes.DEEP_DARK), BiomeWrapper::_colorSculk) + .put(_get(Biomes.NETHER_WASTES), BiomeWrapper::_colorNether) + .put(_get(Biomes.WARPED_FOREST), BiomeWrapper::_colorNether) + .put(_get(Biomes.CRIMSON_FOREST), BiomeWrapper::_colorNether) + .put(_get(Biomes.SOUL_SAND_VALLEY), BiomeWrapper::_colorSoulSand) + .put(_get(Biomes.BASALT_DELTAS), BiomeWrapper::_colorBasalt) + .put(_get(Biomes.THE_END), BiomeWrapper::_colorEnd) + .put(_get(Biomes.END_HIGHLANDS), BiomeWrapper::_colorEnd) + .put(_get(Biomes.END_MIDLANDS), BiomeWrapper::_colorEnd) + .put(_get(Biomes.SMALL_END_ISLANDS), BiomeWrapper::_colorEnd) + .put(_get(Biomes.END_BARRENS), BiomeWrapper::_colorEnd) + .build(); + + @Override + public int getColorForBiome(int x, int z) + { + int colorInt; + Function colorFunction = BIOME_COLOR_MAP.get(biome); + if (colorFunction != null) + { + colorInt = colorFunction.apply(biome); + } + else + { + colorInt = biome.getGrassColor(x, z); + } + return colorInt; + } + #endif + @Override public String getName() { return biome.toString(); diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java index 79883ba72..a163554c8 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/BatchGenerationEnvironment.java @@ -368,7 +368,11 @@ public final class BatchGenerationEnvironment extends AbstractBatchGenerationEnv CompoundTag chunkData = null; try { + #if POST_MC_1_19 + chunkData = level.getChunkSource().chunkMap.readChunk(chunkPos).get().orElse(null); + #else chunkData = level.getChunkSource().chunkMap.readChunk(chunkPos); + #endif } catch (Exception e) { 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 a34fa6498..14b793f28 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 @@ -35,13 +35,23 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.storage.ChunkScanAccess; #endif 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; +#endif import net.minecraft.world.level.storage.WorldData; public final class GlobalParameters { public final ChunkGenerator generator; + #if PRE_MC_1_19 public final StructureManager structures; + #else + public final StructureTemplateManager structures; + public final RandomState randomState; + #endif public final WorldGenSettings worldGenSettings; public final ThreadedLevelLightEngine lightEngine; public final LodBuilder lodBuilder; @@ -75,5 +85,8 @@ public final class GlobalParameters structures = server.getStructureManager(); generator = level.getChunkSource().getGenerator(); fixerUpper = server.getFixerUpper(); + #if POST_MC_1_19 + randomState = level.getChunkSource().randomState(); + #endif } } \ No newline at end of file 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 b5afc30b9..5b82538f7 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 @@ -61,10 +61,14 @@ public final class ThreadedParameters level = param.level; #if PRE_MC_1_18_1 structFeat = new WorldGenStructFeatManager(param.worldGenSettings, level); - #else + #elif PRE_MC_1_19 structCheck = new StructureCheck(param.chunkScanner, param.registry, param.structures, param.level.dimension(), param.generator, level, param.generator.getBiomeSource(), param.worldSeed, param.fixerUpper); + #else + structCheck = new StructureCheck(param.chunkScanner, param.registry, param.structures, + param.level.dimension(), param.generator, param.randomState, level, param.generator.getBiomeSource(), param.worldSeed, + param.fixerUpper); #endif } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java index b43149a65..66d6188dd 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/ChunkLoader.java @@ -56,7 +56,9 @@ import net.minecraft.world.level.material.Fluids; public class ChunkLoader { - #if POST_MC_1_18_1 + #if POST_MC_1_19 + private static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codecRW(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState()); + #elif POST_MC_1_18_1 private static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codec(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState()); #endif private static final String TAG_UPGRADE_DATA = "UpgradeData"; @@ -87,9 +89,12 @@ public class ChunkLoader #if PRE_MC_1_18_2 Codec> biomeCodec = PalettedContainer.codec( biomes, biomes.byNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, biomes.getOrThrow(Biomes.PLAINS)); - #else + #elif PRE_MC_1_19 Codec>> biomeCodec = PalettedContainer.codec( biomes.asHolderIdMap(), biomes.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, biomes.getHolderOrThrow(Biomes.PLAINS)); + #else + Codec>> biomeCodec = PalettedContainer.codecRW( + biomes.asHolderIdMap(), biomes.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, biomes.getHolderOrThrow(Biomes.PLAINS)); #endif #endif int i = #if PRE_MC_1_17_1 16; #else level.getSectionsCount(); #endif @@ -208,8 +213,13 @@ public class ChunkLoader return null; #else BlendingData blendingData = readBlendingData(tagLevel); + #if PRE_MC_1_19 if (chunkType == ChunkStatus.ChunkType.PROTOCHUNK && (blendingData == null || !blendingData.oldNoise())) return null; + #else + if (chunkType == ChunkStatus.ChunkType.PROTOCHUNK && (blendingData == null || level.getChunk(chunkPos.getMiddleBlockX(),chunkPos.getMiddleBlockZ()).isOldNoiseGeneration())) + return null; + #endif #endif long inhabitedTime = tagLevel.getLong("InhabitedTime"); diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java index 75c35d05b..a0fcc16ad 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java @@ -305,7 +305,11 @@ public class LightedWorldGenRegion extends WorldGenRegion public int calculateBlockTint(BlockPos blockPos, ColorResolver colorResolver) { + #if PRE_MC_1_19 int i = (Minecraft.getInstance()).options.biomeBlendRadius; + #else + int i = (Minecraft.getInstance()).options.biomeBlendRadius().get(); + #endif if (i == 0) return colorResolver.getColor((Biome) _getBiome(blockPos), blockPos.getX(), blockPos.getZ()); int j = (i * 2 + 1) * (i * 2 + 1); 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 8b75768b9..5813e6cce 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 @@ -37,28 +37,38 @@ import net.minecraft.core.SectionPos; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.levelgen.WorldGenSettings; +#if PRE_MC_1_19 import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.StructureFeatureManager; +#else +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.StructureManager; +#endif #if POST_MC_1_18_1 import net.minecraft.world.level.levelgen.structure.StructureCheck; #endif import net.minecraft.world.level.levelgen.structure.StructureStart; +#if PRE_MC_1_19 public class WorldGenStructFeatManager extends StructureFeatureManager { +#else +public class WorldGenStructFeatManager extends StructureManager { + #endif final WorldGenLevel genLevel; WorldGenSettings worldGenSettings; #if POST_MC_1_18_1 StructureCheck structureCheck; + #endif public WorldGenStructFeatManager(WorldGenSettings worldGenSettings, - WorldGenLevel genLevel #if POST_MC_1_18_1, StructureCheck structureCheck #endif) { + WorldGenLevel genLevel #if POST_MC_1_18_1 , StructureCheck structureCheck #endif ) { - super(genLevel, worldGenSettings #if POST_MC_1_18_1, structureCheck #endif); + super(genLevel, worldGenSettings #if POST_MC_1_18_1 , structureCheck #endif ); this.genLevel = genLevel; this.worldGenSettings = worldGenSettings; } @@ -67,7 +77,7 @@ public class WorldGenStructFeatManager extends StructureFeatureManager { 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(worldGenSettings, worldGenRegion #if POST_MC_1_18_1 , structureCheck #endif ); } private ChunkAccess _getChunk(int x, int z, ChunkStatus status) { @@ -97,75 +107,123 @@ public class WorldGenStructFeatManager extends StructureFeatureManager { if (chunk == null) return false; return chunk.hasAnyStructureReferences(); } - #if MC_1_18_1 - @Override - @SuppressWarnings({ "rawtypes", "unchecked" }) - public List> startsForFeature(SectionPos sectionPos, - StructureFeature structureFeature) { - ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); - if (chunk == null) return List.of(); + #if MC_1_18_1 + @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) + public List> startsForFeature(SectionPos sectionPos, + StructureFeature structureFeature) { - // Copied from StructureFeatureManager::startsForFeature(...) with slight tweaks - LongSet longSet = chunk.getReferencesForFeature(structureFeature); - ImmutableList.Builder builder = ImmutableList.builder(); - LongIterator longIterator = longSet.iterator(); - while (longIterator.hasNext()) { - long l = (Long)longIterator.next(); - SectionPos sectPos = SectionPos.of(new ChunkPos(l), genLevel.getMinSection()); - ChunkAccess startChunk = _getChunk(sectPos.x(), sectPos.z(), ChunkStatus.STRUCTURE_STARTS); - if (startChunk == null) continue; - StructureStart structureStart = this.getStartForFeature(sectPos, structureFeature, startChunk); - if (structureStart == null || !structureStart.isValid()) continue; - builder.add(structureStart); + ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); + if (chunk == null) return List.of(); + + // Copied from StructureFeatureManager::startsForFeature(...) with slight tweaks + LongSet longSet = chunk.getReferencesForFeature(structureFeature); + ImmutableList.Builder builder = ImmutableList.builder(); + LongIterator longIterator = longSet.iterator(); + while (longIterator.hasNext()) { + long l = (Long)longIterator.next(); + SectionPos sectPos = SectionPos.of(new ChunkPos(l), genLevel.getMinSection()); + ChunkAccess startChunk = _getChunk(sectPos.x(), sectPos.z(), ChunkStatus.STRUCTURE_STARTS); + if (startChunk == null) continue; + StructureStart structureStart = this.getStartForFeature(sectPos, structureFeature, startChunk); + if (structureStart == null || !structureStart.isValid()) continue; + builder.add(structureStart); + } + return builder.build(); + } + #else + #if PRE_MC_1_19 + @Override + public List startsForFeature(SectionPos sectionPos, Predicate> predicate) { + ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); + if (chunk == null) return List.of(); + + // Copied from StructureFeatureManager::startsForFeature(...) + Map, LongSet> map = chunk.getAllReferences(); + + ImmutableList.Builder builder = ImmutableList.builder(); + Iterator, LongSet>> var5 = map.entrySet().iterator(); + + while(var5.hasNext()) { + Map.Entry, LongSet> entry = var5.next(); + ConfiguredStructureFeature configuredStructureFeature = entry.getKey(); + if (predicate.test(configuredStructureFeature)) { + LongSet var10002 = (LongSet)entry.getValue(); + Objects.requireNonNull(builder); + this.fillStartsForFeature(configuredStructureFeature, var10002, builder::add); } - return builder.build(); - } - #else - @Override - public List startsForFeature(SectionPos sectionPos, Predicate> predicate) { - ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); - if (chunk == null) return List.of(); - - // Copied from StructureFeatureManager::startsForFeature(...) - Map, LongSet> map = chunk.getAllReferences(); - - ImmutableList.Builder builder = ImmutableList.builder(); - Iterator, LongSet>> var5 = map.entrySet().iterator(); - - while(var5.hasNext()) { - Map.Entry, LongSet> entry = var5.next(); - ConfiguredStructureFeature configuredStructureFeature = entry.getKey(); - if (predicate.test(configuredStructureFeature)) { - LongSet var10002 = (LongSet)entry.getValue(); - Objects.requireNonNull(builder); - this.fillStartsForFeature(configuredStructureFeature, var10002, builder::add); - } - } - - return builder.build(); } - @Override - public List startsForFeature(SectionPos sectionPos, ConfiguredStructureFeature configuredStructureFeature) { - ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); - if (chunk == null) return (List) Stream.empty(); + return builder.build(); + } - // Copied from StructureFeatureManager::startsForFeature(...) - LongSet longSet = chunk.getReferencesForFeature(configuredStructureFeature); - ImmutableList.Builder builder = ImmutableList.builder(); - Objects.requireNonNull(builder); - this.fillStartsForFeature(configuredStructureFeature, longSet, builder::add); - return builder.build(); - } + @Override + public List startsForFeature(SectionPos sectionPos, ConfiguredStructureFeature configuredStructureFeature) { + ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); + if (chunk == null) return (List) Stream.empty(); - @Override - public Map, LongSet> getAllStructuresAt(BlockPos blockPos) { - SectionPos sectionPos = SectionPos.of(blockPos); - ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); - if (chunk == null) return (Map, LongSet>) Stream.empty(); + // Copied from StructureFeatureManager::startsForFeature(...) + LongSet longSet = chunk.getReferencesForFeature(configuredStructureFeature); + ImmutableList.Builder builder = ImmutableList.builder(); + Objects.requireNonNull(builder); + this.fillStartsForFeature(configuredStructureFeature, longSet, builder::add); + return builder.build(); + } + + @Override + public Map, LongSet> getAllStructuresAt(BlockPos blockPos) { + SectionPos sectionPos = SectionPos.of(blockPos); + ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); + if (chunk == null) return (Map, LongSet>) Stream.empty(); return chunk.getAllReferences(); + } + #else + @Override + public List startsForStructure(ChunkPos sectionPos, Predicate predicate) { + ChunkAccess chunk = _getChunk(sectionPos.x, sectionPos.z, ChunkStatus.STRUCTURE_REFERENCES); + if (chunk == null) return List.of(); + + // Copied from StructureFeatureManager::startsForFeature(...) + Map map = chunk.getAllReferences(); + + ImmutableList.Builder builder = ImmutableList.builder(); + Iterator> var5 = map.entrySet().iterator(); + + while (var5.hasNext()) { + Map.Entry entry = var5.next(); + Structure configuredStructureFeature = entry.getKey(); + if (predicate.test(configuredStructureFeature)) { + LongSet var10002 = (LongSet) entry.getValue(); + Objects.requireNonNull(builder); + this.fillStartsForStructure(configuredStructureFeature, var10002, builder::add); + } } - #endif + + return builder.build(); + } + + @Override + public List startsForStructure(SectionPos sectionPos, Structure structure) { + ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); + if (chunk == null) return (List) Stream.empty(); + + // Copied from StructureFeatureManager::startsForFeature(...) + LongSet longSet = chunk.getReferencesForStructure(structure); + ImmutableList.Builder builder = ImmutableList.builder(); + Objects.requireNonNull(builder); + this.fillStartsForStructure(structure, longSet, builder::add); + return builder.build(); + } + + @Override + public Map getAllStructuresAt(BlockPos blockPos) { + SectionPos sectionPos = SectionPos.of(blockPos); + ChunkAccess chunk = _getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES); + if (chunk == null) return (Map) Stream.empty(); + return chunk.getAllReferences(); + } + #endif + #endif #endif } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java index 6f1299bcc..e6667afb5 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepBiomes.java @@ -27,7 +27,9 @@ import com.seibel.lod.common.wrappers.worldGeneration.ThreadedParameters; import net.minecraft.core.Registry; import net.minecraft.server.level.WorldGenRegion; +#if PRE_MC_1_19 import net.minecraft.world.level.StructureFeatureManager; +#endif import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; @@ -71,9 +73,12 @@ public final class StepBiomes { // System.out.println("StepBiomes: "+chunk.getPos()); #if PRE_MC_1_18_1 environment.params.generator.createBiomes(environment.params.biomes, chunk); - #else + #elif PRE_MC_1_19 chunk = environment.joinSync(environment.params.generator.createBiomes(environment.params.biomes, Runnable::run, Blender.of(worldGenRegion), tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); + #else + chunk = environment.joinSync(environment.params.generator.createBiomes(environment.params.biomes, Runnable::run, environment.params.randomState, Blender.of(worldGenRegion), + tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); #endif } } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java index 1bf8e077a..2124d24c4 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepNoise.java @@ -34,7 +34,9 @@ import net.minecraft.util.Mth; #if POST_MC_1_17_1 import net.minecraft.world.level.LevelHeightAccessor; #endif +#if PRE_MC_1_19 import net.minecraft.world.level.StructureFeatureManager; +#endif import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunkSection; @@ -79,9 +81,12 @@ public final class StepNoise { #elif PRE_MC_1_18_1 chunk = environment.joinSync(environment.params.generator.fillFromNoise(Runnable::run, tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); - #else + #elif PRE_MC_1_19 chunk = environment.joinSync(environment.params.generator.fillFromNoise(Runnable::run, Blender.of(worldGenRegion), tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); + #else + chunk = environment.joinSync(environment.params.generator.fillFromNoise(Runnable::run, Blender.of(worldGenRegion), environment.params.randomState, + tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk)); #endif LodUtil.checkInterruptsUnchecked(); // Speed up termination responsiveness } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureReference.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureReference.java index ade106f06..e158e0529 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureReference.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepStructureReference.java @@ -32,7 +32,9 @@ import net.minecraft.core.Registry; import net.minecraft.core.SectionPos; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.world.level.ChunkPos; +#if PRE_MC_1_19 import net.minecraft.world.level.StructureFeatureManager; +#endif import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.ProtoChunk; 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 ed3a5a691..ae6e45934 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 @@ -67,12 +67,20 @@ public final class StepStructureStart { chunksToDo.add(chunk); } + #if PRE_MC_1_19 if (environment.params.worldGenSettings.generateFeatures()) { + #elif POST_MC_1_19 + if (environment.params.worldGenSettings.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 + environment.params.generator.createStructures(environment.params.registry, environment.params.randomState, tParams.structFeat, chunk, environment.params.structures, + environment.params.worldSeed); + #endif #if POST_MC_1_18_1 try { tParams.structCheck.onStructureLoad(chunk.getPos(), chunk.getAllStarts()); diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java index 04240f58f..23cfda833 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepSurface.java @@ -60,9 +60,10 @@ public final class StepSurface { // System.out.println("StepSurface: "+chunk.getPos()); #if PRE_MC_1_18_1 environment.params.generator.buildSurfaceAndBedrock(worldGenRegion, chunk); - - #else + #elif PRE_MC_1_19 environment.params.generator.buildSurface(worldGenRegion, tParams.structFeat.forWorldGenRegion(worldGenRegion), chunk); + #else + environment.params.generator.buildSurface(worldGenRegion, tParams.structFeat.forWorldGenRegion(worldGenRegion), environment.params.randomState, chunk); #endif } } diff --git a/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinFogRenderer.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinFogRenderer.java index 446898bb7..cbf1e14b9 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinFogRenderer.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinFogRenderer.java @@ -46,8 +46,12 @@ public class MixinFogRenderer { private static final float A_REALLY_REALLY_BIG_VALUE = 420694206942069.F; private static final float A_EVEN_LARGER_VALUE = 42069420694206942069.F; - @Inject(at = @At("RETURN"), method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZ)V") + @Inject(at = @At("RETURN"), method = "setupFog") + #if PRE_MC_1_19 private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, CallbackInfo callback) { + #else + private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float g, CallbackInfo callback) { + #endif #if PRE_MC_1_17_1 FluidState fluidState = camera.getFluidInCamera(); boolean cameraNotInFluid = fluidState.isEmpty(); diff --git a/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinGameRenderer.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinGameRenderer.java index b8d468e71..186c251e9 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinGameRenderer.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinGameRenderer.java @@ -10,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(GameRenderer.class) public class MixinGameRenderer { + #if POST_MC_1_17_1 @Inject(method = "shutdownShaders", at = @At("HEAD")) public void onShutdownShaders(CallbackInfo ci) { SharedApi.LOGGER.info("Shutting down renderer"); @@ -22,4 +23,20 @@ public class MixinGameRenderer { SharedApi.LOGGER.info("Starting up renderer"); ClientApi.INSTANCE.rendererStartupEvent(); } + #else + // FIXME: on 1.16 we dont have stuff for reloading/shutting down shaders + + @Inject(method = "shutdownShaders", at = @At("HEAD")) + public void onShutdownShaders(CallbackInfo ci) { + SharedApi.LOGGER.info("Shutting down renderer"); + ClientApi.INSTANCE.rendererShutdownEvent(); + } + + //FIXME: This I think will dup multiple renderStartupEvent calls... + @Inject(method = {"reloadShaders", "preloadUiShader", "preloadShader"}, at = @At("TAIL")) + public void onStartupShaders(CallbackInfo ci) { + SharedApi.LOGGER.info("Starting up renderer"); + ClientApi.INSTANCE.rendererStartupEvent(); + } + #endif } diff --git a/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinOptionsScreen.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinOptionsScreen.java index e528b0e5e..6a014a78e 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinOptionsScreen.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/client/MixinOptionsScreen.java @@ -26,7 +26,9 @@ import com.seibel.lod.core.config.Config; import net.minecraft.client.gui.screens.OptionsScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; +#if PRE_MC_1_19 import net.minecraft.network.chat.TranslatableComponent; +#endif import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -66,6 +68,10 @@ public class MixinOptionsScreen extends Screen { // For now it goes to the client option by default (buttonWidget) -> Objects.requireNonNull(minecraft).setScreen(GetConfigScreen.getScreen(this)), // Add a title to the screen - new TranslatableComponent("text.autoconfig." + ModInfo.ID + ".title"))); + #if PRE_MC_1_19 + new TranslatableComponent(ModInfo.ID + ".title"))); + #else + Component.translatable(ModInfo.ID + ".title"))); + #endif } } diff --git a/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java b/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java index 11e0e6b99..ee8bd2f16 100644 --- a/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java +++ b/forge/src/main/java/com/seibel/lod/forge/ForgeMain.java @@ -35,6 +35,9 @@ import com.seibel.lod.forge.wrappers.modAccessor.OptifineAccessor; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.core.Direction; +#if POST_MC_1_19 +import net.minecraft.util.RandomSource; +#endif import net.minecraft.world.level.ColorResolver; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; @@ -115,13 +118,19 @@ public class ForgeMain implements LodForgeMethodCaller private final ModelDataMap dataMap = new ModelDataMap.Builder().build(); @Override + #if PRE_MC_1_19 public List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, Random random) { return mc.getModelManager().getBlockModelShaper().getBlockModel(block.defaultBlockState()).getQuads(blockState, direction, random, dataMap); } + #else + public List getQuads(MinecraftClientWrapper mc, Block block, BlockState blockState, Direction direction, RandomSource random) { + return mc.getModelManager().getBlockModelShaper().getBlockModel(block.defaultBlockState()).getQuads(blockState, direction, random, dataMap); + } + #endif @Override public int colorResolverGetColor(ColorResolver resolver, Biome biome, double x, double z) { - #if MC_1_17_1 + #if MC_1_17_1______Still_needed return resolver.m_130045_(biome, x, z); #else return resolver.getColor(biome, x, z); diff --git a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinOptionsScreen.java b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinOptionsScreen.java index ed6ed8aca..8d4f28d06 100644 --- a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinOptionsScreen.java +++ b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinOptionsScreen.java @@ -26,7 +26,9 @@ import com.seibel.lod.core.config.Config; import net.minecraft.client.gui.screens.OptionsScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; +#if PRE_MC_1_19 import net.minecraft.network.chat.TranslatableComponent; +#endif import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -66,6 +68,10 @@ public class MixinOptionsScreen extends Screen { // For now it goes to the client option by default (buttonWidget) -> Objects.requireNonNull(minecraft).setScreen(GetConfigScreen.getScreen(this)), // Add a title to the screen - new TranslatableComponent("text.autoconfig." + ModInfo.ID + ".title"))); + #if PRE_MC_1_19 + new TranslatableComponent(ModInfo.ID + ".title"))); + #else + Component.translatable(ModInfo.ID + ".title"))); + #endif } }