diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 4bb5b9b0a..585308c45 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -79,6 +79,6 @@ object Versions { } object Allay { - const val api = "1cb3bb69c6" + const val api = "0114e0b290" } } \ No newline at end of file diff --git a/platforms/allay/src/main/java/com/dfsek/terra/allay/TerraAllayPlugin.java b/platforms/allay/src/main/java/com/dfsek/terra/allay/TerraAllayPlugin.java index 330d6c377..b1bcc7eab 100644 --- a/platforms/allay/src/main/java/com/dfsek/terra/allay/TerraAllayPlugin.java +++ b/platforms/allay/src/main/java/com/dfsek/terra/allay/TerraAllayPlugin.java @@ -1,11 +1,15 @@ package com.dfsek.terra.allay; +import org.allaymc.api.eventbus.EventHandler; +import org.allaymc.api.eventbus.event.world.WorldUnloadEvent; import org.allaymc.api.plugin.Plugin; import org.allaymc.api.registry.Registries; +import org.allaymc.api.server.Server; import com.dfsek.terra.allay.generator.AllayGeneratorWrapper; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; + /** * @author daoge_cmd */ @@ -46,6 +50,11 @@ public class TerraAllayPlugin extends Plugin { pluginLogger.info("Terra started"); } + @Override + public void onEnable() { + Server.getInstance().getEventBus().registerListener(this); + } + @Override public boolean isReloadable() { return true; @@ -59,4 +68,9 @@ public class TerraAllayPlugin extends Plugin { pluginLogger.error("Terra failed to reload."); } } + + @EventHandler + private void onWorldUnload(WorldUnloadEvent event) { + AllayPlatform.GENERATOR_WRAPPERS.removeIf(wrapper -> wrapper.getAllayWorldGenerator().getDimension().getWorld() == event.getWorld()); + } } diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index 08a75dc12..8af6d00c3 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -4,7 +4,7 @@ plugins { dependencies { shaded(project(":platforms:bukkit:common")) - shaded(project(":platforms:bukkit:nms:v1_21", configuration = "reobf")) + shaded(project(":platforms:bukkit:nms:v1_21_3", configuration = "reobf")) shaded("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) } diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java index c8a59100d..1fba7bda8 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/BukkitAddon.java @@ -4,18 +4,15 @@ import ca.solostudios.strata.Versions; import ca.solostudios.strata.version.Version; import com.dfsek.terra.api.addon.BaseAddon; -import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; -import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.bukkit.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.bukkit.config.VanillaBiomeProperties; public class BukkitAddon implements BaseAddon { private static final Version VERSION = Versions.getVersion(1, 0, 0); - private final PlatformImpl terraBukkitPlugin; + protected final PlatformImpl terraBukkitPlugin; public BukkitAddon(PlatformImpl terraBukkitPlugin) { this.terraBukkitPlugin = terraBukkitPlugin; @@ -28,16 +25,6 @@ public class BukkitAddon implements BaseAddon { .register(this, ConfigPackPreLoadEvent.class) .then(event -> event.getPack().getContext().put(event.loadTemplate(new PreLoadCompatibilityOptions()))) .global(); - - terraBukkitPlugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigurationLoadEvent.class) - .then(event -> { - if(event.is(Biome.class)) { - event.getLoadedObject(Biome.class).getContext().put(event.load(new VanillaBiomeProperties())); - } - }) - .global(); } @Override diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java index 495e7a142..c2895fd5e 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java @@ -20,6 +20,9 @@ package com.dfsek.terra.bukkit; import com.dfsek.tectonic.api.TypeRegistry; import com.dfsek.tectonic.api.depth.DepthTracker; import com.dfsek.tectonic.api.exception.LoadException; + +import com.dfsek.terra.bukkit.nms.Initializer; + import org.bukkit.Bukkit; import org.bukkit.entity.EntityType; import org.jetbrains.annotations.NotNull; @@ -95,7 +98,7 @@ public class PlatformImpl extends AbstractPlatform { @Override protected Iterable platformAddon() { - return List.of(new BukkitAddon(this)); + return List.of(Initializer.nmsAddon(this)); } @Override diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java index e3bc1d837..1ebd8de52 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java @@ -194,7 +194,7 @@ public class TerraBukkitPlugin extends JavaPlugin { @Override public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, String id) { - if(id == null || id.trim().equals("")) { return null; } + if(id == null || id.trim().isEmpty()) { return null; } return new BukkitChunkGeneratorWrapper(generatorMap.computeIfAbsent(worldName, name -> { ConfigPack pack = platform.getConfigRegistry().getByID(id).orElseThrow( () -> new IllegalArgumentException("No such config pack \"" + id + "\"")); diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/config/VanillaBiomeProperties.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/config/VanillaBiomeProperties.java deleted file mode 100644 index 628f329d5..000000000 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/config/VanillaBiomeProperties.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.dfsek.terra.bukkit.config; - -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.Value; - -import com.dfsek.terra.api.properties.Properties; - - -public class VanillaBiomeProperties implements ConfigTemplate, Properties { - @Value("colors.grass") - @Default - private Integer grassColor = null; - - @Value("colors.fog") - @Default - private Integer fogColor = null; - - @Value("colors.water") - @Default - private Integer waterColor = null; - - @Value("colors.water-fog") - @Default - private Integer waterFogColor = null; - - @Value("colors.foliage") - @Default - private Integer foliageColor = null; - - @Value("colors.sky") - @Default - private Integer skyColor = null; - - public Integer getFogColor() { - return fogColor; - } - - public Integer getFoliageColor() { - return foliageColor; - } - - public Integer getGrassColor() { - return grassColor; - } - - public Integer getWaterColor() { - return waterColor; - } - - public Integer getWaterFogColor() { - return waterFogColor; - } - - public Integer getSkyColor() { - return skyColor; - } -} diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java index fc28e4bc3..6e241d3d6 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.nms; +import com.dfsek.terra.bukkit.BukkitAddon; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,20 +15,11 @@ public interface Initializer { static boolean init(PlatformImpl platform) { Logger logger = LoggerFactory.getLogger(Initializer.class); - try { - String packageVersion = NMS; - if(NMS.equals("v1_21_1")) { - packageVersion = "v1_21"; - } - Class initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer"); - try { - Initializer initializer = (Initializer) initializerClass.getConstructor().newInstance(); - initializer.initialize(platform); - } catch(ReflectiveOperationException e) { - throw new RuntimeException("Error initializing NMS bindings. Report this to Terra.", e); - } - } catch(ClassNotFoundException e) { + Initializer initializer = constructInitializer(); + if(initializer != null) { + initializer.initialize(platform); + } else { logger.error("NMS bindings for version {} do not exist. Support for this version is limited.", NMS); logger.error("This is usually due to running Terra on an unsupported Minecraft version."); String bypassKey = "IKnowThereAreNoNMSBindingsFor" + NMS + "ButIWillProceedAnyway"; @@ -49,8 +42,31 @@ public interface Initializer { logger.error("Since you enabled the \"{}\" flag, we won't disable Terra. But be warned.", bypassKey); } } + return true; } + static BukkitAddon nmsAddon(PlatformImpl platform) { + Initializer initializer = constructInitializer(); + return initializer != null ? initializer.getNMSAddon(platform) : new BukkitAddon(platform); + } + + private static Initializer constructInitializer() { + try { + String packageVersion = NMS; + + Class initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer"); + try { + return (Initializer) initializerClass.getConstructor().newInstance(); + } catch(ReflectiveOperationException e) { + throw new RuntimeException("Error initializing NMS bindings. Report this to Terra.", e); + } + } catch(ClassNotFoundException e) { + return null; + } + } + void initialize(PlatformImpl plugin); + + BukkitAddon getNMSAddon(PlatformImpl plugin); } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java deleted file mode 100644 index 8dea43a32..000000000 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_21; - -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSpecialEffects; - -import java.util.Locale; -import java.util.Objects; -import java.util.Optional; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.config.VanillaBiomeProperties; - - -public class NMSBiomeInjector { - - public static Optional> getEntry(Registry registry, ResourceLocation identifier) { - return registry.getOptional(identifier) - .flatMap(registry::getResourceKey) - .flatMap(registry::get); - } - - public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) - throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); - - builder - .downfall(vanilla.climateSettings.downfall()) - .temperature(vanilla.getBaseTemperature()) - .mobSpawnSettings(vanilla.getMobSettings()) - .generationSettings(vanilla.getGenerationSettings()); - - - BiomeSpecialEffects.Builder effects = new BiomeSpecialEffects.Builder(); - - effects.grassColorModifier(vanilla.getSpecialEffects().getGrassColorModifier()); - - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - - effects.fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) - - .waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) - - .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) - - .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())); - - if(vanillaBiomeProperties.getFoliageColor() == null) { - vanilla.getSpecialEffects().getFoliageColorOverride().ifPresent(effects::foliageColorOverride); - } else { - effects.foliageColorOverride(vanillaBiomeProperties.getFoliageColor()); - } - - if(vanillaBiomeProperties.getGrassColor() == null) { - vanilla.getSpecialEffects().getGrassColorOverride().ifPresent(effects::grassColorOverride); - } else { - // grass - effects.grassColorOverride(vanillaBiomeProperties.getGrassColor()); - } - - vanilla.getAmbientLoop().ifPresent(effects::ambientLoopSound); - vanilla.getAmbientAdditions().ifPresent(effects::ambientAdditionsSound); - vanilla.getAmbientMood().ifPresent(effects::ambientMoodSound); - vanilla.getBackgroundMusic().ifPresent(effects::backgroundMusic); - vanilla.getAmbientParticle().ifPresent(effects::ambientParticle); - - builder.specialEffects(effects.build()); - - return builder.build(); - } - - public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { - return pack.getID() - .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); - } -} diff --git a/platforms/bukkit/nms/v1_21/build.gradle.kts b/platforms/bukkit/nms/v1_21_3/build.gradle.kts similarity index 100% rename from platforms/bukkit/nms/v1_21/build.gradle.kts rename to platforms/bukkit/nms/v1_21_3/build.gradle.kts diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/AwfulBukkitHacks.java similarity index 93% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/AwfulBukkitHacks.java index 2523e534e..993dd2114 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/AwfulBukkitHacks.java @@ -1,4 +1,6 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; + +import com.dfsek.terra.bukkit.nms.v1_21_3.config.VanillaBiomeProperties; import com.google.common.collect.ImmutableMap; import net.minecraft.core.Holder; @@ -42,7 +44,10 @@ public class AwfulBukkitHacks { NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); ResourceLocation vanillaMinecraftKey = ResourceLocation.fromNamespaceAndPath(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = NMSBiomeInjector.createBiome(biome, biomeRegistry.get(vanillaMinecraftKey).orElseThrow().value()); + + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + + Biome platform = NMSBiomeInjector.createBiome(biomeRegistry.get(vanillaMinecraftKey).orElseThrow().value(), vanillaBiomeProperties); ResourceKey delegateKey = ResourceKey.create( Registries.BIOME, diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSAddon.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSAddon.java new file mode 100644 index 000000000..539b7f97b --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSAddon.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3; + +import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.bukkit.BukkitAddon; +import com.dfsek.terra.bukkit.PlatformImpl; +import com.dfsek.terra.bukkit.nms.v1_21_3.config.VanillaBiomeProperties; + + +public class NMSAddon extends BukkitAddon { + + public NMSAddon(PlatformImpl platform) { + super(platform); + } + + @Override + public void initialize() { + super.initialize(); + + terraBukkitPlugin.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigurationLoadEvent.class) + .then(event -> { + if(event.is(Biome.class)) { + event.getLoadedObject(Biome.class).getContext().put(event.load(new VanillaBiomeProperties())); + } + }) + .global(); + } +} diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInfo.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInfo.java similarity index 83% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInfo.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInfo.java index 5bf85aa6d..de6e7a3ff 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInfo.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInfo.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInjector.java new file mode 100644 index 000000000..3304b3c65 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInjector.java @@ -0,0 +1,89 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3; + +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSpecialEffects; + +import java.util.Locale; +import java.util.Objects; +import java.util.Optional; + +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.bukkit.nms.v1_21_3.config.VanillaBiomeProperties; + + +public class NMSBiomeInjector { + + public static Optional> getEntry(Registry registry, ResourceLocation identifier) { + return registry.getOptional(identifier) + .flatMap(registry::getResourceKey) + .flatMap(registry::get); + } + + public static Biome createBiome(Biome vanilla, VanillaBiomeProperties vanillaBiomeProperties) + throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); + + BiomeSpecialEffects.Builder effects = new BiomeSpecialEffects.Builder(); + + effects.fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) + .waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) + .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) + .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) + .grassColorModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getSpecialEffects().getGrassColorModifier())) + .grassColorOverride(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColor(), vanilla.getSpecialEffects().getGrassColorOverride().orElseGet(() -> Reflection.BIOME.invokeGrassColorFromTexture(vanilla)))) + .foliageColorOverride(Objects.requireNonNullElse(vanillaBiomeProperties.getFoliageColor(), vanilla.getFoliageColor())); + + if(vanillaBiomeProperties.getParticleConfig() == null) { + vanilla.getSpecialEffects().getAmbientParticleSettings().ifPresent(effects::ambientParticle); + } else { + effects.ambientParticle(vanillaBiomeProperties.getParticleConfig()); + } + + if(vanillaBiomeProperties.getLoopSound() == null) { + vanilla.getSpecialEffects().getAmbientLoopSoundEvent().ifPresent(effects::ambientLoopSound); + } else { + RegistryFetcher.soundEventRegistry().get(vanillaBiomeProperties.getLoopSound().location()).ifPresent(effects::ambientLoopSound); + } + + if(vanillaBiomeProperties.getMoodSound() == null) { + vanilla.getSpecialEffects().getAmbientMoodSettings().ifPresent(effects::ambientMoodSound); + } else { + effects.ambientMoodSound(vanillaBiomeProperties.getMoodSound()); + } + + if(vanillaBiomeProperties.getAdditionsSound() == null) { + vanilla.getSpecialEffects().getAmbientAdditionsSettings().ifPresent(effects::ambientAdditionsSound); + } else { + effects.ambientAdditionsSound(vanillaBiomeProperties.getAdditionsSound()); + } + + if(vanillaBiomeProperties.getMusic() == null) { + vanilla.getSpecialEffects().getBackgroundMusic().ifPresent(effects::backgroundMusic); + } else { + effects.backgroundMusic(vanillaBiomeProperties.getMusic()); + } + + builder.hasPrecipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.hasPrecipitation())); + + builder.temperature(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperature(), vanilla.getBaseTemperature())); + + builder.downfall(Objects.requireNonNullElse(vanillaBiomeProperties.getDownfall(), vanilla.climateSettings.downfall())); + + builder.temperatureAdjustment(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperatureModifier(), vanilla.climateSettings.temperatureModifier())); + + builder.mobSpawnSettings(Objects.requireNonNullElse(vanillaBiomeProperties.getSpawnSettings(), vanilla.getMobSettings())); + + return builder + .specialEffects(effects.build()) + .generationSettings(vanilla.getGenerationSettings()) + .build(); + } + + public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { + return pack.getID() + .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); + } +} diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeProvider.java similarity index 97% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeProvider.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeProvider.java index ca2b0e8da..9cb08b61a 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeProvider.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeProvider.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import com.mojang.serialization.MapCodec; import net.minecraft.core.Holder; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSChunkGeneratorDelegate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSChunkGeneratorDelegate.java similarity index 99% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSChunkGeneratorDelegate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSChunkGeneratorDelegate.java index fe4fa6a59..4df28da50 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSChunkGeneratorDelegate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSChunkGeneratorDelegate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSInitializer.java similarity index 67% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSInitializer.java index 18f1a058f..2ee41e82a 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSInitializer.java @@ -1,4 +1,6 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; + +import com.dfsek.terra.bukkit.BukkitAddon; import org.bukkit.Bukkit; @@ -12,4 +14,9 @@ public class NMSInitializer implements Initializer { AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); } + + @Override + public BukkitAddon getNMSAddon(PlatformImpl plugin) { + return new NMSAddon(plugin); + } } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInjectListener.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSInjectListener.java similarity index 96% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInjectListener.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSInjectListener.java index 9d73a9e98..95b041552 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInjectListener.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSInjectListener.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerLevel; @@ -17,7 +17,6 @@ import java.util.Set; import java.util.concurrent.locks.ReentrantLock; import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.util.reflection.ReflectionUtil; import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSWorldProperties.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSWorldProperties.java similarity index 94% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSWorldProperties.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSWorldProperties.java index f0651cc54..0626c4e3d 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSWorldProperties.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSWorldProperties.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import net.minecraft.world.level.LevelHeightAccessor; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/Reflection.java similarity index 88% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/Reflection.java index 13078e94d..79bf59372 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/Reflection.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import net.minecraft.core.Holder; import net.minecraft.core.Holder.Reference; @@ -7,6 +7,7 @@ import net.minecraft.core.MappedRegistry; import net.minecraft.server.level.ChunkMap; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.status.WorldGenContext; import xyz.jpenilla.reflectionremapper.ReflectionRemapper; import xyz.jpenilla.reflectionremapper.proxy.ReflectionProxyFactory; @@ -24,8 +25,10 @@ public class Reflection { public static final ReferenceProxy REFERENCE; + public static final ChunkMapProxy CHUNKMAP; public static final HolderSetProxy HOLDER_SET; + public static final BiomeProxy BIOME; static { ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); @@ -37,6 +40,7 @@ public class Reflection { REFERENCE = reflectionProxyFactory.reflectionProxy(ReferenceProxy.class); CHUNKMAP = reflectionProxyFactory.reflectionProxy(ChunkMapProxy.class); HOLDER_SET = reflectionProxyFactory.reflectionProxy(HolderSetProxy.class); + BIOME = reflectionProxyFactory.reflectionProxy(BiomeProxy.class); } @@ -74,4 +78,10 @@ public class Reflection { @MethodName("contents") List> invokeContents(HolderSet instance); } + + @Proxies(Biome.class) + public interface BiomeProxy { + @MethodName("getGrassColorFromTexture") + int invokeGrassColorFromTexture(Biome instance); + } } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/RegistryFetcher.java similarity index 79% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/RegistryFetcher.java index eecc28047..b317f7c93 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/RegistryFetcher.java @@ -1,9 +1,10 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.sounds.SoundEvent; import net.minecraft.world.level.biome.Biome; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.CraftServer; @@ -23,4 +24,8 @@ public class RegistryFetcher { public static Registry biomeRegistry() { return getRegistry(Registries.BIOME); } + + public static Registry soundEventRegistry() { + return getRegistry(Registries.SOUND_EVENT); + } } diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeAdditionsSoundTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeAdditionsSoundTemplate.java new file mode 100644 index 000000000..ee5781784 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeAdditionsSoundTemplate.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.level.biome.AmbientAdditionsSettings; + + +public class BiomeAdditionsSoundTemplate implements ObjectTemplate { + @Value("sound") + @Default + private SoundEvent sound = null; + + @Value("sound-chance") + @Default + private Double soundChance = null; + + @Override + public AmbientAdditionsSettings get() { + if(sound == null || soundChance == null) { + return null; + } else { + return new AmbientAdditionsSettings(BuiltInRegistries.SOUND_EVENT.wrapAsHolder(sound), soundChance); + } + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeMoodSoundTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeMoodSoundTemplate.java new file mode 100644 index 000000000..1c67c7052 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeMoodSoundTemplate.java @@ -0,0 +1,36 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.level.biome.AmbientMoodSettings; + + +public class BiomeMoodSoundTemplate implements ObjectTemplate { + @Value("sound") + @Default + private SoundEvent sound = null; + + @Value("cultivation-ticks") + @Default + private Integer soundCultivationTicks = null; + + @Value("spawn-range") + @Default + private Integer soundSpawnRange = null; + + @Value("extra-distance") + @Default + private Double soundExtraDistance = null; + + @Override + public AmbientMoodSettings get() { + if(sound == null || soundCultivationTicks == null || soundSpawnRange == null || soundExtraDistance == null) { + return null; + } else { + return new AmbientMoodSettings(BuiltInRegistries.SOUND_EVENT.wrapAsHolder(sound), soundCultivationTicks, soundSpawnRange, soundExtraDistance); + } + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeParticleConfigTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeParticleConfigTemplate.java new file mode 100644 index 000000000..f62bd344d --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeParticleConfigTemplate.java @@ -0,0 +1,36 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.commands.arguments.ParticleArgument; +import net.minecraft.core.HolderLookup.Provider; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.biome.AmbientParticleSettings; + + +public class BiomeParticleConfigTemplate implements ObjectTemplate { + @Value("particle") + @Default + private String particle = null; + + @Value("probability") + @Default + private Integer probability = null; + + @Override + public AmbientParticleSettings get() { + if(particle == null || probability == null) { + return null; + } + + try { + return new AmbientParticleSettings(ParticleArgument.readParticle(new StringReader(particle), + (Provider) BuiltInRegistries.PARTICLE_TYPE.asHolderIdMap()), probability); + } catch(CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/EntityTypeTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/EntityTypeTemplate.java new file mode 100644 index 000000000..ea9d002a4 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/EntityTypeTemplate.java @@ -0,0 +1,20 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; + + +public class EntityTypeTemplate implements ObjectTemplate> { + @Value("id") + @Default + private ResourceLocation id = null; + + @Override + public EntityType get() { + return BuiltInRegistries.ENTITY_TYPE.get(id).orElseThrow().value(); + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/MusicSoundTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/MusicSoundTemplate.java new file mode 100644 index 000000000..9342aec45 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/MusicSoundTemplate.java @@ -0,0 +1,36 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.sounds.Music; +import net.minecraft.sounds.SoundEvent; + + +public class MusicSoundTemplate implements ObjectTemplate { + @Value("sound") + @Default + private SoundEvent sound = null; + + @Value("min-delay") + @Default + private Integer minDelay = null; + + @Value("max-delay") + @Default + private Integer maxDelay = null; + + @Value("replace-current-music") + @Default + private Boolean replaceCurrentMusic = null; + + @Override + public Music get() { + if(sound == null || minDelay == null || maxDelay == null || replaceCurrentMusic == null) { + return null; + } else { + return new Music(BuiltInRegistries.SOUND_EVENT.wrapAsHolder(sound), minDelay, maxDelay, replaceCurrentMusic); + } + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SoundEventTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SoundEventTemplate.java new file mode 100644 index 000000000..0c4052f87 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SoundEventTemplate.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; + + +public class SoundEventTemplate implements ObjectTemplate { + @Value("id") + @Default + private ResourceLocation id = null; + + @Value("distance-to-travel") + @Default + private Float distanceToTravel = null; + + @Override + public SoundEvent get() { + if(id == null) { + return null; + } else if(distanceToTravel == null) { + return SoundEvent.createVariableRangeEvent(id); + } else { + return SoundEvent.createFixedRangeEvent(id, distanceToTravel); + } + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnCostConfig.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnCostConfig.java new file mode 100644 index 000000000..e14305d42 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnCostConfig.java @@ -0,0 +1,38 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.world.entity.EntityType; + + +public class SpawnCostConfig implements ObjectTemplate { + @Value("type") + @Default + private EntityType type = null; + + @Value("mass") + @Default + private Double mass = null; + + @Value("gravity") + @Default + private Double gravity = null; + + public EntityType getType() { + return type; + } + + public Double getMass() { + return mass; + } + + public Double getGravity() { + return gravity; + } + + @Override + public SpawnCostConfig get() { + return this; + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnEntryTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnEntryTemplate.java new file mode 100644 index 000000000..4b730f00f --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnEntryTemplate.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; + + +public class SpawnEntryTemplate implements ObjectTemplate { + @Value("type") + @Default + private EntityType type = null; + + @Value("weight") + @Default + private Integer weight = null; + + @Value("min-group-size") + @Default + private Integer minGroupSize = null; + + @Value("max-group-size") + @Default + private Integer maxGroupSize = null; + + @Override + public SpawnerData get() { + return new SpawnerData(type, weight, minGroupSize, maxGroupSize); + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnSettingsTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnSettingsTemplate.java new file mode 100644 index 000000000..7613d3205 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnSettingsTemplate.java @@ -0,0 +1,49 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import java.util.List; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.biome.MobSpawnSettings; +import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class SpawnSettingsTemplate implements ObjectTemplate { + + private static final Logger logger = LoggerFactory.getLogger(SpawnTypeConfig.class); + private static boolean used = false; + + @Value("spawns") + @Default + private List spawns = null; + + @Value("costs") + @Default + private List costs = null; + + @Value("probability") + @Default + private Float probability = null; + + @Override + public MobSpawnSettings get() { + MobSpawnSettings.Builder builder = new MobSpawnSettings.Builder(); + for(SpawnTypeConfig spawn : spawns) { + MobCategory group = spawn.getGroup(); + for(SpawnerData entry : spawn.getEntries()) { + builder.addSpawn(group, entry); + } + } + for(SpawnCostConfig cost : costs) { + builder.addMobCharge(cost.getType(), cost.getMass(), cost.getGravity()); + } + if(probability != null) { + builder.creatureGenerationProbability(probability); + } + + return builder.build(); + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnTypeConfig.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnTypeConfig.java new file mode 100644 index 000000000..4755a3a45 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnTypeConfig.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import java.util.List; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; + + +public class SpawnTypeConfig implements ObjectTemplate { + @Value("group") + @Default + private MobCategory group = null; + + @Value("entries") + @Default + private List entries = null; + + public MobCategory getGroup() { + return group; + } + + public List getEntries() { + return entries; + } + + @Override + public SpawnTypeConfig get() { + return this; + } +} \ No newline at end of file diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VanillaBiomeProperties.java new file mode 100644 index 000000000..5df5decf4 --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VanillaBiomeProperties.java @@ -0,0 +1,164 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.Value; + +import com.dfsek.terra.api.properties.Properties; + +import net.minecraft.sounds.Music; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.npc.VillagerType; +import net.minecraft.world.level.biome.AmbientAdditionsSettings; +import net.minecraft.world.level.biome.AmbientMoodSettings; +import net.minecraft.world.level.biome.AmbientParticleSettings; +import net.minecraft.world.level.biome.Biome.TemperatureModifier; +import net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier; +import net.minecraft.world.level.biome.MobSpawnSettings; + + +public class VanillaBiomeProperties implements ConfigTemplate, Properties { + @Value("colors.grass") + @Default + private Integer grassColor = null; + + @Value("colors.fog") + @Default + private Integer fogColor = null; + + @Value("colors.water") + @Default + private Integer waterColor = null; + + @Value("colors.water-fog") + @Default + private Integer waterFogColor = null; + + @Value("colors.foliage") + @Default + private Integer foliageColor = null; + + @Value("colors.sky") + @Default + private Integer skyColor = null; + + @Value("colors.modifier") + @Default + private GrassColorModifier grassColorModifier = null; + + @Value("particles") + @Default + private AmbientParticleSettings particleConfig = null; + + @Value("climate.precipitation") + @Default + private Boolean precipitation = true; + + @Value("climate.temperature") + @Default + private Float temperature = null; + + @Value("climate.temperature-modifier") + @Default + private TemperatureModifier temperatureModifier = null; + + @Value("climate.downfall") + @Default + private Float downfall = null; + + @Value("sound.loop-sound.sound") + @Default + private SoundEvent loopSound = null; + + @Value("sound.mood-sound") + @Default + private AmbientMoodSettings moodSound = null; + + @Value("sound.additions-sound") + @Default + private AmbientAdditionsSettings additionsSound = null; + + @Value("sound.music") + @Default + private Music music = null; + + @Value("spawning") + @Default + private MobSpawnSettings spawnSettings = null; + + @Value("villager-type") + @Default + private VillagerType villagerType = null; + + public Integer getFogColor() { + return fogColor; + } + + public Integer getFoliageColor() { + return foliageColor; + } + + public Integer getGrassColor() { + return grassColor; + } + + public Integer getWaterColor() { + return waterColor; + } + + public Integer getWaterFogColor() { + return waterFogColor; + } + + public Integer getSkyColor() { + return skyColor; + } + + public GrassColorModifier getGrassColorModifier() { + return grassColorModifier; + } + + public AmbientParticleSettings getParticleConfig() { + return particleConfig; + } + + public Boolean getPrecipitation() { + return precipitation; + } + + public Float getTemperature() { + return temperature; + } + + public TemperatureModifier getTemperatureModifier() { + return temperatureModifier; + } + + public Float getDownfall() { + return downfall; + } + + public SoundEvent getLoopSound() { + return loopSound; + } + + public AmbientMoodSettings getMoodSound() { + return moodSound; + } + + public AmbientAdditionsSettings getAdditionsSound() { + return additionsSound; + } + + public Music getMusic() { + return music; + } + + public MobSpawnSettings getSpawnSettings() { + return spawnSettings; + } + + public VillagerType getVillagerType() { + return villagerType; + } +} diff --git a/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VillagerTypeTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VillagerTypeTemplate.java new file mode 100644 index 000000000..cde3b531d --- /dev/null +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VillagerTypeTemplate.java @@ -0,0 +1,20 @@ +package com.dfsek.terra.bukkit.nms.v1_21_3.config; + +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.object.ObjectTemplate; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.npc.VillagerType; + + +public class VillagerTypeTemplate implements ObjectTemplate { + @Value("id") + @Default + private ResourceLocation id = null; + + @Override + public VillagerType get() { + return BuiltInRegistries.VILLAGER_TYPE.get(id).orElseThrow().value(); + } +} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java index 660c750af..57046330b 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java @@ -60,13 +60,13 @@ public final class BiomeUtil { } else { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, + net.minecraft.world.biome.Biome minecraftBiome = com.dfsek.terra.mod.util.BiomeUtil.createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow( vanilla.getKey().orElseThrow()) .value(), vanillaBiomeProperties); - Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); + Identifier identifier = new Identifier("terra", com.dfsek.terra.mod.util.BiomeUtil.createBiomeID(pack, id)); if(ForgeRegistries.BIOMES.containsKey(identifier)) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier) @@ -83,7 +83,7 @@ public final class BiomeUtil { Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), villagerMap.getOrDefault(vanilla.getKey().orElseThrow(), VillagerType.PLAINS))); - MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getKey().orElseThrow().getValue(), i -> new ArrayList<>()).add( + com.dfsek.terra.mod.util.BiomeUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getKey().orElseThrow().getValue(), i -> new ArrayList<>()).add( identifier); } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java index 5c49c4d29..68f059335 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java @@ -51,7 +51,7 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Value("climate.precipitation") @Default - private Boolean precipitation = true; + private Boolean precipitation = null; @Value("climate.temperature") @Default diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/invoke/BiomeInvoker.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/invoke/BiomeInvoker.java new file mode 100644 index 000000000..b3aa4792b --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/invoke/BiomeInvoker.java @@ -0,0 +1,12 @@ +package com.dfsek.terra.mod.mixin.invoke; + +import net.minecraft.world.biome.Biome; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + + +@Mixin(Biome.class) +public interface BiomeInvoker { + @Invoker("getDefaultGrassColor") + int invokeGetDefaultGrassColor(); +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java new file mode 100644 index 000000000..f40744278 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java @@ -0,0 +1,96 @@ +package com.dfsek.terra.mod.util; + +import net.minecraft.registry.Registries; +import net.minecraft.util.Identifier; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.Builder; +import net.minecraft.world.biome.BiomeEffects; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.mixin.access.BiomeAccessor; +import com.dfsek.terra.mod.mixin.invoke.BiomeInvoker; + + +public class BiomeUtil { + public static final Map> + TERRA_BIOME_MAP = new HashMap<>(); + + public static Biome createBiome(Biome vanilla, VanillaBiomeProperties vanillaBiomeProperties) { + BiomeEffects.Builder effects = new BiomeEffects.Builder(); + + net.minecraft.world.biome.Biome.Builder builder = new Builder(); + + effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) + .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) + .fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) + .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) + .grassColorModifier( + Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getEffects().getGrassColorModifier())) + .grassColor(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColor(), + vanilla.getEffects().getGrassColor().orElseGet(() -> ((BiomeInvoker) ((Object) vanilla)).invokeGetDefaultGrassColor()))) + .foliageColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFoliageColor(), vanilla.getFoliageColor())); + + if(vanillaBiomeProperties.getParticleConfig() == null) { + vanilla.getEffects().getParticleConfig().ifPresent(effects::particleConfig); + } else { + effects.particleConfig(vanillaBiomeProperties.getParticleConfig()); + } + + if(vanillaBiomeProperties.getLoopSound() == null) { + vanilla.getEffects().getLoopSound().ifPresent(effects::loopSound); + } else { + effects.loopSound(Registries.SOUND_EVENT.getEntry(vanillaBiomeProperties.getLoopSound())); + } + + if(vanillaBiomeProperties.getMoodSound() == null) { + vanilla.getEffects().getMoodSound().ifPresent(effects::moodSound); + } else { + effects.moodSound(vanillaBiomeProperties.getMoodSound()); + } + + if(vanillaBiomeProperties.getAdditionsSound() == null) { + vanilla.getEffects().getAdditionsSound().ifPresent(effects::additionsSound); + } else { + effects.additionsSound(vanillaBiomeProperties.getAdditionsSound()); + } + + if(vanillaBiomeProperties.getMusic() == null) { + vanilla.getEffects().getMusic().ifPresent(effects::music); + } else { + effects.music(vanillaBiomeProperties.getMusic()); + } + + builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.hasPrecipitation())); + + builder.temperature(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperature(), vanilla.getTemperature())); + + builder.downfall(Objects.requireNonNullElse(vanillaBiomeProperties.getDownfall(), + ((BiomeAccessor) ((Object) vanilla)).getWeather().downfall())); + + builder.temperatureModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperatureModifier(), + ((BiomeAccessor) ((Object) vanilla)).getWeather().temperatureModifier())); + + builder.spawnSettings(Objects.requireNonNullElse(vanillaBiomeProperties.getSpawnSettings(), vanilla.getSpawnSettings())); + + return builder + .effects(effects.build()) + .generationSettings(vanilla.getGenerationSettings()) + .build(); + } + + public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { + return pack.getID() + .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); + } + + public static Map> getTerraBiomeMap() { + return Map.copyOf(TERRA_BIOME_MAP); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java index 7c44ace4d..bf35f7247 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java @@ -46,8 +46,6 @@ import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; public final class MinecraftUtil { public static final Logger logger = LoggerFactory.getLogger(MinecraftUtil.class); - public static final Map> - TERRA_BIOME_MAP = new HashMap<>(); private MinecraftUtil() { @@ -109,18 +107,6 @@ public final class MinecraftUtil { () -> logger.error("No vanilla biome: {}", vanillaKey)); } - public static Map> getTerraBiomeMap() { - return Map.copyOf(TERRA_BIOME_MAP); - } - - - public static void registerIntProviderTypes() { - IntProviderType CONSTANT = IntProviderType.register("terra:constant_range", - Codecs.TERRA_CONSTANT_RANGE_INT_PROVIDER_TYPE); - - TerraIntProvider.TERRA_RANGE_TYPE_TO_INT_PROVIDER_TYPE.put(ConstantRange.class, CONSTANT); - } - public static RegistryKey registerBiomeKey(Identifier identifier) { return RegistryKey.of(RegistryKeys.BIOME, identifier); } @@ -128,85 +114,4 @@ public final class MinecraftUtil { public static RegistryKey registerDimensionTypeKey(Identifier identifier) { return RegistryKey.of(RegistryKeys.DIMENSION_TYPE, identifier); } - - public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla, - VanillaBiomeProperties vanillaBiomeProperties) { - GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); - - BiomeEffects.Builder effects = new BiomeEffects.Builder(); - - net.minecraft.world.biome.Biome.Builder builder = new Builder(); - - effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) - .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) - .fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) - .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) - .grassColorModifier( - Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), - vanilla.getEffects().getGrassColorModifier())); - - if(vanillaBiomeProperties.getFoliageColor() == null) { - vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); - } else { - effects.foliageColor(vanillaBiomeProperties.getFoliageColor()); - } - - if(vanillaBiomeProperties.getGrassColor() == null) { - vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); - } else { - effects.grassColor(vanillaBiomeProperties.getGrassColor()); - } - - if(vanillaBiomeProperties.getParticleConfig() == null) { - vanilla.getEffects().getParticleConfig().ifPresent(effects::particleConfig); - } else { - effects.particleConfig(vanillaBiomeProperties.getParticleConfig()); - } - - if(vanillaBiomeProperties.getLoopSound() == null) { - vanilla.getEffects().getLoopSound().ifPresent(effects::loopSound); - } else { - effects.loopSound(Registries.SOUND_EVENT.getEntry(vanillaBiomeProperties.getLoopSound())); - } - - if(vanillaBiomeProperties.getMoodSound() == null) { - vanilla.getEffects().getMoodSound().ifPresent(effects::moodSound); - } else { - effects.moodSound(vanillaBiomeProperties.getMoodSound()); - } - - if(vanillaBiomeProperties.getAdditionsSound() == null) { - vanilla.getEffects().getAdditionsSound().ifPresent(effects::additionsSound); - } else { - effects.additionsSound(vanillaBiomeProperties.getAdditionsSound()); - } - - if(vanillaBiomeProperties.getMusic() == null) { - vanilla.getEffects().getMusic().ifPresent(effects::music); - } else { - effects.music(vanillaBiomeProperties.getMusic()); - } - - builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.hasPrecipitation())); - - builder.temperature(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperature(), vanilla.getTemperature())); - - builder.downfall(Objects.requireNonNullElse(vanillaBiomeProperties.getDownfall(), - ((BiomeAccessor) ((Object) vanilla)).getWeather().downfall())); - - builder.temperatureModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperatureModifier(), - ((BiomeAccessor) ((Object) vanilla)).getWeather().temperatureModifier())); - - builder.spawnSettings(Objects.requireNonNullElse(vanillaBiomeProperties.getSpawnSettings(), vanilla.getSpawnSettings())); - - return builder - .effects(effects.build()) - .generationSettings(generationSettings.build()) - .build(); - } - - public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { - return pack.getID() - .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); - } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java index de8542a41..9e23a9662 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java @@ -62,7 +62,7 @@ public final class TagUtil { logger.info("Doing biome tag garbage...."); Map, List>> collect = tagsToMutableMap(registry); - MinecraftUtil + BiomeUtil .getTerraBiomeMap() .forEach((vb, terraBiomes) -> MinecraftUtil diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java index 56462c4ea..552a36f0b 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecyclePlatform.java @@ -27,7 +27,7 @@ import java.util.stream.Stream; import com.dfsek.terra.addon.EphemeralAddon; import com.dfsek.terra.api.addon.BaseAddon; -import com.dfsek.terra.lifecycle.util.BiomeUtil; +import com.dfsek.terra.lifecycle.util.LifecycleBiomeUtil; import com.dfsek.terra.mod.CommonPlatform; import com.dfsek.terra.mod.ModPlatform; import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; @@ -86,7 +86,7 @@ public abstract class LifecyclePlatform extends ModPlatform { boolean succeed = loadConfigPacks(); if(server != null) { - BiomeUtil.registerBiomes(server.getRegistryManager().getOrThrow(RegistryKeys.BIOME)); + LifecycleBiomeUtil.registerBiomes(server.getRegistryManager().getOrThrow(RegistryKeys.BIOME)); server.reloadResources(server.getDataPackManager().getEnabledIds()).exceptionally(throwable -> { LOGGER.warn("Failed to execute reload", throwable); return null; diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleBiomeUtil.java similarity index 86% rename from platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java rename to platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleBiomeUtil.java index 97b6db4b9..a408d6844 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleBiomeUtil.java @@ -1,5 +1,7 @@ package com.dfsek.terra.lifecycle.util; +import com.dfsek.terra.mod.util.BiomeUtil; + import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; @@ -22,10 +24,10 @@ import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; import com.dfsek.terra.mod.util.MinecraftUtil; -public final class BiomeUtil { - private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); +public final class LifecycleBiomeUtil { + private static final Logger logger = LoggerFactory.getLogger(LifecycleBiomeUtil.class); - private BiomeUtil() { + private LifecycleBiomeUtil() { } @@ -55,10 +57,10 @@ public final class BiomeUtil { } else { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, Objects.requireNonNull(registry.get(vanilla)), + net.minecraft.world.biome.Biome minecraftBiome = BiomeUtil.createBiome(Objects.requireNonNull(registry.get(vanilla)), vanillaBiomeProperties); - Identifier identifier = Identifier.of("terra", MinecraftUtil.createBiomeID(pack, id)); + Identifier identifier = Identifier.of("terra", BiomeUtil.createBiomeID(pack, id)); if(registry.containsId(identifier)) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(MinecraftUtil.getEntry(registry, identifier) @@ -76,7 +78,7 @@ public final class BiomeUtil { Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), villagerMap.getOrDefault(vanilla, VillagerType.PLAINS))); - MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); + BiomeUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); } } diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleUtil.java index 9ba81f864..3ad78901b 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleUtil.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleUtil.java @@ -20,7 +20,7 @@ public final class LifecycleUtil { public static void initialize(MutableRegistry biomeMutableRegistry, MutableRegistry worldPresetMutableRegistry) { CommonPlatform.get().getEventManager().callEvent(new PlatformInitializationEvent()); - BiomeUtil.registerBiomes(biomeMutableRegistry); + LifecycleBiomeUtil.registerBiomes(biomeMutableRegistry); CommonPlatform.get().registerWorldTypes( (id, preset) -> Registry.register(worldPresetMutableRegistry, RegistryKey.of(RegistryKeys.WORLD_PRESET, id), preset)); }