Merge pull request #508 from PolyhedralDev/dev/1.21.6

Dev/1.21.6
This commit is contained in:
Zoë Gidiere 2025-06-17 15:34:38 -06:00 committed by GitHub
commit b2e21d8b70
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
41 changed files with 163 additions and 128 deletions

View File

@ -6,6 +6,12 @@ plugins {
repositories { repositories {
mavenCentral() mavenCentral()
gradlePluginPortal() gradlePluginPortal()
maven("https://maven.solo-studios.ca/releases") {
name = "Solo Studios"
}
maven("https://maven.solo-studios.ca/snapshots") {
name = "Solo Studios"
}
maven("https://repo.codemc.org/repository/maven-public") { maven("https://repo.codemc.org/repository/maven-public") {
name = "CodeMC" name = "CodeMC"
} }

View File

@ -30,6 +30,12 @@ fun Project.configureDependencies() {
repositories { repositories {
mavenCentral() mavenCentral()
gradlePluginPortal() gradlePluginPortal()
maven("https://maven.solo-studios.ca/releases") {
name = "Solo Studios"
}
maven("https://maven.solo-studios.ca/snapshots") {
name = "Solo Studios"
}
maven("https://maven.fabricmc.net/") { maven("https://maven.fabricmc.net/") {
name = "FabricMC" name = "FabricMC"
} }

View File

@ -10,7 +10,7 @@ object Versions {
const val cloud = "2.0.0" const val cloud = "2.0.0"
const val caffeine = "3.2.0" const val caffeine = "3.2.1"
const val slf4j = "2.0.17" const val slf4j = "2.0.17"
@ -22,13 +22,13 @@ object Versions {
const val asm = "9.8" const val asm = "9.8"
const val snakeYml = "2.4" const val snakeYml = "2.4"
const val jetBrainsAnnotations = "26.0.2" const val jetBrainsAnnotations = "26.0.2"
const val junit = "5.13.0" const val junit = "5.13.1"
const val nbt = "6.1" const val nbt = "6.1"
} }
} }
object Fabric { object Fabric {
const val fabricAPI = "0.125.3+${Mod.minecraft}" const val fabricAPI = "0.127.0+${Mod.minecraft}"
const val cloud = "2.0.0-beta.10" const val cloud = "2.0.0-beta.10"
} }
// //
@ -39,8 +39,9 @@ object Versions {
object Mod { object Mod {
const val mixin = "0.15.5+mixin.0.8.7" const val mixin = "0.15.5+mixin.0.8.7"
const val mixinExtras = "0.4.1"
const val minecraft = "1.21.5" const val minecraft = "1.21.6"
const val yarn = "$minecraft+build.1" const val yarn = "$minecraft+build.1"
const val fabricLoader = "0.16.14" const val fabricLoader = "0.16.14"
@ -55,18 +56,18 @@ object Versions {
// } // }
object Bukkit { object Bukkit {
const val minecraft = "1.21.5-R0.1" const val minecraft = "1.21.6-R0.1"
const val paperBuild = "$minecraft-20250529.121722-14" const val paperBuild = "$minecraft-20250617.170821-8"
const val paper = paperBuild const val paper = paperBuild
const val paperLib = "1.0.8" const val paperLib = "1.0.8"
const val reflectionRemapper = "0.1.2" const val reflectionRemapper = "0.1.2"
const val paperDevBundle = "$minecraft-20250529.121722-99" const val paperDevBundle = paperBuild
const val runPaper = "2.3.1" const val runPaper = "2.3.1"
const val paperWeight = "2.0.0-beta.17" const val paperWeight = "2.0.0-beta.17"
const val cloud = "2.0.0-beta.10" const val cloud = "2.0.0-beta.10"
} }
// //
// object Sponge { // object Sponge {
// const val sponge = "9.0.0-SNAPSHOT" // const val sponge = "9.0.0-SNAPSHOT"
// const val mixin = "0.8.2" // const val mixin = "0.8.2"

View File

@ -1,10 +1,14 @@
plugins { plugins {
id("io.papermc.paperweight.userdev")
id("xyz.jpenilla.run-paper") version Versions.Bukkit.runPaper id("xyz.jpenilla.run-paper") version Versions.Bukkit.runPaper
} }
dependencies { dependencies {
// Required for :platforms:bukkit:runDevBundleServer task
paperweight.paperDevBundle(Versions.Bukkit.paperDevBundle)
shaded(project(":platforms:bukkit:common")) shaded(project(":platforms:bukkit:common"))
shaded(project(":platforms:bukkit:nms:v1_21_5", configuration = "reobf")) shaded(project(":platforms:bukkit:nms:v1_21_6"))
shaded("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) shaded("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper)
} }

View File

@ -54,6 +54,10 @@ public interface Initializer {
private static Initializer constructInitializer() { private static Initializer constructInitializer() {
try { try {
String packageVersion = NMS; String packageVersion = NMS;
if (NMS.equals("v1_21_5")) {
packageVersion = "v1_21_6";
}
Class<?> initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer"); Class<?> initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer");
try { try {
return (Initializer) initializerClass.getConstructor().newInstance(); return (Initializer) initializerClass.getConstructor().newInstance();

View File

@ -6,10 +6,4 @@ dependencies {
api(project(":platforms:bukkit:common")) api(project(":platforms:bukkit:common"))
paperweight.paperDevBundle(Versions.Bukkit.paperDevBundle) paperweight.paperDevBundle(Versions.Bukkit.paperDevBundle)
implementation("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) implementation("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper)
}
tasks {
assemble {
dependsOn("reobfJar")
}
} }

View File

@ -1,6 +1,6 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import com.dfsek.terra.bukkit.nms.v1_21_5.config.VanillaBiomeProperties; import com.dfsek.terra.bukkit.nms.v1_21_6.config.VanillaBiomeProperties;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Holder.Reference; import net.minecraft.core.Holder.Reference;

View File

@ -1,11 +1,11 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.bukkit.BukkitAddon; import com.dfsek.terra.bukkit.BukkitAddon;
import com.dfsek.terra.bukkit.PlatformImpl; import com.dfsek.terra.bukkit.PlatformImpl;
import com.dfsek.terra.bukkit.nms.v1_21_5.config.VanillaBiomeProperties; import com.dfsek.terra.bukkit.nms.v1_21_6.config.VanillaBiomeProperties;
public class NMSAddon extends BukkitAddon { public class NMSAddon extends BukkitAddon {

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -12,7 +12,7 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.bukkit.nms.v1_21_5.config.VanillaBiomeProperties; import com.dfsek.terra.bukkit.nms.v1_21_6.config.VanillaBiomeProperties;
public class NMSBiomeInjector { public class NMSBiomeInjector {
@ -33,9 +33,8 @@ public class NMSBiomeInjector {
.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) .waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor()))
.waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor()))
.skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor()))
.grassColorModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getSpecialEffects().getGrassColorModifier())); .grassColorModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getSpecialEffects().getGrassColorModifier()))
// .grassColorOverride(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColor(), vanilla.getSpecialEffects().getGrassColorOverride().orElseGet(() -> Reflection.BIOME.invokeGrassColorFromTexture(vanilla)))) .backgroundMusicVolume(Objects.requireNonNullElse(vanillaBiomeProperties.getMusicVolume(), vanilla.getBackgroundMusicVolume()));
// .foliageColorOverride(Objects.requireNonNullElse(vanillaBiomeProperties.getFoliageColor(), vanilla.getFoliageColor()));
if(vanillaBiomeProperties.getGrassColor() == null) { if(vanillaBiomeProperties.getGrassColor() == null) {
vanilla.getSpecialEffects().getGrassColorOverride().ifPresent(effects::grassColorOverride); vanilla.getSpecialEffects().getGrassColorOverride().ifPresent(effects::grassColorOverride);

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import com.dfsek.terra.bukkit.BukkitAddon; import com.dfsek.terra.bukkit.BukkitAddon;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ChunkMap;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.LevelHeightAccessor;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Holder.Reference; import net.minecraft.core.Holder.Reference;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5; package com.dfsek.terra.bukkit.nms.v1_21_6;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.ConfigTemplate; import com.dfsek.tectonic.api.config.template.ConfigTemplate;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
@ -38,6 +38,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
@Default @Default
private Integer foliageColor = null; private Integer foliageColor = null;
@Value("colors.dry-foliage")
@Default
private Integer dryFoliageColor = null;
@Value("colors.sky") @Value("colors.sky")
@Default @Default
private Integer skyColor = null; private Integer skyColor = null;
@ -82,6 +86,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
@Default @Default
private Music music = null; private Music music = null;
@Value("sound.music-volume")
@Default
private Float musicVolume = null;
@Value("spawning") @Value("spawning")
@Default @Default
private MobSpawnSettings spawnSettings = null; private MobSpawnSettings spawnSettings = null;
@ -98,6 +106,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
return foliageColor; return foliageColor;
} }
public Integer getDryFoliageColor() {
return dryFoliageColor;
}
public Integer getGrassColor() { public Integer getGrassColor() {
return grassColor; return grassColor;
} }
@ -154,6 +166,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
return music; return music;
} }
public Float getMusicVolume() {
return musicVolume;
}
public MobSpawnSettings getSpawnSettings() { public MobSpawnSettings getSpawnSettings() {
return spawnSettings; return spawnSettings;
} }

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms.v1_21_5.config; package com.dfsek.terra.bukkit.nms.v1_21_6.config;
import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.annotations.Value;

View File

@ -26,7 +26,9 @@ dependencies {
modImplementation("net.fabricmc:fabric-loader:${Versions.Mod.fabricLoader}") modImplementation("net.fabricmc:fabric-loader:${Versions.Mod.fabricLoader}")
modImplementation("org.incendo", "cloud-fabric", Versions.Fabric.cloud) modImplementation("org.incendo", "cloud-fabric", Versions.Fabric.cloud) {
exclude("me.lucko", "fabric-permissions-api")
}
include("org.incendo", "cloud-fabric", Versions.Fabric.cloud) include("org.incendo", "cloud-fabric", Versions.Fabric.cloud)
modRuntimeOnly("net.fabricmc.fabric-api", "fabric-api", Versions.Fabric.fabricAPI) modRuntimeOnly("net.fabricmc.fabric-api", "fabric-api", Versions.Fabric.fabricAPI)

View File

@ -38,6 +38,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
@Default @Default
private Integer foliageColor = null; private Integer foliageColor = null;
@Value("colors.dry-foliage")
@Default
private Integer dryFoliageColor = null;
@Value("colors.sky") @Value("colors.sky")
@Default @Default
private Integer skyColor = null; private Integer skyColor = null;
@ -82,6 +86,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
@Default @Default
private MusicSound music = null; private MusicSound music = null;
@Value("sound.music-volume")
@Default
private Float musicVolume = null;
@Value("spawning") @Value("spawning")
@Default @Default
private SpawnSettings spawnSettings = null; private SpawnSettings spawnSettings = null;
@ -111,6 +119,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
return foliageColor; return foliageColor;
} }
public Integer getDryFoliageColor() {
return dryFoliageColor;
}
public Integer getSkyColor() { public Integer getSkyColor() {
return skyColor; return skyColor;
} }
@ -155,6 +167,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
return music; return music;
} }
public Float getMusicVolume() {
return musicVolume;
}
public SpawnSettings getSpawnSettings() { public SpawnSettings getSpawnSettings() {
return spawnSettings; return spawnSettings;
} }

View File

@ -1,28 +0,0 @@
package com.dfsek.terra.mod.mixin.fix;
import net.minecraft.entity.passive.BeeEntity.MoveToFlowerGoal;
import net.minecraft.entity.passive.BeeEntity.MoveToHiveGoal;
import net.minecraft.util.math.random.CheckedRandom;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import com.dfsek.terra.mod.CommonPlatform;
/**
* Bees spawning uses world.random without synchronization. This causes issues when spawning bees during world generation.
*/
@Mixin({
MoveToHiveGoal.class,
MoveToFlowerGoal.class
})
public class BeeMoveGoalsUnsynchronizedRandomAccessFix {
@Redirect(method = "<init>",
at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;random:Lnet/minecraft/util/math/random/Random;"))
public Random redirectRandomAccess(World instance) {
return new CheckedRandom(CommonPlatform.get().getServer().getTicks()); // replace with new random seeded by tick time.
}
}

View File

@ -35,9 +35,25 @@ public class BiomeUtil {
.skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor()))
.grassColorModifier( .grassColorModifier(
Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getEffects().getGrassColorModifier())) Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getEffects().getGrassColorModifier()))
.grassColor(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColor(), .musicVolume(Objects.requireNonNullElse(vanillaBiomeProperties.getMusicVolume(), vanilla.getMusicVolume()));
vanilla.getEffects().getGrassColor().orElseGet(() -> ((BiomeInvoker) ((Object) vanilla)).invokeGetDefaultGrassColor())))
.foliageColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFoliageColor(), vanilla.getFoliageColor())); if(vanillaBiomeProperties.getGrassColor() == null) {
vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor);
} else {
effects.grassColor(vanillaBiomeProperties.getGrassColor());
}
if(vanillaBiomeProperties.getFoliageColor() == null) {
vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor);
} else {
effects.foliageColor(vanillaBiomeProperties.getFoliageColor());
}
if(vanillaBiomeProperties.getDryFoliageColor() == null) {
vanilla.getEffects().getDryFoliageColor().ifPresent(effects::dryFoliageColor);
} else {
effects.dryFoliageColor(vanillaBiomeProperties.getDryFoliageColor());
}
if(vanillaBiomeProperties.getParticleConfig() == null) { if(vanillaBiomeProperties.getParticleConfig() == null) {
vanilla.getEffects().getParticleConfig().ifPresent(effects::particleConfig); vanilla.getEffects().getParticleConfig().ifPresent(effects::particleConfig);

View File

@ -9,7 +9,6 @@
"access.StateAccessor", "access.StateAccessor",
"access.StructureAccessorAccessor", "access.StructureAccessorAccessor",
"access.VillagerTypeAccessor", "access.VillagerTypeAccessor",
"fix.BeeMoveGoalsUnsynchronizedRandomAccessFix",
"fix.NetherFossilOptimization", "fix.NetherFossilOptimization",
"implementations.compat.GenerationSettingsFloraFeaturesMixin", "implementations.compat.GenerationSettingsFloraFeaturesMixin",
"implementations.terra.BiomeMixin", "implementations.terra.BiomeMixin",

View File

@ -7,6 +7,7 @@ dependencies {
shadedApi(project(":common:implementation:base")) shadedApi(project(":common:implementation:base"))
compileOnly("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") compileOnly("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}")
compileOnly("io.github.llamalad7:mixinextras-common:${Versions.Mod.mixinExtras}")
annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}")
annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}") annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}")
@ -18,6 +19,7 @@ dependencies {
modImplementation("org.incendo", "cloud-fabric", Versions.Fabric.cloud) { modImplementation("org.incendo", "cloud-fabric", Versions.Fabric.cloud) {
exclude("net.fabricmc") exclude("net.fabricmc")
exclude("net.fabricmc.fabric-api") exclude("net.fabricmc.fabric-api")
exclude("me.lucko", "fabric-permissions-api")
} }
} }

