From 99d848b394aceb251f6aca2887c779d9a9dd19ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Sun, 10 Jul 2022 16:45:51 -0700 Subject: [PATCH 01/16] UX tweaks to biome config --- .../java/com/dfsek/terra/mod/ModPlatform.java | 3 +-- .../terra/mod/config/SpawnGroupTemplate.java | 18 ------------------ .../mod/config/SpawnSettingsTemplate.java | 7 ++++++- .../terra/mod/config/SpawnTypeConfig.java | 8 +++++--- 4 files changed, 12 insertions(+), 24 deletions(-) delete mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnGroupTemplate.java diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java index 161bdf33c..54d3b0bb6 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java @@ -50,7 +50,6 @@ import com.dfsek.terra.mod.config.ProtoPlatformBiome; import com.dfsek.terra.mod.config.SoundEventTemplate; import com.dfsek.terra.mod.config.SpawnCostConfig; import com.dfsek.terra.mod.config.SpawnEntryTemplate; -import com.dfsek.terra.mod.config.SpawnGroupTemplate; import com.dfsek.terra.mod.config.SpawnSettingsTemplate; import com.dfsek.terra.mod.config.SpawnTypeConfig; import com.dfsek.terra.mod.config.VillagerTypeTemplate; @@ -88,6 +87,7 @@ public abstract class ModPlatform extends AbstractPlatform { .registerLoader(GrassColorModifier.class, (type, o, loader, depthTracker) -> TemperatureModifier.valueOf(((String) o).toUpperCase( Locale.ROOT))) + .registerLoader(SpawnGroup.class,(type, o, loader, depthTracker) -> SpawnGroup.valueOf((String) o)) .registerLoader(BiomeParticleConfig.class, BiomeParticleConfigTemplate::new) .registerLoader(SoundEvent.class, SoundEventTemplate::new) .registerLoader(BiomeMoodSound.class, BiomeMoodSoundTemplate::new) @@ -96,7 +96,6 @@ public abstract class ModPlatform extends AbstractPlatform { .registerLoader(EntityType.class, EntityTypeTemplate::new) .registerLoader(SpawnCostConfig.class, SpawnCostConfig::new) .registerLoader(SpawnEntry.class, SpawnEntryTemplate::new) - .registerLoader(SpawnGroup.class, SpawnGroupTemplate::new) .registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new) .registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new) .registerLoader(VillagerType.class, VillagerTypeTemplate::new); diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnGroupTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnGroupTemplate.java deleted file mode 100644 index e6a9143d1..000000000 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnGroupTemplate.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.dfsek.terra.mod.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.entity.SpawnGroup; - - -public class SpawnGroupTemplate implements ObjectTemplate { - @Value("group") - @Default - private String group = null; - - @Override - public SpawnGroup get() { - return SpawnGroup.valueOf(group); - } -} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java index 9b72e579c..dbb8dd037 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java @@ -3,7 +3,9 @@ package com.dfsek.terra.mod.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.entity.SpawnGroup; import net.minecraft.world.biome.SpawnSettings; +import net.minecraft.world.biome.SpawnSettings.SpawnEntry; import java.util.List; @@ -25,7 +27,10 @@ public class SpawnSettingsTemplate implements ObjectTemplate { public SpawnSettings get() { SpawnSettings.Builder builder = new SpawnSettings.Builder(); for(SpawnTypeConfig spawn : spawns) { - builder.spawn(spawn.getGroup(), spawn.getEntry()); + SpawnGroup group = spawn.getGroup(); + for (SpawnEntry entry : spawn.getEntry()) { + builder.spawn(group, entry); + } } for(SpawnCostConfig cost : costs) { builder.spawnCost(cost.getType(), cost.getMass(), cost.getGravity()); diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java index 0f1eff6b5..02ee2bf60 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java @@ -6,21 +6,23 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import net.minecraft.entity.SpawnGroup; import net.minecraft.world.biome.SpawnSettings.SpawnEntry; +import java.util.List; + public class SpawnTypeConfig implements ObjectTemplate { @Value("group") @Default private SpawnGroup group = null; - @Value("entry") + @Value("entries") @Default - private SpawnEntry entry = null; + private List entry = null; public SpawnGroup getGroup() { return group; } - public SpawnEntry getEntry() { + public List getEntry() { return entry; } From e9b145b6c3942cf294f94fad4d742eaa3e42b05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Sat, 30 Sep 2023 11:50:15 -0600 Subject: [PATCH 02/16] unbreaking via deprecation --- .../terra/mod/config/SpawnSettingsTemplate.java | 8 ++++++-- .../dfsek/terra/mod/config/SpawnTypeConfig.java | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java index dbb8dd037..4a81deecd 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java @@ -28,8 +28,12 @@ public class SpawnSettingsTemplate implements ObjectTemplate { SpawnSettings.Builder builder = new SpawnSettings.Builder(); for(SpawnTypeConfig spawn : spawns) { SpawnGroup group = spawn.getGroup(); - for (SpawnEntry entry : spawn.getEntry()) { - builder.spawn(group, entry); + if (spawn.getEntries() != null) { + for (SpawnEntry entry : spawn.getEntries()) { + builder.spawn(group, entry); + } + } else if (spawn.getEntry() != null) { + builder.spawn(group, spawn.getEntry()); } } for(SpawnCostConfig cost : costs) { diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java index 02ee2bf60..d2470dad6 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnTypeConfig.java @@ -16,13 +16,24 @@ public class SpawnTypeConfig implements ObjectTemplate { @Value("entries") @Default - private List entry = null; + private List entries = null; + + + @Value("entry") + @Default + @Deprecated + private SpawnEntry entry = null; public SpawnGroup getGroup() { return group; } - public List getEntry() { + public List getEntries() { + return entries; + } + + @Deprecated + public SpawnEntry getEntry() { return entry; } From 70b1c3bbf3b5b638b1fb10600c6c23a5ae33b564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Sat, 30 Sep 2023 12:06:21 -0600 Subject: [PATCH 03/16] warning --- .../dfsek/terra/mod/config/SpawnSettingsTemplate.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java index 4a81deecd..321a2312a 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java @@ -6,11 +6,16 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import net.minecraft.entity.SpawnGroup; import net.minecraft.world.biome.SpawnSettings; import net.minecraft.world.biome.SpawnSettings.SpawnEntry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; 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; @@ -33,6 +38,11 @@ public class SpawnSettingsTemplate implements ObjectTemplate { builder.spawn(group, entry); } } else if (spawn.getEntry() != null) { + if(!used) { + logger.warn("The entry sub-field of spawns is deprecated. " + + "It is recommended to use the entries sub-field instead "); + used = true; + } builder.spawn(group, spawn.getEntry()); } } From f86d4bae329b58ece5c9bdd0c3a2e19fd2c8d6da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Fri, 17 Nov 2023 13:22:10 -0700 Subject: [PATCH 04/16] remove old bukkit versions --- platforms/bukkit/build.gradle.kts | 5 - .../bukkit/nms/v1_18_R2/build.gradle.kts | 17 - .../bukkit/nms/v1_18_R2/AwfulBukkitHacks.java | 115 ------- .../bukkit/nms/v1_18_R2/NMSBiomeInfo.java | 10 - .../bukkit/nms/v1_18_R2/NMSBiomeInjector.java | 79 ----- .../bukkit/nms/v1_18_R2/NMSBiomeProvider.java | 49 --- .../v1_18_R2/NMSChunkGeneratorDelegate.java | 254 --------------- .../bukkit/nms/v1_18_R2/NMSInitializer.java | 15 - .../nms/v1_18_R2/NMSInjectListener.java | 53 ---- .../nms/v1_18_R2/NMSWorldProperties.java | 36 --- .../terra/bukkit/nms/v1_18_R2/Reflection.java | 38 --- .../terra/bukkit/nms/v1_18_R2/Registries.java | 30 -- .../bukkit/nms/v1_19_R1/build.gradle.kts | 17 - .../bukkit/nms/v1_19_R1/AwfulBukkitHacks.java | 116 ------- .../bukkit/nms/v1_19_R1/NMSBiomeInfo.java | 10 - .../bukkit/nms/v1_19_R1/NMSBiomeInjector.java | 79 ----- .../bukkit/nms/v1_19_R1/NMSBiomeProvider.java | 42 --- .../v1_19_R1/NMSChunkGeneratorDelegate.java | 291 ------------------ .../bukkit/nms/v1_19_R1/NMSInitializer.java | 15 - .../nms/v1_19_R1/NMSInjectListener.java | 51 --- .../nms/v1_19_R1/NMSWorldProperties.java | 36 --- .../terra/bukkit/nms/v1_19_R1/Reflection.java | 39 --- .../terra/bukkit/nms/v1_19_R1/Registries.java | 30 -- .../bukkit/nms/v1_19_R2/build.gradle.kts | 17 - .../bukkit/nms/v1_19_R2/AwfulBukkitHacks.java | 100 ------ .../bukkit/nms/v1_19_R2/NMSBiomeInfo.java | 10 - .../bukkit/nms/v1_19_R2/NMSBiomeInjector.java | 79 ----- .../bukkit/nms/v1_19_R2/NMSBiomeProvider.java | 42 --- .../v1_19_R2/NMSChunkGeneratorDelegate.java | 174 ----------- .../bukkit/nms/v1_19_R2/NMSInitializer.java | 15 - .../nms/v1_19_R2/NMSInjectListener.java | 48 --- .../nms/v1_19_R2/NMSWorldProperties.java | 36 --- .../terra/bukkit/nms/v1_19_R2/Reflection.java | 52 ---- .../bukkit/nms/v1_19_R2/RegistryFetcher.java | 24 -- .../bukkit/nms/v1_19_R3/build.gradle.kts | 17 - .../bukkit/nms/v1_19_R3/AwfulBukkitHacks.java | 101 ------ .../bukkit/nms/v1_19_R3/NMSBiomeInfo.java | 10 - .../bukkit/nms/v1_19_R3/NMSBiomeInjector.java | 78 ----- .../bukkit/nms/v1_19_R3/NMSBiomeProvider.java | 49 --- .../v1_19_R3/NMSChunkGeneratorDelegate.java | 171 ---------- .../bukkit/nms/v1_19_R3/NMSInitializer.java | 15 - .../nms/v1_19_R3/NMSInjectListener.java | 48 --- .../nms/v1_19_R3/NMSWorldProperties.java | 36 --- .../terra/bukkit/nms/v1_19_R3/Reflection.java | 52 ---- .../bukkit/nms/v1_19_R3/RegistryFetcher.java | 24 -- .../bukkit/nms/v1_20_R1/build.gradle.kts | 17 - .../bukkit/nms/v1_20_R1/AwfulBukkitHacks.java | 101 ------ .../bukkit/nms/v1_20_R1/NMSBiomeInfo.java | 10 - .../bukkit/nms/v1_20_R1/NMSBiomeInjector.java | 78 ----- .../bukkit/nms/v1_20_R1/NMSBiomeProvider.java | 49 --- .../v1_20_R1/NMSChunkGeneratorDelegate.java | 171 ---------- .../bukkit/nms/v1_20_R1/NMSInitializer.java | 15 - .../nms/v1_20_R1/NMSInjectListener.java | 48 --- .../nms/v1_20_R1/NMSWorldProperties.java | 36 --- .../terra/bukkit/nms/v1_20_R1/Reflection.java | 52 ---- .../bukkit/nms/v1_20_R1/RegistryFetcher.java | 24 -- 56 files changed, 3226 deletions(-) delete mode 100644 platforms/bukkit/nms/v1_18_R2/build.gradle.kts delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInfo.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeProvider.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSChunkGeneratorDelegate.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInjectListener.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSWorldProperties.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Reflection.java delete mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Registries.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/build.gradle.kts delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInfo.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeProvider.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSChunkGeneratorDelegate.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInjectListener.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSWorldProperties.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Reflection.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Registries.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/build.gradle.kts delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/AwfulBukkitHacks.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInfo.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInjector.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeProvider.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSChunkGeneratorDelegate.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInitializer.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInjectListener.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSWorldProperties.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/Reflection.java delete mode 100644 platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/RegistryFetcher.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/build.gradle.kts delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/AwfulBukkitHacks.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInfo.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInjector.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeProvider.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSChunkGeneratorDelegate.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInitializer.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInjectListener.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSWorldProperties.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/Reflection.java delete mode 100644 platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/RegistryFetcher.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/build.gradle.kts delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/AwfulBukkitHacks.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInfo.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInjector.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeProvider.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSChunkGeneratorDelegate.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInitializer.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInjectListener.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSWorldProperties.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/Reflection.java delete mode 100644 platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/RegistryFetcher.java diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index 89df67efc..68f981e1e 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -10,11 +10,6 @@ repositories { dependencies { shaded(project(":platforms:bukkit:common")) - shaded(project(":platforms:bukkit:nms:v1_18_R2", configuration = "reobf")) - shaded(project(":platforms:bukkit:nms:v1_19_R1", configuration = "reobf")) - shaded(project(":platforms:bukkit:nms:v1_19_R2", configuration = "reobf")) - shaded(project(":platforms:bukkit:nms:v1_19_R3", configuration = "reobf")) - shaded(project(":platforms:bukkit:nms:v1_20_R1", configuration = "reobf")) shaded(project(":platforms:bukkit:nms:v1_20_R2", configuration = "reobf")) shaded("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) } diff --git a/platforms/bukkit/nms/v1_18_R2/build.gradle.kts b/platforms/bukkit/nms/v1_18_R2/build.gradle.kts deleted file mode 100644 index e3fc99195..000000000 --- a/platforms/bukkit/nms/v1_18_R2/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -apply(plugin = "io.papermc.paperweight.userdev") - -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") -} - -dependencies { - api(project(":platforms:bukkit:common")) - paperDevBundle("1.18.2-R0.1-SNAPSHOT") - implementation("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) -} - -tasks { - assemble { - dependsOn("reobfJar") - } -} \ No newline at end of file diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java deleted file mode 100644 index bbfae8b2c..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import com.google.common.collect.ImmutableMap; -import com.mojang.serialization.Lifecycle; -import net.minecraft.core.Holder; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.Registry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.data.BuiltinRegistries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.level.biome.Biome; -import org.bukkit.NamespacedKey; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; -import com.dfsek.terra.registry.master.ConfigRegistry; - - -public class AwfulBukkitHacks { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class); - private static final Map> terraBiomeMap = new HashMap<>(); - - - public static void registerBiomes(ConfigRegistry configRegistry) { - try { - LOGGER.info("Hacking biome registry..."); - WritableRegistry biomeRegistry = (WritableRegistry) Registries.biomeRegistry(); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); - - configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { - try { - BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); - NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); - ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = NMSBiomeInjector.createBiome( - biome, - biomeRegistry.get(vanillaMinecraftKey) // get - ); - - ResourceKey delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, new ResourceLocation("terra", - NMSBiomeInjector.createBiomeID( - pack, key))); - - BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); - biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - })); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - terraBiomeMap - .forEach((vb, terraBiomes) -> - NMSBiomeInjector.getEntry(biomeRegistry, vb) - .ifPresentOrElse( - vanilla -> terraBiomes - .forEach(tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb) - .ifPresentOrElse( - terra -> { - LOGGER.debug( - vanilla.unwrapKey() - .orElseThrow() - .location() + - " (vanilla for " + - terra.unwrapKey() - .orElseThrow() - .location() + - ": " + - vanilla.tags() - .toList()); - - vanilla.tags() - .forEach( - tag -> collect - .computeIfAbsent( - tag, - t -> new ArrayList<>()) - .add(terra)); - }, - () -> LOGGER.error( - "No such biome: {}", - tb))), - () -> LOGGER.error("No vanilla biome: {}", vb))); - - biomeRegistry.resetTags(); // clearTags - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); // populateTags - - } catch(SecurityException | IllegalArgumentException exception) { - throw new RuntimeException(exception); - } - } -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInfo.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInfo.java deleted file mode 100644 index 7e04ef178..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.biome.Biome; - -import com.dfsek.terra.api.properties.Properties; - - -public record NMSBiomeInfo(ResourceKey biomeKey) implements Properties { -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java deleted file mode 100644 index f56c32b5b..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -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) - .map(registry::getOrCreateHolder); - } - - 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 - - - builder.biomeCategory(Reflection.BIOME.getBiomeCategory(vanilla)) - .precipitation(vanilla.getPrecipitation()) // getPrecipitation - .mobSpawnSettings(vanilla.getMobSettings()) - .generationSettings(vanilla.getGenerationSettings()) - .temperature(vanilla.getBaseTemperature()) - .downfall(vanilla.getDownfall()); - - - 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 { - 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(); // 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_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeProvider.java deleted file mode 100644 index 9fb99f13f..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeProvider.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import com.mojang.serialization.Codec; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate.Sampler; -import org.jetbrains.annotations.NotNull; - -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; - - -public class NMSBiomeProvider extends BiomeSource { - private final BiomeProvider delegate; - private final BiomeSource vanilla; - private final long seed; - private final Registry biomeRegistry = Registries.biomeRegistry(); - - public NMSBiomeProvider(BiomeProvider delegate, BiomeSource vanilla, long seed) { - super(delegate.stream() - .map(biome -> Registries.biomeRegistry() - .getOrCreateHolder(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()))); - this.delegate = delegate; - this.vanilla = vanilla; - this.seed = seed; - } - - @Override - protected Codec codec() { - return BiomeSource.CODEC; - } - - @Override - public @NotNull BiomeSource withSeed(long seed) { - return new NMSBiomeProvider(delegate, vanilla, seed); - } - - @Override - public @NotNull Holder getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) { - return biomeRegistry.getOrCreateHolder(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed).getPlatformBiome()) - .getContext() - .get(NMSBiomeInfo.class) - .biomeKey()); - } -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSChunkGeneratorDelegate.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSChunkGeneratorDelegate.java deleted file mode 100644 index 905867b62..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSChunkGeneratorDelegate.java +++ /dev/null @@ -1,254 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.Codec; -import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.SectionPos; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.NoiseColumn; -import net.minecraft.world.level.StructureFeatureManager; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.biome.Climate; -import net.minecraft.world.level.biome.Climate.Sampler; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.GenerationStep; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement; -import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; -import java.util.stream.Collectors; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.util.MathUtil; -import com.dfsek.terra.api.util.generic.Lazy; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.info.WorldProperties; - - -public class NMSChunkGeneratorDelegate extends ChunkGenerator { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSChunkGeneratorDelegate.class); - private static final Lazy> EMPTY = Lazy.lazy(List::of); - private final NMSBiomeProvider biomeSource; - private final com.dfsek.terra.api.world.chunk.generation.ChunkGenerator delegate; - private final ChunkGenerator vanilla; - private final ConfigPack pack; - private final long seed; - private final Map>> ringPositions = new Object2ObjectArrayMap<>(); - private volatile boolean rings = false; - - public NMSChunkGeneratorDelegate(ChunkGenerator vanilla, ConfigPack pack, NMSBiomeProvider biomeProvider, long seed) { - super(Registries.structureSet(), Optional.empty(), biomeProvider, biomeProvider, seed); - this.delegate = pack.getGeneratorProvider().newInstance(pack); - this.vanilla = vanilla; - this.biomeSource = biomeProvider; - this.pack = pack; - this.seed = seed; - } - - @Override - public void applyCarvers(@NotNull WorldGenRegion chunkRegion, long seed, @NotNull BiomeManager biomeAccess, - @NotNull StructureFeatureManager structureAccessor, - @NotNull ChunkAccess chunk, GenerationStep.@NotNull Carving generationStep) { - // no-op - } - - @Override - public void applyBiomeDecoration(@NotNull WorldGenLevel world, @NotNull ChunkAccess chunk, - @NotNull StructureFeatureManager structureAccessor) { - vanilla.applyBiomeDecoration(world, chunk, structureAccessor); - } - - @Override - public int getSeaLevel() { - return vanilla.getSeaLevel(); - } - - @Override - public @NotNull CompletableFuture fillFromNoise(@NotNull Executor executor, @NotNull Blender blender, - @NotNull StructureFeatureManager structureAccessor, - @NotNull ChunkAccess chunk) { - return vanilla.fillFromNoise(executor, blender, structureAccessor, chunk); - } - - @Override - public void buildSurface(@NotNull WorldGenRegion region, @NotNull StructureFeatureManager structures, @NotNull ChunkAccess chunk) { - // no-op - } - - @Override - protected @NotNull Codec codec() { - return ChunkGenerator.CODEC; - } - - @Override - public @NotNull NoiseColumn getBaseColumn(int x, int z, LevelHeightAccessor height) { - /* - BlockState[] array = new BlockState[height.getHeight()]; - WorldProperties properties = new NMSWorldProperties(seed, height); - BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties); - for(int y = properties.getMaxHeight() - 1; y >= properties.getMinHeight(); y--) { - array[y - properties.getMinHeight()] = ((CraftBlockData) delegate.getBlock(properties, x, y, z, biomeProvider) - .getHandle()).getState(); - } - return new NoiseColumn(getMinY(), array); - */ - return vanilla.getBaseColumn(x, z, height); - } - - @Override // withSeed - public @NotNull ChunkGenerator withSeed(long seed) { - return new NMSChunkGeneratorDelegate(vanilla, pack, biomeSource, seed); - } - - @Override - public void spawnOriginalMobs(@NotNull WorldGenRegion regionlimitedworldaccess) { - vanilla.spawnOriginalMobs(regionlimitedworldaccess); - } - - @Override - public int getGenDepth() { - return vanilla.getGenDepth(); - } - - @Override - public @NotNull Sampler climateSampler() { - return Climate.empty(); - } - - @Override - public int getMinY() { - return vanilla.getMinY(); - } - - @Override - public int getBaseHeight(int x, int z, Heightmap.@NotNull Types heightmap, @NotNull LevelHeightAccessor world) { - WorldProperties properties = new NMSWorldProperties(seed, world); - int y = properties.getMaxHeight(); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - while(y >= getMinY() && !heightmap.isOpaque().test( - ((CraftBlockData) delegate.getBlock(properties, x, y - 1, z, biomeProvider).getHandle()).getState())) { - y--; - } - return y; - } - - @Nullable - @Override - public List getRingPositionsFor(@NotNull ConcentricRingsStructurePlacement concentricringsstructureplacement) { - ensureStructuresGenerated(); - return ringPositions.getOrDefault(concentricringsstructureplacement, EMPTY).value(); - } - - @Override - public synchronized void ensureStructuresGenerated() { - if(!this.rings) { - super.ensureStructuresGenerated(); - this.populateStrongholdData(); - this.rings = true; - } - } - - private void populateStrongholdData() { - LOGGER.info("Generating safe stronghold data. This may take up to a minute."); - Set> set = this.runtimeBiomeSource.possibleBiomes(); - possibleStructureSets().map(Holder::value).forEach((holder) -> { // we dont need the spigot crap because it doesnt touch concentric. - StructurePlacement structureplacement = holder.placement(); - if(structureplacement instanceof ConcentricRingsStructurePlacement concentricringsstructureplacement) { - if(holder.structures().stream().anyMatch((structureset_a1) -> structureset_a1.generatesInMatchingBiome(set::contains))) { - this.ringPositions.put(concentricringsstructureplacement, - Lazy.lazy(() -> this.generateRingPositions(holder, concentricringsstructureplacement))); - } - } - }); - } - - private List generateRingPositions(StructureSet holder, - ConcentricRingsStructurePlacement concentricringsstructureplacement) { // Spigot - if(concentricringsstructureplacement.count() == 0) { - return List.of(); - } - - List list = new ArrayList<>(); - Set> set = holder - .structures() - .stream() - .flatMap((structureset_a) -> structureset_a.structure().value().biomes().stream()) - .collect(Collectors.toSet()); - int i = concentricringsstructureplacement.distance(); - int j = concentricringsstructureplacement.count(); - int k = concentricringsstructureplacement.spread(); - Random random = new Random(); - - // Paper start - if(this.conf.strongholdSeed != null && this.structureSets.getResourceKey(holder).orElse(null) == - net.minecraft.world.level.levelgen.structure.BuiltinStructureSets.STRONGHOLDS) { - random.setSeed(this.conf.strongholdSeed); - } else { - // Paper end - random.setSeed(this.ringPlacementSeed); - } // Paper - double d0 = random.nextDouble() * 3.141592653589793D * 2.0D; - int l = 0; - int i1 = 0; - - for(int j1 = 0; j1 < j; ++j1) { - double d1 = (double) (4 * i + i * i1 * 6) + (random.nextDouble() - 0.5D) * (double) i * 2.5D; - int k1 = (int) Math.round(MathUtil.cos(d0) * d1); - int l1 = (int) Math.round(MathUtil.sin(d0) * d1); - int i2 = SectionPos.sectionToBlockCoord(k1, 8); - int j2 = SectionPos.sectionToBlockCoord(l1, 8); - - Objects.requireNonNull(set); - Pair> pair = this.biomeSource.findBiomeHorizontal(i2, 0, j2, 112, set::contains, random, - this.climateSampler()); - - if(pair != null) { - BlockPos blockposition = pair.getFirst(); - - k1 = SectionPos.blockToSectionCoord(blockposition.getX()); - l1 = SectionPos.blockToSectionCoord(blockposition.getZ()); - } - - list.add(new ChunkPos(k1, l1)); - d0 += 6.283185307179586D / (double) k; - ++l; - if(l == k) { - ++i1; - l = 0; - k += 2 * k / (i1 + 1); - k = Math.min(k, j - j1); - d0 += random.nextDouble() * 3.141592653589793D * 2.0D; - } - } - - return list; - } - - @Override - public void addDebugScreenInfo(@NotNull List arg0, @NotNull BlockPos arg1) { - - } -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java deleted file mode 100644 index f724b89f0..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import org.bukkit.Bukkit; - -import com.dfsek.terra.bukkit.PlatformImpl; -import com.dfsek.terra.bukkit.nms.Initializer; - - -public class NMSInitializer implements Initializer { - @Override - public void initialize(PlatformImpl platform) { - AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); - Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); - } -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInjectListener.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInjectListener.java deleted file mode 100644 index 9e055524a..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInjectListener.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.chunk.ChunkGenerator; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.WorldInitEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; - - -public class NMSInjectListener implements Listener { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSInjectListener.class); - private static final Set INJECTED = new HashSet<>(); - private static final ReentrantLock INJECT_LOCK = new ReentrantLock(); - - @EventHandler - public void onWorldInit(WorldInitEvent event) { - if(!INJECTED.contains(event.getWorld()) && - event.getWorld().getGenerator() instanceof BukkitChunkGeneratorWrapper bukkitChunkGeneratorWrapper) { - INJECT_LOCK.lock(); - INJECTED.add(event.getWorld()); - LOGGER.info("Preparing to take over the world: {}", event.getWorld().getName()); - CraftWorld craftWorld = (CraftWorld) event.getWorld(); - ServerLevel serverWorld = craftWorld.getHandle(); - - ConfigPack pack = bukkitChunkGeneratorWrapper.getPack(); - - ChunkGenerator vanilla = serverWorld.getChunkSource().getGenerator(); - NMSBiomeProvider provider = new NMSBiomeProvider(pack.getBiomeProvider(), vanilla.getBiomeSource(), craftWorld.getSeed()); - NMSChunkGeneratorDelegate custom = new NMSChunkGeneratorDelegate(vanilla, pack, provider, craftWorld.getSeed()); - - custom.conf = vanilla.conf; // world config from Spigot - - serverWorld.getChunkSource().chunkMap.generator = custom; - - LOGGER.info("Successfully injected into world."); - - serverWorld.getChunkSource().chunkMap.generator.ensureStructuresGenerated(); // generate stronghold data now - - INJECT_LOCK.unlock(); - } - } -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSWorldProperties.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSWorldProperties.java deleted file mode 100644 index 875dc0330..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSWorldProperties.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import net.minecraft.world.level.LevelHeightAccessor; - -import com.dfsek.terra.api.world.info.WorldProperties; - - -public class NMSWorldProperties implements WorldProperties { - private final long seed; - private final LevelHeightAccessor height; - - public NMSWorldProperties(long seed, LevelHeightAccessor height) { - this.seed = seed; - this.height = height; - } - - @Override - public Object getHandle() { - return height; - } - - @Override - public long getSeed() { - return seed; - } - - @Override - public int getMaxHeight() { - return height.getMaxBuildHeight(); - } - - @Override - public int getMinHeight() { - return height.getMinBuildHeight(); - } -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Reflection.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Reflection.java deleted file mode 100644 index c6e3351a1..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Reflection.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import net.minecraft.core.MappedRegistry; -import net.minecraft.world.level.biome.Biome; -import xyz.jpenilla.reflectionremapper.ReflectionRemapper; -import xyz.jpenilla.reflectionremapper.proxy.ReflectionProxyFactory; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldGetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldSetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.Proxies; - - -public class Reflection { - public static final MappedRegistryProxy MAPPED_REGISTRY; - public static final BiomeProxy BIOME; - - static { - ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); - ReflectionProxyFactory reflectionProxyFactory = ReflectionProxyFactory.create(reflectionRemapper, - Reflection.class.getClassLoader()); - - MAPPED_REGISTRY = reflectionProxyFactory.reflectionProxy(MappedRegistryProxy.class); - BIOME = reflectionProxyFactory.reflectionProxy(BiomeProxy.class); - } - - - @Proxies(MappedRegistry.class) - public interface MappedRegistryProxy { - @FieldSetter("frozen") - void setFrozen(MappedRegistry instance, boolean frozen); - } - - - @Proxies(Biome.class) - public interface BiomeProxy { - @FieldGetter("biomeCategory") - Biome.BiomeCategory getBiomeCategory(Biome instance); - } -} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Registries.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Registries.java deleted file mode 100644 index 652d77cab..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/Registries.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_18_R2; - -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.dedicated.DedicatedServer; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_18_R2.CraftServer; - - -public class Registries { - private static Registry getRegistry(ResourceKey> key) { - CraftServer craftserver = (CraftServer) Bukkit.getServer(); - DedicatedServer dedicatedserver = craftserver.getServer(); - return dedicatedserver - .registryAccess() - .registryOrThrow( // getRegistry - key - ); - } - - public static Registry biomeRegistry() { - return getRegistry(Registry.BIOME_REGISTRY); - } - - public static Registry structureSet() { - return getRegistry(Registry.STRUCTURE_SET_REGISTRY); - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/build.gradle.kts b/platforms/bukkit/nms/v1_19_R1/build.gradle.kts deleted file mode 100644 index 9b301aa70..000000000 --- a/platforms/bukkit/nms/v1_19_R1/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -apply(plugin = "io.papermc.paperweight.userdev") - -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") -} - -dependencies { - api(project(":platforms:bukkit:common")) - paperDevBundle("1.19-R0.1-SNAPSHOT") - implementation("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) -} - -tasks { - assemble { - dependsOn("reobfJar") - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java deleted file mode 100644 index 92506d834..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import com.google.common.collect.ImmutableMap; -import com.mojang.serialization.Lifecycle; -import net.minecraft.core.Holder; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.Registry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.data.BuiltinRegistries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.level.biome.Biome; -import org.bukkit.NamespacedKey; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; -import com.dfsek.terra.registry.master.ConfigRegistry; - - -public class AwfulBukkitHacks { - private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); - - private static final Map> terraBiomeMap = new HashMap<>(); - - public static void registerBiomes(ConfigRegistry configRegistry) { - try { - LOGGER.info("Hacking biome registry..."); - WritableRegistry biomeRegistry = (WritableRegistry) Registries.biomeRegistry(); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); - - configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { - try { - BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); - NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); - ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = NMSBiomeInjector.createBiome( - biome, - Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey)) // get - ); - - ResourceKey delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, - new ResourceLocation("terra", - NMSBiomeInjector.createBiomeID(pack, key))); - - BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); - biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - })); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - terraBiomeMap - .forEach((vb, terraBiomes) -> - NMSBiomeInjector.getEntry(biomeRegistry, vb) - .ifPresentOrElse( - vanilla -> terraBiomes - .forEach(tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb) - .ifPresentOrElse( - terra -> { - LOGGER.debug( - vanilla.unwrapKey() - .orElseThrow() - .location() + - " (vanilla for " + - terra.unwrapKey() - .orElseThrow() - .location() + - ": " + - vanilla.tags() - .toList()); - - vanilla.tags() - .forEach( - tag -> collect - .computeIfAbsent( - tag, - t -> new ArrayList<>()) - .add(terra)); - }, - () -> LOGGER.error( - "No such biome: {}", - tb))), - () -> LOGGER.error("No vanilla biome: {}", vb))); - - biomeRegistry.resetTags(); - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); - - } catch(SecurityException | IllegalArgumentException exception) { - throw new RuntimeException(exception); - } - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInfo.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInfo.java deleted file mode 100644 index 02e67dc8d..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import com.dfsek.terra.api.properties.Properties; - -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.biome.Biome; - - -public record NMSBiomeInfo(ResourceKey biomeKey) implements Properties { -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java deleted file mode 100644 index 39a66e468..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -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) - .map(registry::getOrCreateHolderOrThrow); - } - - 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 - .precipitation(vanilla.getPrecipitation()) - .downfall(vanilla.getDownfall()) - .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_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeProvider.java deleted file mode 100644 index ee7a05443..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeProvider.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import com.mojang.serialization.Codec; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate.Sampler; -import org.jetbrains.annotations.NotNull; - -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; - - -public class NMSBiomeProvider extends BiomeSource { - private final BiomeProvider delegate; - private final long seed; - private final Registry biomeRegistry = Registries.biomeRegistry(); - - public NMSBiomeProvider(BiomeProvider delegate, long seed) { - super(delegate.stream() - .map(biome -> Registries.biomeRegistry() - .getHolderOrThrow(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()))); - this.delegate = delegate; - this.seed = seed; - } - - @Override - protected @NotNull Codec codec() { - return BiomeSource.CODEC; - } - - @Override - public @NotNull Holder getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) { - return biomeRegistry.getHolderOrThrow(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) - .getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()); - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSChunkGeneratorDelegate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSChunkGeneratorDelegate.java deleted file mode 100644 index 6e374ff8b..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSChunkGeneratorDelegate.java +++ /dev/null @@ -1,291 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.Codec; -import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.HolderSet; -import net.minecraft.core.SectionPos; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.NoiseColumn; -import net.minecraft.world.level.StructureManager; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.Beardifier; -import net.minecraft.world.level.levelgen.DensityFunction.SinglePointContext; -import net.minecraft.world.level.levelgen.GenerationStep.Carving; -import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.RandomState; -import net.minecraft.world.level.levelgen.blending.Blender; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import net.minecraft.world.level.levelgen.structure.StructureSet.StructureSelectionEntry; -import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement; -import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; -import java.util.stream.Stream; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.util.MathUtil; -import com.dfsek.terra.api.util.generic.Lazy; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.info.WorldProperties; -import com.dfsek.terra.bukkit.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.bukkit.world.BukkitWorldProperties; -import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState; - - -public class NMSChunkGeneratorDelegate extends ChunkGenerator { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSChunkGeneratorDelegate.class); - private final com.dfsek.terra.api.world.chunk.generation.ChunkGenerator delegate; - - private final ChunkGenerator vanilla; - private final ConfigPack pack; - - private final long seed; - private final Map>> ringPositions = new Object2ObjectArrayMap<>(); - private volatile boolean rings = false; - - public NMSChunkGeneratorDelegate(ChunkGenerator vanilla, ConfigPack pack, NMSBiomeProvider biomeProvider, long seed) { - super(Registries.structureSet(), Optional.empty(), biomeProvider); - this.delegate = pack.getGeneratorProvider().newInstance(pack); - this.vanilla = vanilla; - this.pack = pack; - this.seed = seed; - } - - @Override - protected @NotNull Codec codec() { - return ChunkGenerator.CODEC; - } - - @Override - public void applyCarvers(@NotNull WorldGenRegion chunkRegion, long seed, @NotNull RandomState noiseConfig, @NotNull BiomeManager world, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk, @NotNull Carving carverStep) { - // no-op - } - - @Override - public void buildSurface(@NotNull WorldGenRegion region, @NotNull StructureManager structures, @NotNull RandomState noiseConfig, - @NotNull ChunkAccess chunk) { - // no-op - } - - @Override - public void applyBiomeDecoration(@NotNull WorldGenLevel world, @NotNull ChunkAccess chunk, - @NotNull StructureManager structureAccessor) { - vanilla.applyBiomeDecoration(world, chunk, structureAccessor); - } - - @Override - public void spawnOriginalMobs(@NotNull WorldGenRegion region) { - vanilla.spawnOriginalMobs(region); - } - - @Override - public int getGenDepth() { - return vanilla.getGenDepth(); - } - - @Override - public @NotNull CompletableFuture fillFromNoise(@NotNull Executor executor, @NotNull Blender blender, - @NotNull RandomState noiseConfig, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk) { - return vanilla.fillFromNoise(executor, blender, noiseConfig, structureAccessor, chunk) - .thenApply(c -> { - LevelAccessor level = Reflection.STRUCTURE_MANAGER.getLevel(structureAccessor); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); - if(compatibilityOptions.isBeard()) { - beard(structureAccessor, chunk, new BukkitWorldProperties(level.getMinecraftWorld().getWorld()), - biomeProvider, compatibilityOptions); - } - return c; - }); - } - - private void beard(StructureManager structureAccessor, ChunkAccess chunk, WorldProperties world, BiomeProvider biomeProvider, - PreLoadCompatibilityOptions compatibilityOptions) { - Beardifier structureWeightSampler = Beardifier.forStructuresInChunk(structureAccessor, chunk.getPos()); - double threshold = compatibilityOptions.getBeardThreshold(); - double airThreshold = compatibilityOptions.getAirThreshold(); - int xi = chunk.getPos().x << 4; - int zi = chunk.getPos().z << 4; - for(int x = 0; x < 16; x++) { - for(int z = 0; z < 16; z++) { - int depth = 0; - for(int y = world.getMaxHeight(); y >= world.getMinHeight(); y--) { - double noise = structureWeightSampler.compute(new SinglePointContext(x + xi, y, z + zi)); - if(noise > threshold) { - chunk.setBlockState(new BlockPos(x, y, z), ((CraftBlockData) ((BukkitBlockState) delegate - .getPalette(x + xi, y, z + zi, world, biomeProvider) - .get(depth, x + xi, y, z + zi, world.getSeed())).getHandle()).getState(), false); - depth++; - } else if(noise < airThreshold) { - chunk.setBlockState(new BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), false); - } else { - depth = 0; - } - } - } - } - } - - @Override - public int getSeaLevel() { - return vanilla.getSeaLevel(); - } - - @Override - public int getMinY() { - return vanilla.getMinY(); - } - - @Override - public int getBaseHeight(int x, int z, @NotNull Types heightmap, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - WorldProperties properties = new NMSWorldProperties(seed, world); - int y = properties.getMaxHeight(); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - while(y >= getMinY() && !heightmap.isOpaque().test( - ((CraftBlockData) delegate.getBlock(properties, x, y - 1, z, biomeProvider).getHandle()).getState())) { - y--; - } - return y; - } - - @Override - public @NotNull NoiseColumn getBaseColumn(int x, int z, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - /* - BlockState[] array = new BlockState[world.getHeight()]; - WorldProperties properties = new NMSWorldProperties(seed, world); - BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties); - for(int y = properties.getMaxHeight() - 1; y >= properties.getMinHeight(); y--) { - array[y - properties.getMinHeight()] = ((CraftBlockData) delegate.getBlock(properties, x, y, z, biomeProvider) - .getHandle()).getState(); - } - return new NoiseColumn(getMinY(), array); - - */ - return vanilla.getBaseColumn(x, z, world, noiseConfig); - } - - @Override - public void addDebugScreenInfo(@NotNull List text, @NotNull RandomState noiseConfig, @NotNull BlockPos pos) { - - } - - @Override - public void ensureStructuresGenerated(@NotNull RandomState noiseConfig) { - if(!this.rings) { - super.ensureStructuresGenerated(noiseConfig); - this.populateStrongholdData(noiseConfig); - this.rings = true; - } - - } - - @Override - public List getRingPositionsFor(@NotNull ConcentricRingsStructurePlacement structurePlacement, - @NotNull RandomState noiseConfig) { - ensureStructuresGenerated(noiseConfig); - return ringPositions.get(structurePlacement).value(); - } - - private void populateStrongholdData(RandomState noiseConfig) { - LOGGER.info("Generating safe stronghold data. This may take up to a minute."); - Set> set = this.biomeSource.possibleBiomes(); - possibleStructureSets().map(Holder::value).forEach((holder) -> { - boolean match = false; - for(StructureSelectionEntry structureset_a : holder.structures()) { - Structure structure = structureset_a.structure().value(); - Stream> stream = structure.biomes().stream(); - if(stream.anyMatch(set::contains)) { - match = true; - } - } - - if(match) { - if(holder.placement() instanceof ConcentricRingsStructurePlacement concentricringsstructureplacement) { - this.ringPositions.put(concentricringsstructureplacement, Lazy.lazy( - () -> this.generateRingPositions(holder, noiseConfig, concentricringsstructureplacement))); - } - } - }); - } - - private List generateRingPositions(StructureSet holder, RandomState randomstate, - ConcentricRingsStructurePlacement concentricringsstructureplacement) { // Spigot - if(concentricringsstructureplacement.count() == 0) { - return List.of(); - } - - List list = new ArrayList<>(); - int i = concentricringsstructureplacement.distance(); - int j = concentricringsstructureplacement.count(); - int k = concentricringsstructureplacement.spread(); - HolderSet holderset = concentricringsstructureplacement.preferredBiomes(); - RandomSource randomsource = RandomSource.create(); - - if(this.conf.strongholdSeed != null && this.structureSets.getResourceKey(holder).orElse(null) == - net.minecraft.world.level.levelgen.structure.BuiltinStructureSets.STRONGHOLDS) { - randomsource.setSeed(this.conf.strongholdSeed); - } else { - randomsource.setSeed(randomstate.legacyLevelSeed()); - } - double d0 = randomsource.nextDouble() * 3.141592653589793D * 2.0D; - int l = 0; - int i1 = 0; - - for(int j1 = 0; j1 < j; ++j1) { - double d1 = (double) (4 * i + i * i1 * 6) + (randomsource.nextDouble() - 0.5D) * (double) i * 2.5D; - int k1 = (int) Math.round(MathUtil.cos(d0) * d1); - int l1 = (int) Math.round(MathUtil.sin(d0) * d1); - int i2 = SectionPos.sectionToBlockCoord(k1, 8); - int j2 = SectionPos.sectionToBlockCoord(l1, 8); - - Objects.requireNonNull(holderset); - Pair> pair = this.biomeSource.findBiomeHorizontal(i2, 0, j2, 112, holderset::contains, randomsource, - randomstate.sampler()); - - if(pair != null) { - BlockPos blockposition = pair.getFirst(); - - k1 = SectionPos.blockToSectionCoord(blockposition.getX()); - l1 = SectionPos.blockToSectionCoord(blockposition.getZ()); - } - - list.add(new ChunkPos(k1, l1)); - d0 += 6.283185307179586D / (double) k; - ++l; - if(l == k) { - ++i1; - l = 0; - k += 2 * k / (i1 + 1); - k = Math.min(k, j - j1); - d0 += randomsource.nextDouble() * 3.141592653589793D * 2.0D; - } - } - - return list; - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java deleted file mode 100644 index 82a293cd1..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import org.bukkit.Bukkit; - -import com.dfsek.terra.bukkit.PlatformImpl; -import com.dfsek.terra.bukkit.nms.Initializer; - - -public class NMSInitializer implements Initializer { - @Override - public void initialize(PlatformImpl platform) { - AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); - Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInjectListener.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInjectListener.java deleted file mode 100644 index 0f11f700d..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInjectListener.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.chunk.ChunkGenerator; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.WorldInitEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; - - -public class NMSInjectListener implements Listener { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSInjectListener.class); - private static final Set INJECTED = new HashSet<>(); - private static final ReentrantLock INJECT_LOCK = new ReentrantLock(); - - @EventHandler - public void onWorldInit(WorldInitEvent event) { - if(!INJECTED.contains(event.getWorld()) && - event.getWorld().getGenerator() instanceof BukkitChunkGeneratorWrapper bukkitChunkGeneratorWrapper) { - INJECT_LOCK.lock(); - INJECTED.add(event.getWorld()); - LOGGER.info("Preparing to take over the world: {}", event.getWorld().getName()); - CraftWorld craftWorld = (CraftWorld) event.getWorld(); - ServerLevel serverWorld = craftWorld.getHandle(); - - ConfigPack pack = bukkitChunkGeneratorWrapper.getPack(); - - ChunkGenerator vanilla = serverWorld.getChunkSource().getGenerator(); - NMSBiomeProvider provider = new NMSBiomeProvider(pack.getBiomeProvider(), craftWorld.getSeed()); - NMSChunkGeneratorDelegate custom = new NMSChunkGeneratorDelegate(vanilla, pack, provider, craftWorld.getSeed()); - - custom.conf = vanilla.conf; // world config from Spigot - - serverWorld.getChunkSource().chunkMap.generator = custom; - - LOGGER.info("Successfully injected into world."); - - INJECT_LOCK.unlock(); - } - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSWorldProperties.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSWorldProperties.java deleted file mode 100644 index 9348ca047..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSWorldProperties.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import net.minecraft.world.level.LevelHeightAccessor; - -import com.dfsek.terra.api.world.info.WorldProperties; - - -public class NMSWorldProperties implements WorldProperties { - private final long seed; - private final LevelHeightAccessor height; - - public NMSWorldProperties(long seed, LevelHeightAccessor height) { - this.seed = seed; - this.height = height; - } - - @Override - public Object getHandle() { - return height; - } - - @Override - public long getSeed() { - return seed; - } - - @Override - public int getMaxHeight() { - return height.getMaxBuildHeight(); - } - - @Override - public int getMinHeight() { - return height.getMinBuildHeight(); - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Reflection.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Reflection.java deleted file mode 100644 index 84263a667..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Reflection.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import net.minecraft.core.MappedRegistry; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.StructureManager; -import xyz.jpenilla.reflectionremapper.ReflectionRemapper; -import xyz.jpenilla.reflectionremapper.proxy.ReflectionProxyFactory; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldGetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldSetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.Proxies; - - -public class Reflection { - public static final MappedRegistryProxy MAPPED_REGISTRY; - public static final StructureManagerProxy STRUCTURE_MANAGER; - - static { - ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); - ReflectionProxyFactory reflectionProxyFactory = ReflectionProxyFactory.create(reflectionRemapper, - Reflection.class.getClassLoader()); - - MAPPED_REGISTRY = reflectionProxyFactory.reflectionProxy(MappedRegistryProxy.class); - STRUCTURE_MANAGER = reflectionProxyFactory.reflectionProxy(StructureManagerProxy.class); - } - - - @Proxies(MappedRegistry.class) - public interface MappedRegistryProxy { - @FieldSetter("frozen") - void setFrozen(MappedRegistry instance, boolean frozen); - } - - - @Proxies(StructureManager.class) - public interface StructureManagerProxy { - @FieldGetter("level") - LevelAccessor getLevel(StructureManager instance); - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Registries.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Registries.java deleted file mode 100644 index 1ff964106..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/Registries.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1; - -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.dedicated.DedicatedServer; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.structure.StructureSet; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R1.CraftServer; - - -public class Registries { - private static Registry getRegistry(ResourceKey> key) { - CraftServer craftserver = (CraftServer) Bukkit.getServer(); - DedicatedServer dedicatedserver = craftserver.getServer(); - return dedicatedserver - .registryAccess() - .registryOrThrow( // getRegistry - key - ); - } - - public static Registry biomeRegistry() { - return getRegistry(Registry.BIOME_REGISTRY); - } - - public static Registry structureSet() { - return getRegistry(Registry.STRUCTURE_SET_REGISTRY); - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/build.gradle.kts b/platforms/bukkit/nms/v1_19_R2/build.gradle.kts deleted file mode 100644 index c6f6d8205..000000000 --- a/platforms/bukkit/nms/v1_19_R2/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -apply(plugin = "io.papermc.paperweight.userdev") - -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") -} - -dependencies { - api(project(":platforms:bukkit:common")) - paperDevBundle("1.19.3-R0.1-SNAPSHOT") - implementation("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) -} - -tasks { - assemble { - dependsOn("reobfJar") - } -} \ No newline at end of file diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/AwfulBukkitHacks.java deleted file mode 100644 index 725f2fb1a..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/AwfulBukkitHacks.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import com.google.common.collect.ImmutableMap; -import com.mojang.serialization.Lifecycle; -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.level.biome.Biome; -import org.bukkit.NamespacedKey; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; -import com.dfsek.terra.registry.master.ConfigRegistry; - - -public class AwfulBukkitHacks { - private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); - - private static final Map> terraBiomeMap = new HashMap<>(); - - public static void registerBiomes(ConfigRegistry configRegistry) { - try { - LOGGER.info("Hacking biome registry..."); - WritableRegistry biomeRegistry = (WritableRegistry) RegistryFetcher.biomeRegistry(); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); - - configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { - try { - BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); - NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); - ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = NMSBiomeInjector.createBiome(biome, Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey))); - - ResourceKey delegateKey = ResourceKey.create( - Registries.BIOME, - new ResourceLocation("terra", NMSBiomeInjector.createBiomeID(pack, key)) - ); - - Reference holder = biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - Reflection.REFERENCE.invokeBindValue(holder, platform); // IMPORTANT: bind holder. - - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - })); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - terraBiomeMap - .forEach((vb, terraBiomes) -> - NMSBiomeInjector.getEntry(biomeRegistry, vb).ifPresentOrElse( - vanilla -> terraBiomes.forEach( - tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb).ifPresentOrElse( - terra -> { - LOGGER.debug("{} (vanilla for {}): {}", - vanilla.unwrapKey().orElseThrow().location(), - terra.unwrapKey().orElseThrow().location(), - vanilla.tags().toList()); - vanilla.tags() - .forEach(tag -> collect - .computeIfAbsent(tag, t -> new ArrayList<>()) - .add(terra)); - }, - () -> LOGGER.error("No such biome: {}", tb))), - () -> LOGGER.error("No vanilla biome: {}", vb))); - - biomeRegistry.resetTags(); - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); - - } catch(SecurityException | IllegalArgumentException exception) { - throw new RuntimeException(exception); - } - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInfo.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInfo.java deleted file mode 100644 index 639c9eaed..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.biome.Biome; - -import com.dfsek.terra.api.properties.Properties; - - -public record NMSBiomeInfo(ResourceKey biomeKey) implements Properties { -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInjector.java deleted file mode 100644 index 0b8c36a50..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeInjector.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -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::getHolder); - } - - 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 - .precipitation(vanilla.getPrecipitation()) - .downfall(vanilla.getDownfall()) - .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_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeProvider.java deleted file mode 100644 index 4e4b9f1c5..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSBiomeProvider.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import com.mojang.serialization.Codec; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate.Sampler; -import org.jetbrains.annotations.NotNull; - -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; - - -public class NMSBiomeProvider extends BiomeSource { - private final BiomeProvider delegate; - private final long seed; - private final Registry biomeRegistry = RegistryFetcher.biomeRegistry(); - - public NMSBiomeProvider(BiomeProvider delegate, long seed) { - super(delegate.stream() - .map(biome -> RegistryFetcher.biomeRegistry() - .getHolderOrThrow(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()))); - this.delegate = delegate; - this.seed = seed; - } - - @Override - protected @NotNull Codec codec() { - return BiomeSource.CODEC; - } - - @Override - public @NotNull Holder getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) { - return biomeRegistry.getHolderOrThrow(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) - .getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()); - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSChunkGeneratorDelegate.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSChunkGeneratorDelegate.java deleted file mode 100644 index 9059326ca..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSChunkGeneratorDelegate.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.NoiseColumn; -import net.minecraft.world.level.StructureManager; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.Beardifier; -import net.minecraft.world.level.levelgen.DensityFunction.SinglePointContext; -import net.minecraft.world.level.levelgen.GenerationStep.Carving; -import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.RandomState; -import net.minecraft.world.level.levelgen.blending.Blender; -import org.bukkit.craftbukkit.v1_19_R2.block.data.CraftBlockData; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.info.WorldProperties; -import com.dfsek.terra.bukkit.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.bukkit.world.BukkitWorldProperties; -import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState; - - -public class NMSChunkGeneratorDelegate extends ChunkGenerator { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSChunkGeneratorDelegate.class); - private final com.dfsek.terra.api.world.chunk.generation.ChunkGenerator delegate; - - private final ChunkGenerator vanilla; - private final ConfigPack pack; - - private final long seed; - - public NMSChunkGeneratorDelegate(ChunkGenerator vanilla, ConfigPack pack, NMSBiomeProvider biomeProvider, long seed) { - super(biomeProvider); - this.delegate = pack.getGeneratorProvider().newInstance(pack); - this.vanilla = vanilla; - this.pack = pack; - this.seed = seed; - } - - @Override - protected @NotNull Codec codec() { - return ChunkGenerator.CODEC; - } - - @Override - public void applyCarvers(@NotNull WorldGenRegion chunkRegion, long seed, @NotNull RandomState noiseConfig, @NotNull BiomeManager world, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk, @NotNull Carving carverStep) { - // no-op - } - - @Override - public void buildSurface(@NotNull WorldGenRegion region, @NotNull StructureManager structures, @NotNull RandomState noiseConfig, - @NotNull ChunkAccess chunk) { - // no-op - } - - @Override - public void applyBiomeDecoration(@NotNull WorldGenLevel world, @NotNull ChunkAccess chunk, - @NotNull StructureManager structureAccessor) { - vanilla.applyBiomeDecoration(world, chunk, structureAccessor); - } - - @Override - public void spawnOriginalMobs(@NotNull WorldGenRegion region) { - vanilla.spawnOriginalMobs(region); - } - - @Override - public int getGenDepth() { - return vanilla.getGenDepth(); - } - - @Override - public @NotNull CompletableFuture fillFromNoise(@NotNull Executor executor, @NotNull Blender blender, - @NotNull RandomState noiseConfig, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk) { - return vanilla.fillFromNoise(executor, blender, noiseConfig, structureAccessor, chunk) - .thenApply(c -> { - LevelAccessor level = Reflection.STRUCTURE_MANAGER.getLevel(structureAccessor); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); - if(compatibilityOptions.isBeard()) { - beard(structureAccessor, chunk, new BukkitWorldProperties(level.getMinecraftWorld().getWorld()), - biomeProvider, compatibilityOptions); - } - return c; - }); - } - - private void beard(StructureManager structureAccessor, ChunkAccess chunk, WorldProperties world, BiomeProvider biomeProvider, - PreLoadCompatibilityOptions compatibilityOptions) { - Beardifier structureWeightSampler = Beardifier.forStructuresInChunk(structureAccessor, chunk.getPos()); - double threshold = compatibilityOptions.getBeardThreshold(); - double airThreshold = compatibilityOptions.getAirThreshold(); - int xi = chunk.getPos().x << 4; - int zi = chunk.getPos().z << 4; - for(int x = 0; x < 16; x++) { - for(int z = 0; z < 16; z++) { - int depth = 0; - for(int y = world.getMaxHeight(); y >= world.getMinHeight(); y--) { - double noise = structureWeightSampler.compute(new SinglePointContext(x + xi, y, z + zi)); - if(noise > threshold) { - chunk.setBlockState(new BlockPos(x, y, z), ((CraftBlockData) ((BukkitBlockState) delegate - .getPalette(x + xi, y, z + zi, world, biomeProvider) - .get(depth, x + xi, y, z + zi, world.getSeed())).getHandle()).getState(), false); - depth++; - } else if(noise < airThreshold) { - chunk.setBlockState(new BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), false); - } else { - depth = 0; - } - } - } - } - } - - @Override - public int getSeaLevel() { - return vanilla.getSeaLevel(); - } - - @Override - public int getMinY() { - return vanilla.getMinY(); - } - - @Override - public int getBaseHeight(int x, int z, @NotNull Types heightmap, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - WorldProperties properties = new NMSWorldProperties(seed, world); - int y = properties.getMaxHeight(); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - while(y >= getMinY() && !heightmap.isOpaque().test( - ((CraftBlockData) delegate.getBlock(properties, x, y - 1, z, biomeProvider).getHandle()).getState())) { - y--; - } - return y; - } - - @Override - public @NotNull NoiseColumn getBaseColumn(int x, int z, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - /* - BlockState[] array = new BlockState[world.getHeight()]; - WorldProperties properties = new NMSWorldProperties(seed, world); - BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties); - for(int y = properties.getMaxHeight() - 1; y >= properties.getMinHeight(); y--) { - array[y - properties.getMinHeight()] = ((CraftBlockData) delegate.getBlock(properties, x, y, z, biomeProvider) - .getHandle()).getState(); - } - return new NoiseColumn(getMinY(), array); - - */ - return vanilla.getBaseColumn(x, z, world, noiseConfig); - } - - @Override - public void addDebugScreenInfo(@NotNull List text, @NotNull RandomState noiseConfig, @NotNull BlockPos pos) { - - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInitializer.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInitializer.java deleted file mode 100644 index 05814cfd4..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInitializer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import org.bukkit.Bukkit; - -import com.dfsek.terra.bukkit.PlatformImpl; -import com.dfsek.terra.bukkit.nms.Initializer; - - -public class NMSInitializer implements Initializer { - @Override - public void initialize(PlatformImpl platform) { - AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); - Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInjectListener.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInjectListener.java deleted file mode 100644 index 6ce184da0..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSInjectListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.chunk.ChunkGenerator; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.WorldInitEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; - - -public class NMSInjectListener implements Listener { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSInjectListener.class); - private static final Set INJECTED = new HashSet<>(); - private static final ReentrantLock INJECT_LOCK = new ReentrantLock(); - - @EventHandler - public void onWorldInit(WorldInitEvent event) { - if(!INJECTED.contains(event.getWorld()) && - event.getWorld().getGenerator() instanceof BukkitChunkGeneratorWrapper bukkitChunkGeneratorWrapper) { - INJECT_LOCK.lock(); - INJECTED.add(event.getWorld()); - LOGGER.info("Preparing to take over the world: {}", event.getWorld().getName()); - CraftWorld craftWorld = (CraftWorld) event.getWorld(); - ServerLevel serverWorld = craftWorld.getHandle(); - - ConfigPack pack = bukkitChunkGeneratorWrapper.getPack(); - - ChunkGenerator vanilla = serverWorld.getChunkSource().getGenerator(); - NMSBiomeProvider provider = new NMSBiomeProvider(pack.getBiomeProvider(), craftWorld.getSeed()); - - serverWorld.getChunkSource().chunkMap.generator = new NMSChunkGeneratorDelegate(vanilla, pack, provider, craftWorld.getSeed()); - - LOGGER.info("Successfully injected into world."); - - INJECT_LOCK.unlock(); - } - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSWorldProperties.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSWorldProperties.java deleted file mode 100644 index 9e1989451..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/NMSWorldProperties.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import net.minecraft.world.level.LevelHeightAccessor; - -import com.dfsek.terra.api.world.info.WorldProperties; - - -public class NMSWorldProperties implements WorldProperties { - private final long seed; - private final LevelHeightAccessor height; - - public NMSWorldProperties(long seed, LevelHeightAccessor height) { - this.seed = seed; - this.height = height; - } - - @Override - public Object getHandle() { - return height; - } - - @Override - public long getSeed() { - return seed; - } - - @Override - public int getMaxHeight() { - return height.getMaxBuildHeight(); - } - - @Override - public int getMinHeight() { - return height.getMinBuildHeight(); - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/Reflection.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/Reflection.java deleted file mode 100644 index d0f933258..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/Reflection.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.StructureManager; -import xyz.jpenilla.reflectionremapper.ReflectionRemapper; -import xyz.jpenilla.reflectionremapper.proxy.ReflectionProxyFactory; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldGetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldSetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.MethodName; -import xyz.jpenilla.reflectionremapper.proxy.annotation.Proxies; - - -public class Reflection { - public static final MappedRegistryProxy MAPPED_REGISTRY; - public static final StructureManagerProxy STRUCTURE_MANAGER; - - public static final ReferenceProxy REFERENCE; - - static { - ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); - ReflectionProxyFactory reflectionProxyFactory = ReflectionProxyFactory.create(reflectionRemapper, - Reflection.class.getClassLoader()); - - MAPPED_REGISTRY = reflectionProxyFactory.reflectionProxy(MappedRegistryProxy.class); - STRUCTURE_MANAGER = reflectionProxyFactory.reflectionProxy(StructureManagerProxy.class); - REFERENCE = reflectionProxyFactory.reflectionProxy(ReferenceProxy.class); - } - - - @Proxies(MappedRegistry.class) - public interface MappedRegistryProxy { - @FieldSetter("frozen") - void setFrozen(MappedRegistry instance, boolean frozen); - } - - - @Proxies(StructureManager.class) - public interface StructureManagerProxy { - @FieldGetter("level") - LevelAccessor getLevel(StructureManager instance); - } - - - @Proxies(Holder.Reference.class) - public interface ReferenceProxy { - @MethodName("bindValue") - void invokeBindValue(Reference instance, T value); - } -} diff --git a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/RegistryFetcher.java b/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/RegistryFetcher.java deleted file mode 100644 index ed353eafc..000000000 --- a/platforms/bukkit/nms/v1_19_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R2/RegistryFetcher.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R2; - -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.world.level.biome.Biome; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R2.CraftServer; - - -public class RegistryFetcher { - private static Registry getRegistry(ResourceKey> key) { - CraftServer craftserver = (CraftServer) Bukkit.getServer(); - DedicatedServer dedicatedserver = craftserver.getServer(); - return dedicatedserver - .registryAccess() - .registryOrThrow(key); - } - - public static Registry biomeRegistry() { - return getRegistry(Registries.BIOME); - } -} diff --git a/platforms/bukkit/nms/v1_19_R3/build.gradle.kts b/platforms/bukkit/nms/v1_19_R3/build.gradle.kts deleted file mode 100644 index 4b2ad7d63..000000000 --- a/platforms/bukkit/nms/v1_19_R3/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -apply(plugin = "io.papermc.paperweight.userdev") - -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") -} - -dependencies { - api(project(":platforms:bukkit:common")) - paperDevBundle("1.19.4-R0.1-SNAPSHOT") - implementation("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) -} - -tasks { - assemble { - dependsOn("reobfJar") - } -} \ No newline at end of file diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/AwfulBukkitHacks.java deleted file mode 100644 index b2ac9d28b..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/AwfulBukkitHacks.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import com.google.common.collect.ImmutableMap; -import com.mojang.serialization.Lifecycle; -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.level.biome.Biome; -import org.bukkit.NamespacedKey; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; -import com.dfsek.terra.registry.master.ConfigRegistry; - - -public class AwfulBukkitHacks { - private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); - - private static final Map> terraBiomeMap = new HashMap<>(); - - public static void registerBiomes(ConfigRegistry configRegistry) { - try { - LOGGER.info("Hacking biome registry..."); - WritableRegistry biomeRegistry = (WritableRegistry) RegistryFetcher.biomeRegistry(); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); - - configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { - try { - BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); - NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); - ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = NMSBiomeInjector.createBiome(biome, Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey))); - - ResourceKey delegateKey = ResourceKey.create( - Registries.BIOME, - new ResourceLocation("terra", NMSBiomeInjector.createBiomeID(pack, key)) - ); - - Reference holder = biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - Reflection.REFERENCE.invokeBindValue(holder, platform); // IMPORTANT: bind holder. - - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - })); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - terraBiomeMap - .forEach((vb, terraBiomes) -> - NMSBiomeInjector.getEntry(biomeRegistry, vb).ifPresentOrElse( - vanilla -> terraBiomes.forEach( - tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb).ifPresentOrElse( - terra -> { - LOGGER.debug("{} (vanilla for {}): {}", - vanilla.unwrapKey().orElseThrow().location(), - terra.unwrapKey().orElseThrow().location(), - vanilla.tags().toList()); - vanilla.tags() - .forEach(tag -> collect - .computeIfAbsent(tag, t -> new ArrayList<>()) - .add(terra)); - }, - () -> LOGGER.error("No such biome: {}", tb))), - () -> LOGGER.error("No vanilla biome: {}", vb))); - - biomeRegistry.resetTags(); - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); - - } catch(SecurityException | IllegalArgumentException exception) { - throw new RuntimeException(exception); - } - } -} - diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInfo.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInfo.java deleted file mode 100644 index 816d96068..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.biome.Biome; - -import com.dfsek.terra.api.properties.Properties; - - -public record NMSBiomeInfo(ResourceKey biomeKey) implements Properties { -} diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInjector.java deleted file mode 100644 index 733fd38f4..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeInjector.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -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::getHolder); - } - - 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_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeProvider.java deleted file mode 100644 index ed5ea1589..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSBiomeProvider.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import com.mojang.serialization.Codec; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate.Sampler; -import org.jetbrains.annotations.NotNull; - -import java.util.stream.Stream; - -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; - - -public class NMSBiomeProvider extends BiomeSource { - private final BiomeProvider delegate; - private final long seed; - private final Registry biomeRegistry = RegistryFetcher.biomeRegistry(); - - public NMSBiomeProvider(BiomeProvider delegate, long seed) { - super(); - this.delegate = delegate; - this.seed = seed; - } - - @Override - protected Stream> collectPossibleBiomes() { - return delegate.stream() - .map(biome -> RegistryFetcher.biomeRegistry() - .getHolderOrThrow(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey())); - } - - @Override - protected @NotNull Codec codec() { - return BiomeSource.CODEC; - } - - @Override - public @NotNull Holder getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) { - return biomeRegistry.getHolderOrThrow(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) - .getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()); - } -} diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSChunkGeneratorDelegate.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSChunkGeneratorDelegate.java deleted file mode 100644 index c697bd0c1..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSChunkGeneratorDelegate.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.NoiseColumn; -import net.minecraft.world.level.StructureManager; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.Beardifier; -import net.minecraft.world.level.levelgen.DensityFunction.SinglePointContext; -import net.minecraft.world.level.levelgen.GenerationStep.Carving; -import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.RandomState; -import net.minecraft.world.level.levelgen.blending.Blender; -import org.bukkit.craftbukkit.v1_19_R3.block.data.CraftBlockData; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.info.WorldProperties; -import com.dfsek.terra.bukkit.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.bukkit.world.BukkitWorldProperties; -import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState; - - -public class NMSChunkGeneratorDelegate extends ChunkGenerator { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSChunkGeneratorDelegate.class); - private final com.dfsek.terra.api.world.chunk.generation.ChunkGenerator delegate; - - private final ChunkGenerator vanilla; - private final ConfigPack pack; - - private final long seed; - - public NMSChunkGeneratorDelegate(ChunkGenerator vanilla, ConfigPack pack, NMSBiomeProvider biomeProvider, long seed) { - super(biomeProvider); - this.delegate = pack.getGeneratorProvider().newInstance(pack); - this.vanilla = vanilla; - this.pack = pack; - this.seed = seed; - } - - @Override - protected @NotNull Codec codec() { - return ChunkGenerator.CODEC; - } - - @Override - public void applyCarvers(@NotNull WorldGenRegion chunkRegion, long seed, @NotNull RandomState noiseConfig, @NotNull BiomeManager world, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk, @NotNull Carving carverStep) { - // no-op - } - - @Override - public void buildSurface(@NotNull WorldGenRegion region, @NotNull StructureManager structures, @NotNull RandomState noiseConfig, - @NotNull ChunkAccess chunk) { - // no-op - } - - @Override - public void applyBiomeDecoration(@NotNull WorldGenLevel world, @NotNull ChunkAccess chunk, - @NotNull StructureManager structureAccessor) { - vanilla.applyBiomeDecoration(world, chunk, structureAccessor); - } - - @Override - public void spawnOriginalMobs(@NotNull WorldGenRegion region) { - vanilla.spawnOriginalMobs(region); - } - - @Override - public int getGenDepth() { - return vanilla.getGenDepth(); - } - - @Override - public @NotNull CompletableFuture fillFromNoise(@NotNull Executor executor, @NotNull Blender blender, - @NotNull RandomState noiseConfig, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk) { - return vanilla.fillFromNoise(executor, blender, noiseConfig, structureAccessor, chunk) - .thenApply(c -> { - LevelAccessor level = Reflection.STRUCTURE_MANAGER.getLevel(structureAccessor); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); - if(compatibilityOptions.isBeard()) { - beard(structureAccessor, chunk, new BukkitWorldProperties(level.getMinecraftWorld().getWorld()), - biomeProvider, compatibilityOptions); - } - return c; - }); - } - - private void beard(StructureManager structureAccessor, ChunkAccess chunk, WorldProperties world, BiomeProvider biomeProvider, - PreLoadCompatibilityOptions compatibilityOptions) { - Beardifier structureWeightSampler = Beardifier.forStructuresInChunk(structureAccessor, chunk.getPos()); - double threshold = compatibilityOptions.getBeardThreshold(); - double airThreshold = compatibilityOptions.getAirThreshold(); - int xi = chunk.getPos().x << 4; - int zi = chunk.getPos().z << 4; - for(int x = 0; x < 16; x++) { - for(int z = 0; z < 16; z++) { - int depth = 0; - for(int y = world.getMaxHeight(); y >= world.getMinHeight(); y--) { - double noise = structureWeightSampler.compute(new SinglePointContext(x + xi, y, z + zi)); - if(noise > threshold) { - chunk.setBlockState(new BlockPos(x, y, z), ((CraftBlockData) ((BukkitBlockState) delegate - .getPalette(x + xi, y, z + zi, world, biomeProvider) - .get(depth, x + xi, y, z + zi, world.getSeed())).getHandle()).getState(), false); - depth++; - } else if(noise < airThreshold) { - chunk.setBlockState(new BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), false); - } else { - depth = 0; - } - } - } - } - } - - @Override - public int getSeaLevel() { - return vanilla.getSeaLevel(); - } - - @Override - public int getMinY() { - return vanilla.getMinY(); - } - - @Override - public int getBaseHeight(int x, int z, @NotNull Types heightmap, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - WorldProperties properties = new NMSWorldProperties(seed, world); - int y = properties.getMaxHeight(); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - while(y >= getMinY() && !heightmap.isOpaque().test( - ((CraftBlockData) delegate.getBlock(properties, x, y - 1, z, biomeProvider).getHandle()).getState())) { - y--; - } - return y; - } - - @Override - public @NotNull NoiseColumn getBaseColumn(int x, int z, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - BlockState[] array = new BlockState[world.getHeight()]; - WorldProperties properties = new NMSWorldProperties(seed, world); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - for(int y = properties.getMaxHeight() - 1; y >= properties.getMinHeight(); y--) { - array[y - properties.getMinHeight()] = ((CraftBlockData) delegate.getBlock(properties, x, y, z, biomeProvider) - .getHandle()).getState(); - } - return new NoiseColumn(getMinY(), array); - } - - @Override - public void addDebugScreenInfo(@NotNull List text, @NotNull RandomState noiseConfig, @NotNull BlockPos pos) { - - } -} diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInitializer.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInitializer.java deleted file mode 100644 index 99797e8ab..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInitializer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import org.bukkit.Bukkit; - -import com.dfsek.terra.bukkit.PlatformImpl; -import com.dfsek.terra.bukkit.nms.Initializer; - - -public class NMSInitializer implements Initializer { - @Override - public void initialize(PlatformImpl platform) { - AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); - Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); - } -} diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInjectListener.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInjectListener.java deleted file mode 100644 index 78da74f65..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSInjectListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.chunk.ChunkGenerator; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.WorldInitEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; - - -public class NMSInjectListener implements Listener { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSInjectListener.class); - private static final Set INJECTED = new HashSet<>(); - private static final ReentrantLock INJECT_LOCK = new ReentrantLock(); - - @EventHandler - public void onWorldInit(WorldInitEvent event) { - if(!INJECTED.contains(event.getWorld()) && - event.getWorld().getGenerator() instanceof BukkitChunkGeneratorWrapper bukkitChunkGeneratorWrapper) { - INJECT_LOCK.lock(); - INJECTED.add(event.getWorld()); - LOGGER.info("Preparing to take over the world: {}", event.getWorld().getName()); - CraftWorld craftWorld = (CraftWorld) event.getWorld(); - ServerLevel serverWorld = craftWorld.getHandle(); - - ConfigPack pack = bukkitChunkGeneratorWrapper.getPack(); - - ChunkGenerator vanilla = serverWorld.getChunkSource().getGenerator(); - NMSBiomeProvider provider = new NMSBiomeProvider(pack.getBiomeProvider(), craftWorld.getSeed()); - - serverWorld.getChunkSource().chunkMap.generator = new NMSChunkGeneratorDelegate(vanilla, pack, provider, craftWorld.getSeed()); - - LOGGER.info("Successfully injected into world."); - - INJECT_LOCK.unlock(); - } - } -} diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSWorldProperties.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSWorldProperties.java deleted file mode 100644 index 2cda90452..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/NMSWorldProperties.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import net.minecraft.world.level.LevelHeightAccessor; - -import com.dfsek.terra.api.world.info.WorldProperties; - - -public class NMSWorldProperties implements WorldProperties { - private final long seed; - private final LevelHeightAccessor height; - - public NMSWorldProperties(long seed, LevelHeightAccessor height) { - this.seed = seed; - this.height = height; - } - - @Override - public Object getHandle() { - return height; - } - - @Override - public long getSeed() { - return seed; - } - - @Override - public int getMaxHeight() { - return height.getMaxBuildHeight(); - } - - @Override - public int getMinHeight() { - return height.getMinBuildHeight(); - } -} diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/Reflection.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/Reflection.java deleted file mode 100644 index 43d362ee6..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/Reflection.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.StructureManager; -import xyz.jpenilla.reflectionremapper.ReflectionRemapper; -import xyz.jpenilla.reflectionremapper.proxy.ReflectionProxyFactory; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldGetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldSetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.MethodName; -import xyz.jpenilla.reflectionremapper.proxy.annotation.Proxies; - - -public class Reflection { - public static final MappedRegistryProxy MAPPED_REGISTRY; - public static final StructureManagerProxy STRUCTURE_MANAGER; - - public static final ReferenceProxy REFERENCE; - - static { - ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); - ReflectionProxyFactory reflectionProxyFactory = ReflectionProxyFactory.create(reflectionRemapper, - Reflection.class.getClassLoader()); - - MAPPED_REGISTRY = reflectionProxyFactory.reflectionProxy(MappedRegistryProxy.class); - STRUCTURE_MANAGER = reflectionProxyFactory.reflectionProxy(StructureManagerProxy.class); - REFERENCE = reflectionProxyFactory.reflectionProxy(ReferenceProxy.class); - } - - - @Proxies(MappedRegistry.class) - public interface MappedRegistryProxy { - @FieldSetter("frozen") - void setFrozen(MappedRegistry instance, boolean frozen); - } - - - @Proxies(StructureManager.class) - public interface StructureManagerProxy { - @FieldGetter("level") - LevelAccessor getLevel(StructureManager instance); - } - - - @Proxies(Holder.Reference.class) - public interface ReferenceProxy { - @MethodName("bindValue") - void invokeBindValue(Reference instance, T value); - } -} diff --git a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/RegistryFetcher.java b/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/RegistryFetcher.java deleted file mode 100644 index e033491bb..000000000 --- a/platforms/bukkit/nms/v1_19_R3/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R3/RegistryFetcher.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R3; - -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.world.level.biome.Biome; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R3.CraftServer; - - -public class RegistryFetcher { - private static Registry getRegistry(ResourceKey> key) { - CraftServer craftserver = (CraftServer) Bukkit.getServer(); - DedicatedServer dedicatedserver = craftserver.getServer(); - return dedicatedserver - .registryAccess() - .registryOrThrow(key); - } - - public static Registry biomeRegistry() { - return getRegistry(Registries.BIOME); - } -} diff --git a/platforms/bukkit/nms/v1_20_R1/build.gradle.kts b/platforms/bukkit/nms/v1_20_R1/build.gradle.kts deleted file mode 100644 index c3c0d9809..000000000 --- a/platforms/bukkit/nms/v1_20_R1/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -apply(plugin = "io.papermc.paperweight.userdev") - -repositories { - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") -} - -dependencies { - api(project(":platforms:bukkit:common")) - paperDevBundle("1.20.1-R0.1-SNAPSHOT") - implementation("xyz.jpenilla", "reflection-remapper", Versions.Bukkit.reflectionRemapper) -} - -tasks { - assemble { - dependsOn("reobfJar") - } -} \ No newline at end of file diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/AwfulBukkitHacks.java deleted file mode 100644 index 7994a0074..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/AwfulBukkitHacks.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import com.google.common.collect.ImmutableMap; -import com.mojang.serialization.Lifecycle; -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.level.biome.Biome; -import org.bukkit.NamespacedKey; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; -import com.dfsek.terra.registry.master.ConfigRegistry; - - -public class AwfulBukkitHacks { - private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); - - private static final Map> terraBiomeMap = new HashMap<>(); - - public static void registerBiomes(ConfigRegistry configRegistry) { - try { - LOGGER.info("Hacking biome registry..."); - WritableRegistry biomeRegistry = (WritableRegistry) RegistryFetcher.biomeRegistry(); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); - - configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { - try { - BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); - NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); - ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = NMSBiomeInjector.createBiome(biome, Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey))); - - ResourceKey delegateKey = ResourceKey.create( - Registries.BIOME, - new ResourceLocation("terra", NMSBiomeInjector.createBiomeID(pack, key)) - ); - - Reference holder = biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - Reflection.REFERENCE.invokeBindValue(holder, platform); // IMPORTANT: bind holder. - - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - })); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - terraBiomeMap - .forEach((vb, terraBiomes) -> - NMSBiomeInjector.getEntry(biomeRegistry, vb).ifPresentOrElse( - vanilla -> terraBiomes.forEach( - tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb).ifPresentOrElse( - terra -> { - LOGGER.debug("{} (vanilla for {}): {}", - vanilla.unwrapKey().orElseThrow().location(), - terra.unwrapKey().orElseThrow().location(), - vanilla.tags().toList()); - vanilla.tags() - .forEach(tag -> collect - .computeIfAbsent(tag, t -> new ArrayList<>()) - .add(terra)); - }, - () -> LOGGER.error("No such biome: {}", tb))), - () -> LOGGER.error("No vanilla biome: {}", vb))); - - biomeRegistry.resetTags(); - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); - - } catch(SecurityException | IllegalArgumentException exception) { - throw new RuntimeException(exception); - } - } -} - diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInfo.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInfo.java deleted file mode 100644 index 7d8203ce3..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.biome.Biome; - -import com.dfsek.terra.api.properties.Properties; - - -public record NMSBiomeInfo(ResourceKey biomeKey) implements Properties { -} diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInjector.java deleted file mode 100644 index 8c13d05b1..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeInjector.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -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::getHolder); - } - - 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_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeProvider.java deleted file mode 100644 index 48f048318..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSBiomeProvider.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import com.mojang.serialization.Codec; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.biome.Climate.Sampler; -import org.jetbrains.annotations.NotNull; - -import java.util.stream.Stream; - -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; - - -public class NMSBiomeProvider extends BiomeSource { - private final BiomeProvider delegate; - private final long seed; - private final Registry biomeRegistry = RegistryFetcher.biomeRegistry(); - - public NMSBiomeProvider(BiomeProvider delegate, long seed) { - super(); - this.delegate = delegate; - this.seed = seed; - } - - @Override - protected Stream> collectPossibleBiomes() { - return delegate.stream() - .map(biome -> RegistryFetcher.biomeRegistry() - .getHolderOrThrow(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey())); - } - - @Override - protected @NotNull Codec codec() { - return BiomeSource.CODEC; - } - - @Override - public @NotNull Holder getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) { - return biomeRegistry.getHolderOrThrow(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) - .getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()); - } -} diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSChunkGeneratorDelegate.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSChunkGeneratorDelegate.java deleted file mode 100644 index 565d0cbc4..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSChunkGeneratorDelegate.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.NoiseColumn; -import net.minecraft.world.level.StructureManager; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.Beardifier; -import net.minecraft.world.level.levelgen.DensityFunction.SinglePointContext; -import net.minecraft.world.level.levelgen.GenerationStep.Carving; -import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.RandomState; -import net.minecraft.world.level.levelgen.blending.Blender; -import org.bukkit.craftbukkit.v1_20_R1.block.data.CraftBlockData; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.info.WorldProperties; -import com.dfsek.terra.bukkit.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.bukkit.world.BukkitWorldProperties; -import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState; - - -public class NMSChunkGeneratorDelegate extends ChunkGenerator { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSChunkGeneratorDelegate.class); - private final com.dfsek.terra.api.world.chunk.generation.ChunkGenerator delegate; - - private final ChunkGenerator vanilla; - private final ConfigPack pack; - - private final long seed; - - public NMSChunkGeneratorDelegate(ChunkGenerator vanilla, ConfigPack pack, NMSBiomeProvider biomeProvider, long seed) { - super(biomeProvider); - this.delegate = pack.getGeneratorProvider().newInstance(pack); - this.vanilla = vanilla; - this.pack = pack; - this.seed = seed; - } - - @Override - protected @NotNull Codec codec() { - return ChunkGenerator.CODEC; - } - - @Override - public void applyCarvers(@NotNull WorldGenRegion chunkRegion, long seed, @NotNull RandomState noiseConfig, @NotNull BiomeManager world, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk, @NotNull Carving carverStep) { - // no-op - } - - @Override - public void buildSurface(@NotNull WorldGenRegion region, @NotNull StructureManager structures, @NotNull RandomState noiseConfig, - @NotNull ChunkAccess chunk) { - // no-op - } - - @Override - public void applyBiomeDecoration(@NotNull WorldGenLevel world, @NotNull ChunkAccess chunk, - @NotNull StructureManager structureAccessor) { - vanilla.applyBiomeDecoration(world, chunk, structureAccessor); - } - - @Override - public void spawnOriginalMobs(@NotNull WorldGenRegion region) { - vanilla.spawnOriginalMobs(region); - } - - @Override - public int getGenDepth() { - return vanilla.getGenDepth(); - } - - @Override - public @NotNull CompletableFuture fillFromNoise(@NotNull Executor executor, @NotNull Blender blender, - @NotNull RandomState noiseConfig, - @NotNull StructureManager structureAccessor, @NotNull ChunkAccess chunk) { - return vanilla.fillFromNoise(executor, blender, noiseConfig, structureAccessor, chunk) - .thenApply(c -> { - LevelAccessor level = Reflection.STRUCTURE_MANAGER.getLevel(structureAccessor); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); - if(compatibilityOptions.isBeard()) { - beard(structureAccessor, chunk, new BukkitWorldProperties(level.getMinecraftWorld().getWorld()), - biomeProvider, compatibilityOptions); - } - return c; - }); - } - - private void beard(StructureManager structureAccessor, ChunkAccess chunk, WorldProperties world, BiomeProvider biomeProvider, - PreLoadCompatibilityOptions compatibilityOptions) { - Beardifier structureWeightSampler = Beardifier.forStructuresInChunk(structureAccessor, chunk.getPos()); - double threshold = compatibilityOptions.getBeardThreshold(); - double airThreshold = compatibilityOptions.getAirThreshold(); - int xi = chunk.getPos().x << 4; - int zi = chunk.getPos().z << 4; - for(int x = 0; x < 16; x++) { - for(int z = 0; z < 16; z++) { - int depth = 0; - for(int y = world.getMaxHeight(); y >= world.getMinHeight(); y--) { - double noise = structureWeightSampler.compute(new SinglePointContext(x + xi, y, z + zi)); - if(noise > threshold) { - chunk.setBlockState(new BlockPos(x, y, z), ((CraftBlockData) ((BukkitBlockState) delegate - .getPalette(x + xi, y, z + zi, world, biomeProvider) - .get(depth, x + xi, y, z + zi, world.getSeed())).getHandle()).getState(), false); - depth++; - } else if(noise < airThreshold) { - chunk.setBlockState(new BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), false); - } else { - depth = 0; - } - } - } - } - } - - @Override - public int getSeaLevel() { - return vanilla.getSeaLevel(); - } - - @Override - public int getMinY() { - return vanilla.getMinY(); - } - - @Override - public int getBaseHeight(int x, int z, @NotNull Types heightmap, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - WorldProperties properties = new NMSWorldProperties(seed, world); - int y = properties.getMaxHeight(); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - while(y >= getMinY() && !heightmap.isOpaque().test( - ((CraftBlockData) delegate.getBlock(properties, x, y - 1, z, biomeProvider).getHandle()).getState())) { - y--; - } - return y; - } - - @Override - public @NotNull NoiseColumn getBaseColumn(int x, int z, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) { - BlockState[] array = new BlockState[world.getHeight()]; - WorldProperties properties = new NMSWorldProperties(seed, world); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - for(int y = properties.getMaxHeight() - 1; y >= properties.getMinHeight(); y--) { - array[y - properties.getMinHeight()] = ((CraftBlockData) delegate.getBlock(properties, x, y, z, biomeProvider) - .getHandle()).getState(); - } - return new NoiseColumn(getMinY(), array); - } - - @Override - public void addDebugScreenInfo(@NotNull List text, @NotNull RandomState noiseConfig, @NotNull BlockPos pos) { - - } -} diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInitializer.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInitializer.java deleted file mode 100644 index 6fb689ee7..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInitializer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import org.bukkit.Bukkit; - -import com.dfsek.terra.bukkit.PlatformImpl; -import com.dfsek.terra.bukkit.nms.Initializer; - - -public class NMSInitializer implements Initializer { - @Override - public void initialize(PlatformImpl platform) { - AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); - Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); - } -} diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInjectListener.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInjectListener.java deleted file mode 100644 index 3f7c9e060..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSInjectListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.chunk.ChunkGenerator; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.world.WorldInitEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; - - -public class NMSInjectListener implements Listener { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSInjectListener.class); - private static final Set INJECTED = new HashSet<>(); - private static final ReentrantLock INJECT_LOCK = new ReentrantLock(); - - @EventHandler - public void onWorldInit(WorldInitEvent event) { - if(!INJECTED.contains(event.getWorld()) && - event.getWorld().getGenerator() instanceof BukkitChunkGeneratorWrapper bukkitChunkGeneratorWrapper) { - INJECT_LOCK.lock(); - INJECTED.add(event.getWorld()); - LOGGER.info("Preparing to take over the world: {}", event.getWorld().getName()); - CraftWorld craftWorld = (CraftWorld) event.getWorld(); - ServerLevel serverWorld = craftWorld.getHandle(); - - ConfigPack pack = bukkitChunkGeneratorWrapper.getPack(); - - ChunkGenerator vanilla = serverWorld.getChunkSource().getGenerator(); - NMSBiomeProvider provider = new NMSBiomeProvider(pack.getBiomeProvider(), craftWorld.getSeed()); - - serverWorld.getChunkSource().chunkMap.generator = new NMSChunkGeneratorDelegate(vanilla, pack, provider, craftWorld.getSeed()); - - LOGGER.info("Successfully injected into world."); - - INJECT_LOCK.unlock(); - } - } -} diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSWorldProperties.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSWorldProperties.java deleted file mode 100644 index 48effeb5f..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/NMSWorldProperties.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import net.minecraft.world.level.LevelHeightAccessor; - -import com.dfsek.terra.api.world.info.WorldProperties; - - -public class NMSWorldProperties implements WorldProperties { - private final long seed; - private final LevelHeightAccessor height; - - public NMSWorldProperties(long seed, LevelHeightAccessor height) { - this.seed = seed; - this.height = height; - } - - @Override - public Object getHandle() { - return height; - } - - @Override - public long getSeed() { - return seed; - } - - @Override - public int getMaxHeight() { - return height.getMaxBuildHeight(); - } - - @Override - public int getMinHeight() { - return height.getMinBuildHeight(); - } -} diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/Reflection.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/Reflection.java deleted file mode 100644 index a11dd1b15..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/Reflection.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.StructureManager; -import xyz.jpenilla.reflectionremapper.ReflectionRemapper; -import xyz.jpenilla.reflectionremapper.proxy.ReflectionProxyFactory; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldGetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldSetter; -import xyz.jpenilla.reflectionremapper.proxy.annotation.MethodName; -import xyz.jpenilla.reflectionremapper.proxy.annotation.Proxies; - - -public class Reflection { - public static final MappedRegistryProxy MAPPED_REGISTRY; - public static final StructureManagerProxy STRUCTURE_MANAGER; - - public static final ReferenceProxy REFERENCE; - - static { - ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); - ReflectionProxyFactory reflectionProxyFactory = ReflectionProxyFactory.create(reflectionRemapper, - Reflection.class.getClassLoader()); - - MAPPED_REGISTRY = reflectionProxyFactory.reflectionProxy(MappedRegistryProxy.class); - STRUCTURE_MANAGER = reflectionProxyFactory.reflectionProxy(StructureManagerProxy.class); - REFERENCE = reflectionProxyFactory.reflectionProxy(ReferenceProxy.class); - } - - - @Proxies(MappedRegistry.class) - public interface MappedRegistryProxy { - @FieldSetter("frozen") - void setFrozen(MappedRegistry instance, boolean frozen); - } - - - @Proxies(StructureManager.class) - public interface StructureManagerProxy { - @FieldGetter("level") - LevelAccessor getLevel(StructureManager instance); - } - - - @Proxies(Holder.Reference.class) - public interface ReferenceProxy { - @MethodName("bindValue") - void invokeBindValue(Reference instance, T value); - } -} diff --git a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/RegistryFetcher.java b/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/RegistryFetcher.java deleted file mode 100644 index c7d77462d..000000000 --- a/platforms/bukkit/nms/v1_20_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R1/RegistryFetcher.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R1; - -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.world.level.biome.Biome; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_20_R1.CraftServer; - - -public class RegistryFetcher { - private static Registry getRegistry(ResourceKey> key) { - CraftServer craftserver = (CraftServer) Bukkit.getServer(); - DedicatedServer dedicatedserver = craftserver.getServer(); - return dedicatedserver - .registryAccess() - .registryOrThrow(key); - } - - public static Registry biomeRegistry() { - return getRegistry(Registries.BIOME); - } -} From 94bf67d09dc062efeb14757c812e4e252b125725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Fri, 17 Nov 2023 14:57:14 -0700 Subject: [PATCH 05/16] fix dev env by having fabric api at runtime --- platforms/fabric/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 3b977d8af..3598ae92c 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -29,6 +29,8 @@ dependencies { modImplementation("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) include("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) + + modRuntimeOnly("net.fabricmc.fabric-api", "fabric-api", Versions.Fabric.fabricAPI) } loom { From 82fbf796da35a0ed0f2c8d5c4ad7f10fc8313311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Fri, 17 Nov 2023 15:26:53 -0700 Subject: [PATCH 06/16] Refractor BiomeUtil --- .../com/dfsek/terra/forge/util/BiomeUtil.java | 6 +- .../java/com/dfsek/terra/mod/ModPlatform.java | 1 - .../com/dfsek/terra/mod/util/BiomeUtil.java | 108 ++++++++++++++++++ .../dfsek/terra/mod/util/MinecraftUtil.java | 89 +-------------- .../com/dfsek/terra/mod/util/TagUtil.java | 2 +- .../terra/lifecycle/LifecyclePlatform.java | 4 +- ...BiomeUtil.java => LifecycleBiomeUtil.java} | 14 ++- .../terra/lifecycle/util/LifecycleUtil.java | 2 +- 8 files changed, 124 insertions(+), 102 deletions(-) create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java rename platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/{BiomeUtil.java => LifecycleBiomeUtil.java} (86%) 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/ModPlatform.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java index 3a86a05ac..bb4a68f75 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java @@ -90,7 +90,6 @@ public abstract class ModPlatform extends AbstractPlatform { .registerLoader(EntityType.class, EntityTypeTemplate::new) .registerLoader(SpawnCostConfig.class, SpawnCostConfig::new) .registerLoader(SpawnEntry.class, SpawnEntryTemplate::new) - .registerLoader(SpawnGroup.class, SpawnGroupTemplate::new) .registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new) .registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new) .registerLoader(VillagerType.class, VillagerTypeTemplate::new); 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..0352e3089 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java @@ -0,0 +1,108 @@ +package com.dfsek.terra.mod.util; + +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.mixin.access.BiomeAccessor; + +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 net.minecraft.world.biome.GenerationSettings; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + + +public class BiomeUtil { + public static final Map> + TERRA_BIOME_MAP = new HashMap<>(); + 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); + } + + 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 692d0da5a..674f5b5bb 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 @@ -38,8 +38,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() { @@ -65,7 +63,7 @@ public final class MinecraftUtil { public static void registerFlora(Registry biomes) { logger.info("Injecting flora into Terra biomes..."); - TERRA_BIOME_MAP + BiomeUtil.TERRA_BIOME_MAP .forEach((vb, terraBiomes) -> biomes.getOrEmpty(vb) .ifPresentOrElse(vanilla -> terraBiomes @@ -88,92 +86,7 @@ public final class MinecraftUtil { } - public static Map> getTerraBiomeMap() { - return Map.copyOf(TERRA_BIOME_MAP); - } - public static RegistryKey registerKey(Identifier identifier) { return RegistryKey.of(RegistryKeys.BIOME, 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 36ed6afea..31cc3fb53 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 @@ -54,7 +54,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 be845eb19..0ef9a0ee3 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 @@ -22,7 +22,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; @@ -68,7 +68,7 @@ public abstract class LifecyclePlatform extends ModPlatform { if(server != null) { - BiomeUtil.registerBiomes(server.getRegistryManager().get(RegistryKeys.BIOME)); + LifecycleBiomeUtil.registerBiomes(server.getRegistryManager().get(RegistryKeys.BIOME)); server.reloadResources(server.getDataPackManager().getNames()).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 5d5ab11c0..da373795e 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(biome, Objects.requireNonNull(registry.get(vanilla)), vanillaBiomeProperties); - Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); + Identifier identifier = new Identifier("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 a251bedbd..f9427dfa5 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 @@ -18,7 +18,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)); } From 0efb0916e6d060851988d4fea2acdd1a7e8ce027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Fri, 17 Nov 2023 16:16:18 -0700 Subject: [PATCH 07/16] Initial Bukkit Biome Config --- .../config/BiomeAdditionsSoundTemplate.java | 28 +++ .../config/BiomeMoodSoundTemplate.java | 36 ++++ .../config/BiomeParticleConfigTemplate.java | 34 ++++ .../v1_20_R2/config/EntityTypeTemplate.java | 21 +++ .../v1_20_R2/config/MusicSoundTemplate.java | 36 ++++ .../v1_20_R2/config/SoundEventTemplate.java | 29 +++ .../nms/v1_20_R2/config/SpawnCostConfig.java | 38 ++++ .../v1_20_R2/config/SpawnEntryTemplate.java | 31 ++++ .../config/SpawnSettingsTemplate.java | 57 ++++++ .../nms/v1_20_R2/config/SpawnTypeConfig.java | 42 +++++ .../config/VanillaBiomeProperties.java | 174 ++++++++++++++++++ .../v1_20_R2/config/VillagerTypeTemplate.java | 23 +++ .../mod/config/SpawnSettingsTemplate.java | 1 + .../mod/config/VanillaBiomeProperties.java | 2 +- 14 files changed, 551 insertions(+), 1 deletion(-) create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeAdditionsSoundTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeMoodSoundTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeParticleConfigTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/EntityTypeTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/MusicSoundTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SoundEventTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnCostConfig.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnEntryTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnSettingsTemplate.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnTypeConfig.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VanillaBiomeProperties.java create mode 100644 platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VillagerTypeTemplate.java diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeAdditionsSoundTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeAdditionsSoundTemplate.java new file mode 100644 index 000000000..7a7ab41e3 --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeAdditionsSoundTemplate.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeMoodSoundTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeMoodSoundTemplate.java new file mode 100644 index 000000000..6740f8d4d --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeMoodSoundTemplate.java @@ -0,0 +1,36 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeParticleConfigTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeParticleConfigTemplate.java new file mode 100644 index 000000000..458ce5630 --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeParticleConfigTemplate.java @@ -0,0 +1,34 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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.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), BuiltInRegistries.PARTICLE_TYPE.asLookup()), probability); + } catch(CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/EntityTypeTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/EntityTypeTemplate.java new file mode 100644 index 000000000..4d62dea6d --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/EntityTypeTemplate.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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.Registry; +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); + } +} diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/MusicSoundTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/MusicSoundTemplate.java new file mode 100644 index 000000000..2ce9d5461 --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/MusicSoundTemplate.java @@ -0,0 +1,36 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SoundEventTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SoundEventTemplate.java new file mode 100644 index 000000000..259932499 --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SoundEventTemplate.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnCostConfig.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnCostConfig.java new file mode 100644 index 000000000..68bc92fa7 --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnCostConfig.java @@ -0,0 +1,38 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnEntryTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnEntryTemplate.java new file mode 100644 index 000000000..9671c5798 --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnEntryTemplate.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnSettingsTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnSettingsTemplate.java new file mode 100644 index 000000000..9895d385a --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnSettingsTemplate.java @@ -0,0 +1,57 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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(); + if (spawn.getEntries() != null) { + for(SpawnerData entry : spawn.getEntries()) { + builder.addSpawn(group, entry); + } + } else if (spawn.getEntry() != null) { + if(!used) { + logger.warn("The entry sub-field of spawns is deprecated. " + + "It is recommended to use the entries sub-field instead."); + used = true; + } + } + } + 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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnTypeConfig.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnTypeConfig.java new file mode 100644 index 000000000..78c986805 --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnTypeConfig.java @@ -0,0 +1,42 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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; + + @Value("entry") + @Default + @Deprecated + private SpawnerData entry = null; + + public MobCategory getGroup() { + return group; + } + + public List getEntries() { + return entries; + } + + @Deprecated + public SpawnerData getEntry() { + return entry; + } + + @Override + public SpawnTypeConfig get() { + return this; + } +} \ No newline at end of file diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VanillaBiomeProperties.java new file mode 100644 index 000000000..6cd9618ff --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VanillaBiomeProperties.java @@ -0,0 +1,174 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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 java.util.List; +import net.minecraft.resources.ResourceLocation; +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.Precipitation; +import net.minecraft.world.level.biome.Biome.TemperatureModifier; +import net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier; +import net.minecraft.world.level.biome.MobSpawnSettings; +import com.dfsek.terra.api.properties.Properties; + + +public class VanillaBiomeProperties implements ConfigTemplate, Properties { + + @Value("tags") + @Default + private List tags = null; + + @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 = null; + + @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 List getTags() { + return tags; + } + + public Integer getGrassColor() { + return grassColor; + } + + public Integer getFogColor() { + return fogColor; + } + + public Integer getWaterColor() { + return waterColor; + } + + public Integer getWaterFogColor() { + return waterFogColor; + } + + public Integer getFoliageColor() { + return foliageColor; + } + + 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_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VillagerTypeTemplate.java b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VillagerTypeTemplate.java new file mode 100644 index 000000000..6e022851d --- /dev/null +++ b/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VillagerTypeTemplate.java @@ -0,0 +1,23 @@ +package com.dfsek.terra.bukkit.nms.v1_20_R2.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.Registry; +import net.minecraft.core.RegistryCodecs; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +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); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java index d05a84834..919f60d38 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java @@ -16,6 +16,7 @@ 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; 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 From 16d8e8f29d2cb9b23af81ad5367b30a104d36ce0 Mon Sep 17 00:00:00 2001 From: Zoe Gidiere Date: Sat, 12 Oct 2024 14:49:53 -0600 Subject: [PATCH 08/16] Fix up merge --- .../v1_21}/config/BiomeAdditionsSoundTemplate.java | 2 +- .../nms/v1_21}/config/BiomeMoodSoundTemplate.java | 2 +- .../v1_21}/config/BiomeParticleConfigTemplate.java | 6 ++++-- .../nms/v1_21}/config/EntityTypeTemplate.java | 2 +- .../nms/v1_21}/config/MusicSoundTemplate.java | 2 +- .../nms/v1_21}/config/SoundEventTemplate.java | 2 +- .../bukkit/nms/v1_21}/config/SpawnCostConfig.java | 2 +- .../nms/v1_21}/config/SpawnEntryTemplate.java | 2 +- .../nms/v1_21}/config/SpawnSettingsTemplate.java | 14 +++----------- .../bukkit/nms/v1_21}/config/SpawnTypeConfig.java | 12 +----------- .../nms/v1_21}/config/VanillaBiomeProperties.java | 2 +- .../nms/v1_21}/config/VillagerTypeTemplate.java | 2 +- 12 files changed, 17 insertions(+), 33 deletions(-) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/BiomeAdditionsSoundTemplate.java (94%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/BiomeMoodSoundTemplate.java (95%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/BiomeParticleConfigTemplate.java (82%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/EntityTypeTemplate.java (92%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/MusicSoundTemplate.java (95%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/SoundEventTemplate.java (94%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/SpawnCostConfig.java (94%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/SpawnEntryTemplate.java (94%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/SpawnSettingsTemplate.java (73%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/SpawnTypeConfig.java (78%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/VanillaBiomeProperties.java (98%) rename platforms/bukkit/nms/{v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2 => v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21}/config/VillagerTypeTemplate.java (93%) diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeAdditionsSoundTemplate.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeAdditionsSoundTemplate.java similarity index 94% rename from platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeAdditionsSoundTemplate.java rename to platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeAdditionsSoundTemplate.java index 7a7ab41e3..3f91d4a26 100644 --- a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeAdditionsSoundTemplate.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeAdditionsSoundTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R2.config; +package com.dfsek.terra.bukkit.nms.v1_21.config; import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Value; diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeMoodSoundTemplate.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeMoodSoundTemplate.java similarity index 95% rename from platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeMoodSoundTemplate.java rename to platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeMoodSoundTemplate.java index 6740f8d4d..cf9e5ee76 100644 --- a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeMoodSoundTemplate.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeMoodSoundTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R2.config; +package com.dfsek.terra.bukkit.nms.v1_21.config; import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Value; diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeParticleConfigTemplate.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java similarity index 82% rename from platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeParticleConfigTemplate.java rename to platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java index 458ce5630..f707e0565 100644 --- a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/BiomeParticleConfigTemplate.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R2.config; +package com.dfsek.terra.bukkit.nms.v1_21.config; import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Value; @@ -6,6 +6,7 @@ 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; @@ -26,7 +27,8 @@ public class BiomeParticleConfigTemplate implements ObjectTemplate { MobSpawnSettings.Builder builder = new MobSpawnSettings.Builder(); for(SpawnTypeConfig spawn : spawns) { MobCategory group = spawn.getGroup(); - if (spawn.getEntries() != null) { - for(SpawnerData entry : spawn.getEntries()) { - builder.addSpawn(group, entry); - } - } else if (spawn.getEntry() != null) { - if(!used) { - logger.warn("The entry sub-field of spawns is deprecated. " + - "It is recommended to use the entries sub-field instead."); - used = true; - } + for(SpawnerData entry : spawn.getEntries()) { + builder.addSpawn(group, entry); } } for(SpawnCostConfig cost : costs) { diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnTypeConfig.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnTypeConfig.java similarity index 78% rename from platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnTypeConfig.java rename to platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnTypeConfig.java index 78c986805..835853236 100644 --- a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/SpawnTypeConfig.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnTypeConfig.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R2.config; +package com.dfsek.terra.bukkit.nms.v1_21.config; import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Value; @@ -17,11 +17,6 @@ public class SpawnTypeConfig implements ObjectTemplate { @Default private List entries = null; - @Value("entry") - @Default - @Deprecated - private SpawnerData entry = null; - public MobCategory getGroup() { return group; } @@ -30,11 +25,6 @@ public class SpawnTypeConfig implements ObjectTemplate { return entries; } - @Deprecated - public SpawnerData getEntry() { - return entry; - } - @Override public SpawnTypeConfig get() { return this; diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java similarity index 98% rename from platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VanillaBiomeProperties.java rename to platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java index 6cd9618ff..19dbda5f7 100644 --- a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VanillaBiomeProperties.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R2.config; +package com.dfsek.terra.bukkit.nms.v1_21.config; import com.dfsek.tectonic.api.config.template.ConfigTemplate; import com.dfsek.tectonic.api.config.template.annotations.Default; diff --git a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VillagerTypeTemplate.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java similarity index 93% rename from platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VillagerTypeTemplate.java rename to platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java index 6e022851d..a5dd41b14 100644 --- a/platforms/bukkit/nms/v1_20_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_20_R2/config/VillagerTypeTemplate.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_20_R2.config; +package com.dfsek.terra.bukkit.nms.v1_21.config; import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Value; From d45256b2f769447a6d698a08a3d41353e8450cf4 Mon Sep 17 00:00:00 2001 From: Zoe Gidiere Date: Sat, 12 Oct 2024 14:52:11 -0600 Subject: [PATCH 09/16] Another merge fixup --- .../com/dfsek/terra/mod/config/SpawnSettingsTemplate.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java index e0a7a3598..a0e8932e5 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnSettingsTemplate.java @@ -11,10 +11,6 @@ import java.util.List; 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; From 8de4f1198a584201351159c869fad01452ca38ab Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Sat, 26 Oct 2024 10:02:32 +0100 Subject: [PATCH 10/16] Started adding more biome settings to bukkit --- .../com/dfsek/terra/bukkit/BukkitAddon.java | 15 +- .../bukkit/config/VanillaBiomeProperties.java | 58 ------- .../dfsek/terra/bukkit/nms/Initializer.java | 4 +- .../terra/bukkit/nms/v1_21/NMSAddon.java | 31 ++++ .../bukkit/nms/v1_21/NMSBiomeInjector.java | 70 +++++--- .../bukkit/nms/v1_21/RegistryFetcher.java | 5 + .../v1_21/config/VanillaBiomeProperties.java | 164 ++++++++++++++++++ 7 files changed, 250 insertions(+), 97 deletions(-) delete mode 100644 platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/config/VanillaBiomeProperties.java create mode 100644 platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java create mode 100644 platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java 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/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..b39b67d6b 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 @@ -15,8 +15,8 @@ public interface Initializer { Logger logger = LoggerFactory.getLogger(Initializer.class); try { String packageVersion = NMS; - if(NMS.equals("v1_21_1")) { - packageVersion = "v1_21"; + if(NMS.equals("v1_21_3")) { + packageVersion = "v1_21"; // TODO: Refactor nms package to v1_21_3 } Class initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer"); diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java new file mode 100644 index 000000000..2c7944d12 --- /dev/null +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.bukkit.nms.v1_21; + +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.config.VanillaBiomeProperties; + + +public class NMSAddon extends BukkitAddon { + + public NMSAddon(PlatformImpl terraBukkitPlugin) { + super(terraBukkitPlugin); + } + + @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/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java index 8dea43a32..fbe937127 100644 --- 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 @@ -11,7 +11,7 @@ import java.util.Objects; import java.util.Optional; import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.config.VanillaBiomeProperties; +import com.dfsek.terra.bukkit.nms.v1_21.config.VanillaBiomeProperties; public class NMSBiomeInjector { @@ -26,17 +26,8 @@ public class NMSBiomeInjector { 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())) @@ -45,13 +36,11 @@ public class NMSBiomeInjector { .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) - .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())); + .skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor())) - if(vanillaBiomeProperties.getFoliageColor() == null) { - vanilla.getSpecialEffects().getFoliageColorOverride().ifPresent(effects::foliageColorOverride); - } else { - effects.foliageColorOverride(vanillaBiomeProperties.getFoliageColor()); - } + .grassColorModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getSpecialEffects().getGrassColorModifier())) + + .foliageColorOverride(Objects.requireNonNullElse(vanillaBiomeProperties.getFoliageColor(), vanilla.getFoliageColor())); if(vanillaBiomeProperties.getGrassColor() == null) { vanilla.getSpecialEffects().getGrassColorOverride().ifPresent(effects::grassColorOverride); @@ -60,15 +49,50 @@ public class NMSBiomeInjector { 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); + if(vanillaBiomeProperties.getParticleConfig() == null) { + vanilla.getSpecialEffects().getAmbientParticleSettings().ifPresent(effects::ambientParticle); + } else { + effects.ambientParticle(vanillaBiomeProperties.getParticleConfig()); + } - builder.specialEffects(effects.build()); + if(vanillaBiomeProperties.getLoopSound() == null) { + vanilla.getSpecialEffects().getAmbientLoopSoundEvent().ifPresent(effects::ambientLoopSound); + } else { + RegistryFetcher.soundEventRegistry().get(vanillaBiomeProperties.getLoopSound().location()).ifPresent(effects::ambientLoopSound); + } - return builder.build(); + 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) { 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java index eecc28047..249703ca8 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/RegistryFetcher.java @@ -4,6 +4,7 @@ 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java new file mode 100644 index 000000000..2fbf119a8 --- /dev/null +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java @@ -0,0 +1,164 @@ +package com.dfsek.terra.bukkit.nms.v1_21.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; + } +} From 16c951838be6b76dd42979d4c5adecbe392b1e82 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Mon, 28 Oct 2024 17:39:25 +0800 Subject: [PATCH 11/16] feat: support world unloading --- buildSrc/src/main/kotlin/Versions.kt | 2 +- .../com/dfsek/terra/allay/TerraAllayPlugin.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 7ddbe4e32..e0c342bea 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()); + } } From afd2c81b1909151c8de16e6dd7b58a839ddc9c31 Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Tue, 29 Oct 2024 18:31:37 +0000 Subject: [PATCH 12/16] Made grass colour use default if none is defined --- .../terra/bukkit/nms/v1_21/NMSBiomeInjector.java | 13 +------------ .../dfsek/terra/bukkit/nms/v1_21/Reflection.java | 10 ++++++++++ .../com/dfsek/terra/mod/util/MinecraftUtil.java | 6 +++--- 3 files changed, 14 insertions(+), 15 deletions(-) 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 index fbe937127..d525f591e 100644 --- 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 @@ -31,24 +31,13 @@ public class NMSBiomeInjector { 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())) - .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.getGrassColor() == null) { - vanilla.getSpecialEffects().getGrassColorOverride().ifPresent(effects::grassColorOverride); - } else { - // grass - effects.grassColorOverride(vanillaBiomeProperties.getGrassColor()); - } - if(vanillaBiomeProperties.getParticleConfig() == null) { vanilla.getSpecialEffects().getAmbientParticleSettings().ifPresent(effects::ambientParticle); } else { 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java index 13078e94d..8d29b5158 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/Reflection.java @@ -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/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 7351eea9b..cf40eecd5 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 @@ -107,9 +107,9 @@ public final class MinecraftUtil { .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())); + .grassColorModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), vanilla.getEffects().getGrassColorModifier())) + .grassColor(Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColor(), vanilla.getEffects().getGrassColor().orElseGet(vanilla.getDefaultGrassColor()))) + .foliageColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFoliageColor(), vanilla.getFoliageColor())); if(vanillaBiomeProperties.getFoliageColor() == null) { vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); From 8df3a4dd029c3195923b5be4986e409a42ec0a73 Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Tue, 29 Oct 2024 19:38:59 +0000 Subject: [PATCH 13/16] Added NMSAddon override for BukkitAddon --- .../com/dfsek/terra/bukkit/PlatformImpl.java | 5 ++- .../dfsek/terra/bukkit/nms/Initializer.java | 45 +++++++++++++------ .../terra/bukkit/nms/v1_21/NMSAddon.java | 4 +- .../bukkit/nms/v1_21/NMSInitializer.java | 7 +++ 4 files changed, 45 insertions(+), 16 deletions(-) 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 f26698b39..68ba921ad 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; @@ -96,7 +99,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/nms/Initializer.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java index b39b67d6b..c29fa1e1b 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_3")) { - packageVersion = "v1_21"; // TODO: Refactor nms package to v1_21_3 - } - 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,34 @@ 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; + if(NMS.equals("v1_21_3")) { + packageVersion = "v1_21"; // TODO: Refactor nms package to v1_21_3 + } + + 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/NMSAddon.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java index 2c7944d12..55be58c3b 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java @@ -10,8 +10,8 @@ import com.dfsek.terra.bukkit.nms.v1_21.config.VanillaBiomeProperties; public class NMSAddon extends BukkitAddon { - public NMSAddon(PlatformImpl terraBukkitPlugin) { - super(terraBukkitPlugin); + public NMSAddon(PlatformImpl platform) { + super(platform); } @Override 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java index 18f1a058f..9e9ed7499 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.nms.v1_21; +import com.dfsek.terra.bukkit.BukkitAddon; + import org.bukkit.Bukkit; import com.dfsek.terra.bukkit.PlatformImpl; @@ -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); + } } From 9d91440997133d06dd2ad9647456a103a4d9bc43 Mon Sep 17 00:00:00 2001 From: Zoe Gidiere Date: Tue, 29 Oct 2024 14:14:25 -0600 Subject: [PATCH 14/16] fixup --- .../terra/mod/mixin/invoke/BiomeInvoker.java | 12 ++++++ .../com/dfsek/terra/mod/util/BiomeUtil.java | 37 +++++++------------ 2 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/invoke/BiomeInvoker.java 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 index 0352e3089..44e6ddaf4 100644 --- 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 @@ -1,15 +1,10 @@ package com.dfsek.terra.mod.util; -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.mod.config.VanillaBiomeProperties; -import com.dfsek.terra.mod.mixin.access.BiomeAccessor; - 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 net.minecraft.world.biome.GenerationSettings; import java.util.HashMap; import java.util.List; @@ -17,37 +12,33 @@ 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(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla, - VanillaBiomeProperties vanillaBiomeProperties) { - GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); + + public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) { BiomeEffects.Builder effects = new BiomeEffects.Builder(); net.minecraft.world.biome.Biome.Builder builder = new Builder(); + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + 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()); - } + 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); @@ -93,7 +84,7 @@ public class BiomeUtil { return builder .effects(effects.build()) - .generationSettings(generationSettings.build()) + .generationSettings(vanilla.getGenerationSettings()) .build(); } From 3ca90808f0a447f6716060c192692049aee56044 Mon Sep 17 00:00:00 2001 From: Zoe Gidiere Date: Tue, 29 Oct 2024 14:23:45 -0600 Subject: [PATCH 15/16] Fix up --- .../com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java | 7 ++++++- .../com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java | 4 +--- .../nms/v1_21/config/BiomeParticleConfigTemplate.java | 2 +- .../terra/bukkit/nms/v1_21/config/EntityTypeTemplate.java | 2 +- .../bukkit/nms/v1_21/config/VillagerTypeTemplate.java | 2 +- .../src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java | 5 +---- .../java/com/dfsek/terra/lifecycle/LifecyclePlatform.java | 2 +- .../com/dfsek/terra/lifecycle/util/LifecycleBiomeUtil.java | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java index 2523e534e..adb0e21ee 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/AwfulBukkitHacks.java @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.nms.v1_21; +import com.dfsek.terra.bukkit.nms.v1_21.config.VanillaBiomeProperties; + import com.google.common.collect.ImmutableMap; import net.minecraft.core.Holder; import net.minecraft.core.Holder.Reference; @@ -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/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 index d525f591e..a428cee14 100644 --- 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 @@ -22,14 +22,12 @@ public class NMSBiomeInjector { .flatMap(registry::get); } - public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) + 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(); - 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())) diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java index f707e0565..1b5a93f8b 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java @@ -28,7 +28,7 @@ public class BiomeParticleConfigTemplate implements ObjectTemplate> { @Override public EntityType get() { - return BuiltInRegistries.ENTITY_TYPE.get(id); + return BuiltInRegistries.ENTITY_TYPE.get(id).orElseThrow().value(); } } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java index a5dd41b14..aca928812 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java @@ -18,6 +18,6 @@ public class VillagerTypeTemplate implements ObjectTemplate { @Override public VillagerType get() { - return BuiltInRegistries.VILLAGER_TYPE.get(id); + return BuiltInRegistries.VILLAGER_TYPE.get(id).orElseThrow().value(); } } 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 index 44e6ddaf4..f40744278 100644 --- 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 @@ -22,14 +22,11 @@ public class BiomeUtil { public static final Map> TERRA_BIOME_MAP = new HashMap<>(); - public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) { - + public static Biome createBiome(Biome vanilla, VanillaBiomeProperties vanillaBiomeProperties) { BiomeEffects.Builder effects = new BiomeEffects.Builder(); net.minecraft.world.biome.Biome.Builder builder = new Builder(); - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) .fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) 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 058ae364e..a7828ef11 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 @@ -84,7 +84,7 @@ public abstract class LifecyclePlatform extends ModPlatform { if(server != null) { - LifecycleBiomeUtil.registerBiomes(server.getRegistryManager().get(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/LifecycleBiomeUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleBiomeUtil.java index a77a7bbb5..c86e71165 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleBiomeUtil.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LifecycleBiomeUtil.java @@ -57,7 +57,7 @@ public final class LifecycleBiomeUtil { } else { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - net.minecraft.world.biome.Biome minecraftBiome = BiomeUtil.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", BiomeUtil.createBiomeID(pack, id)); From 710bbc33c9db42d7e2ffac11e0bcc21822b65545 Mon Sep 17 00:00:00 2001 From: Zoe Gidiere Date: Tue, 29 Oct 2024 15:49:45 -0600 Subject: [PATCH 16/16] Refractor bukkit to v1_21_3 --- platforms/bukkit/build.gradle.kts | 2 +- .../main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java | 2 +- .../main/java/com/dfsek/terra/bukkit/nms/Initializer.java | 3 --- platforms/bukkit/nms/{v1_21 => v1_21_3}/build.gradle.kts | 0 .../dfsek/terra/bukkit/nms/v1_21_3}/AwfulBukkitHacks.java | 4 ++-- .../java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSAddon.java | 4 ++-- .../com/dfsek/terra/bukkit/nms/v1_21_3}/NMSBiomeInfo.java | 2 +- .../dfsek/terra/bukkit/nms/v1_21_3}/NMSBiomeInjector.java | 4 ++-- .../dfsek/terra/bukkit/nms/v1_21_3}/NMSBiomeProvider.java | 2 +- .../terra/bukkit/nms/v1_21_3}/NMSChunkGeneratorDelegate.java | 2 +- .../com/dfsek/terra/bukkit/nms/v1_21_3}/NMSInitializer.java | 2 +- .../dfsek/terra/bukkit/nms/v1_21_3}/NMSInjectListener.java | 3 +-- .../dfsek/terra/bukkit/nms/v1_21_3}/NMSWorldProperties.java | 2 +- .../java/com/dfsek/terra/bukkit/nms/v1_21_3}/Reflection.java | 2 +- .../com/dfsek/terra/bukkit/nms/v1_21_3}/RegistryFetcher.java | 2 +- .../nms/v1_21_3}/config/BiomeAdditionsSoundTemplate.java | 2 +- .../bukkit/nms/v1_21_3}/config/BiomeMoodSoundTemplate.java | 2 +- .../nms/v1_21_3}/config/BiomeParticleConfigTemplate.java | 2 +- .../terra/bukkit/nms/v1_21_3}/config/EntityTypeTemplate.java | 3 +-- .../terra/bukkit/nms/v1_21_3}/config/MusicSoundTemplate.java | 2 +- .../terra/bukkit/nms/v1_21_3}/config/SoundEventTemplate.java | 2 +- .../terra/bukkit/nms/v1_21_3}/config/SpawnCostConfig.java | 2 +- .../terra/bukkit/nms/v1_21_3}/config/SpawnEntryTemplate.java | 2 +- .../bukkit/nms/v1_21_3}/config/SpawnSettingsTemplate.java | 2 +- .../terra/bukkit/nms/v1_21_3}/config/SpawnTypeConfig.java | 2 +- .../bukkit/nms/v1_21_3}/config/VanillaBiomeProperties.java | 2 +- .../bukkit/nms/v1_21_3}/config/VillagerTypeTemplate.java | 5 +---- 27 files changed, 28 insertions(+), 36 deletions(-) rename platforms/bukkit/nms/{v1_21 => v1_21_3}/build.gradle.kts (100%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/AwfulBukkitHacks.java (97%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSAddon.java (88%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSBiomeInfo.java (83%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSBiomeInjector.java (97%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSBiomeProvider.java (97%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSChunkGeneratorDelegate.java (99%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSInitializer.java (92%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSInjectListener.java (96%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/NMSWorldProperties.java (94%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/Reflection.java (98%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/RegistryFetcher.java (95%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/BiomeAdditionsSoundTemplate.java (94%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/BiomeMoodSoundTemplate.java (95%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/BiomeParticleConfigTemplate.java (96%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/EntityTypeTemplate.java (88%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/MusicSoundTemplate.java (95%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/SoundEventTemplate.java (94%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/SpawnCostConfig.java (94%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/SpawnEntryTemplate.java (94%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/SpawnSettingsTemplate.java (96%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/SpawnTypeConfig.java (93%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/VanillaBiomeProperties.java (98%) rename platforms/bukkit/nms/{v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21 => v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3}/config/VillagerTypeTemplate.java (78%) 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/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/nms/Initializer.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java index c29fa1e1b..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 @@ -54,9 +54,6 @@ public interface Initializer { private static Initializer constructInitializer() { try { String packageVersion = NMS; - if(NMS.equals("v1_21_3")) { - packageVersion = "v1_21"; // TODO: Refactor nms package to v1_21_3 - } Class initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer"); try { 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 97% 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 adb0e21ee..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,6 +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.config.VanillaBiomeProperties; +import com.dfsek.terra.bukkit.nms.v1_21_3.config.VanillaBiomeProperties; import com.google.common.collect.ImmutableMap; import net.minecraft.core.Holder; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSAddon.java similarity index 88% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSAddon.java index 55be58c3b..539b7f97b 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSAddon.java @@ -1,11 +1,11 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +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.config.VanillaBiomeProperties; +import com.dfsek.terra.bukkit.nms.v1_21_3.config.VanillaBiomeProperties; public class NMSAddon extends BukkitAddon { 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/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInjector.java similarity index 97% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInjector.java index a428cee14..3304b3c65 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSBiomeInjector.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/NMSBiomeInjector.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.Registry; @@ -11,7 +11,7 @@ import java.util.Objects; import java.util.Optional; import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.bukkit.nms.v1_21.config.VanillaBiomeProperties; +import com.dfsek.terra.bukkit.nms.v1_21_3.config.VanillaBiomeProperties; public class NMSBiomeInjector { 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 92% 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 9e9ed7499..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,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21; +package com.dfsek.terra.bukkit.nms.v1_21_3; import com.dfsek.terra.bukkit.BukkitAddon; 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 98% 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 8d29b5158..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; 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 95% 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 249703ca8..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,4 +1,4 @@ -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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeAdditionsSoundTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeAdditionsSoundTemplate.java similarity index 94% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeAdditionsSoundTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeAdditionsSoundTemplate.java index 3f91d4a26..ee5781784 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeAdditionsSoundTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeAdditionsSoundTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeMoodSoundTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeMoodSoundTemplate.java similarity index 95% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeMoodSoundTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeMoodSoundTemplate.java index cf9e5ee76..1c67c7052 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeMoodSoundTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeMoodSoundTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeParticleConfigTemplate.java similarity index 96% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeParticleConfigTemplate.java index 1b5a93f8b..f62bd344d 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/BiomeParticleConfigTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/BiomeParticleConfigTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/EntityTypeTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/EntityTypeTemplate.java similarity index 88% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/EntityTypeTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/EntityTypeTemplate.java index f23dca692..ea9d002a4 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/EntityTypeTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/EntityTypeTemplate.java @@ -1,9 +1,8 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/MusicSoundTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/MusicSoundTemplate.java similarity index 95% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/MusicSoundTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/MusicSoundTemplate.java index 9fd0ce4c5..9342aec45 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/MusicSoundTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/MusicSoundTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SoundEventTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SoundEventTemplate.java similarity index 94% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SoundEventTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SoundEventTemplate.java index 9c266e45e..0c4052f87 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SoundEventTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SoundEventTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnCostConfig.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnCostConfig.java similarity index 94% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnCostConfig.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnCostConfig.java index 2df98194e..e14305d42 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnCostConfig.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnCostConfig.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnEntryTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnEntryTemplate.java similarity index 94% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnEntryTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnEntryTemplate.java index 4ac181401..4b730f00f 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnEntryTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnEntryTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnSettingsTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnSettingsTemplate.java similarity index 96% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnSettingsTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnSettingsTemplate.java index d22f4dbdf..7613d3205 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnSettingsTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnSettingsTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnTypeConfig.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnTypeConfig.java similarity index 93% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnTypeConfig.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnTypeConfig.java index 835853236..4755a3a45 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/SpawnTypeConfig.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/SpawnTypeConfig.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VanillaBiomeProperties.java similarity index 98% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VanillaBiomeProperties.java index 2fbf119a8..5df5decf4 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VanillaBiomeProperties.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VanillaBiomeProperties.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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; diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VillagerTypeTemplate.java similarity index 78% rename from platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java rename to platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VillagerTypeTemplate.java index aca928812..cde3b531d 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/config/VillagerTypeTemplate.java +++ b/platforms/bukkit/nms/v1_21_3/src/main/java/com/dfsek/terra/bukkit/nms/v1_21_3/config/VillagerTypeTemplate.java @@ -1,12 +1,9 @@ -package com.dfsek.terra.bukkit.nms.v1_21.config; +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.Registry; -import net.minecraft.core.RegistryCodecs; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.npc.VillagerType;