View File

@ -107,7 +107,7 @@ public abstract class LifecyclePlatform extends ModPlatform {
super.platformAddon().forEach(addons::add); super.platformAddon().forEach(addons::add);
String mcVersion = MinecraftVersion.CURRENT.getName(); String mcVersion = MinecraftVersion.CURRENT.name();
try { try {
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft")); addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft"));
} catch(ParseException e) { } catch(ParseException e) {

View File

@ -1,27 +0,0 @@
package com.dfsek.terra.lifecycle.mixin.lifecycle;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.mod.CommonPlatform;
import com.dfsek.terra.mod.ModPlatform;
import net.minecraft.client.gui.screen.world.CreateWorldScreen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import static com.dfsek.terra.lifecycle.util.LifecycleUtil.initialized;
@Mixin(CreateWorldScreen.class)
public class CreateWorldScreenMixin {
@Inject(method = "onCloseScreen()V", at = @At("HEAD"))
public void onClose(CallbackInfo ci) {
ModPlatform platform = CommonPlatform.get();
platform.getRawConfigRegistry().clear();
initialized = false;
}
}

View File

@ -34,11 +34,4 @@ public class MinecraftServerMixin {
WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, CallbackInfo ci) { WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, CallbackInfo ci) {
LifecyclePlatform.setServer((MinecraftServer) (Object) this); LifecyclePlatform.setServer((MinecraftServer) (Object) this);
} }
@Inject(method = "shutdown()V", at = @At("RETURN"))
private void injectShutdown(CallbackInfo ci) {
ModPlatform platform = CommonPlatform.get();
platform.getRawConfigRegistry().clear();
initialized = false;
}
} }

View File

@ -1,5 +1,8 @@
package com.dfsek.terra.lifecycle.mixin.lifecycle; package com.dfsek.terra.lifecycle.mixin.lifecycle;
import com.dfsek.terra.mod.CommonPlatform;
import com.dfsek.terra.mod.ModPlatform;
import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantment;
import net.minecraft.registry.MutableRegistry; import net.minecraft.registry.MutableRegistry;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
@ -7,6 +10,7 @@ import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryLoader; import net.minecraft.registry.RegistryLoader;
import net.minecraft.registry.RegistryLoader.Loader; import net.minecraft.registry.RegistryLoader.Loader;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList; import net.minecraft.world.biome.source.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
@ -18,10 +22,27 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Coerce;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
import com.llamalad7.mixinextras.sugar.Local;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Coerce;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.registry.DynamicRegistryManager;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryLoader;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.resource.ResourceManager;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer; import java.util.function.Consumer;
import com.dfsek.terra.lifecycle.LifecyclePlatform; import com.dfsek.terra.lifecycle.LifecyclePlatform;
@ -38,31 +59,39 @@ public class RegistryLoaderMixin {
@Final @Final
private static Logger LOGGER; private static Logger LOGGER;
@Redirect( @Unique
private static final AtomicBoolean LOADING_DYNAMIC_REGISTRIES = new AtomicBoolean(false);
@Inject(method = "loadFromResource(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;", at = @At("HEAD"))
private static void loadFromResources(ResourceManager resourceManager, List<RegistryWrapper.Impl<?>> registries, List<RegistryLoader.Entry<?>> entries, CallbackInfoReturnable<DynamicRegistryManager.Immutable> cir) {
LOADING_DYNAMIC_REGISTRIES.set(entries.stream().anyMatch(entry -> entry.key() == RegistryKeys.BIOME));
}
@Inject(
method = "load(Lnet/minecraft/registry/RegistryLoader$RegistryLoadable;Ljava/util/List;Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;", method = "load(Lnet/minecraft/registry/RegistryLoader$RegistryLoadable;Ljava/util/List;Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;",
at = @At( at = @At(
value = "INVOKE", value = "INVOKE",
target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V", target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V",
ordinal = 1 // we want right after the first forEach ordinal = 1
) )
) )
private static void grabManager(List<RegistryLoader.Loader<?>> instance, Consumer<? super Loader<?>> consumer) { private static void beforeFreeze(@Coerce Object loadable, List<RegistryWrapper.Impl<?>> wrappers, List<RegistryLoader.Entry<?>> entries, CallbackInfoReturnable<DynamicRegistryManager.Immutable> cir, @Local(ordinal = 2) List<RegistryLoader.Loader<?>> registriesList) {
if(!initialized) { if (LOADING_DYNAMIC_REGISTRIES.getAndSet(false)) {
MutableRegistry<Biome> biomes = extractRegistry(instance, RegistryKeys.BIOME).orElseThrow(); ModPlatform platform = CommonPlatform.get();
MutableRegistry<DimensionType> dimensionTypes = extractRegistry(instance, RegistryKeys.DIMENSION_TYPE).orElseThrow(); platform.getRawConfigRegistry().clear();
MutableRegistry<WorldPreset> worldPresets = extractRegistry(instance, RegistryKeys.WORLD_PRESET).orElseThrow(); MutableRegistry<Biome> biomes = extractRegistry(registriesList, RegistryKeys.BIOME).orElseThrow();
MutableRegistry<ChunkGeneratorSettings> chunkGeneratorSettings = extractRegistry(instance, MutableRegistry<DimensionType> dimensionTypes = extractRegistry(registriesList, RegistryKeys.DIMENSION_TYPE).orElseThrow();
MutableRegistry<WorldPreset> worldPresets = extractRegistry(registriesList, RegistryKeys.WORLD_PRESET).orElseThrow();
MutableRegistry<ChunkGeneratorSettings> chunkGeneratorSettings = extractRegistry(registriesList,
RegistryKeys.CHUNK_GENERATOR_SETTINGS).orElseThrow(); RegistryKeys.CHUNK_GENERATOR_SETTINGS).orElseThrow();
MutableRegistry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists = extractRegistry(instance, MutableRegistry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists = extractRegistry(registriesList,
RegistryKeys.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST).orElseThrow(); RegistryKeys.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST).orElseThrow();
MutableRegistry<Enchantment> enchantments = extractRegistry(instance, RegistryKeys.ENCHANTMENT).orElseThrow(); MutableRegistry<Enchantment> enchantments = extractRegistry(registriesList, RegistryKeys.ENCHANTMENT).orElseThrow();
LifecyclePlatform.setRegistries(biomes, dimensionTypes, chunkGeneratorSettings, multiNoiseBiomeSourceParameterLists, LifecyclePlatform.setRegistries(biomes, dimensionTypes, chunkGeneratorSettings, multiNoiseBiomeSourceParameterLists,
enchantments); enchantments);
LifecycleUtil.initialize(biomes, worldPresets); LifecycleUtil.initialize(biomes, worldPresets);
initialized = true;
} }
instance.forEach(consumer);
} }
@Unique @Unique

View File

@ -12,9 +12,6 @@
"lifecycle.RegistryLoaderMixin", "lifecycle.RegistryLoaderMixin",
"lifecycle.SaveLoadingMixin" "lifecycle.SaveLoadingMixin"
], ],
"client": [
"lifecycle.CreateWorldScreenMixin"
],
"server": [ "server": [
], ],
"injectors": { "injectors": {

View File

@ -26,6 +26,12 @@ include(":platforms:minestom:example")
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
maven("https://maven.solo-studios.ca/releases") {
name = "Solo Studios"
}
maven("https://maven.solo-studios.ca/snapshots") {
name = "Solo Studios"
}
maven("https://maven.fabricmc.net") { maven("https://maven.fabricmc.net") {
name = "Fabric Maven" name = "Fabric Maven"
} }