From 796f66e708e3acf4b948d9b865c765807ecd2466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Fri, 8 Jul 2022 12:26:34 -0700 Subject: [PATCH 01/17] We do a little commonifying --- gradle.properties | 1 - .../dfsek/terra/fabric/FabricEntryPoint.java | 25 ++------------ .../dfsek/terra/fabric/FabricPlatform.java | 25 ++------------ platforms/mixin-lifecycle/build.gradle.kts | 5 +++ .../terra/lifecycle/LifecycleEntryPoint.java | 34 +++++++++++++++++++ .../terra/lifecycle/LifecyclePlatform.java | 20 +++++++++-- .../dfsek/terra/quilt/QuiltEntryPoint.java | 27 +++------------ .../com/dfsek/terra/quilt/QuiltPlatform.java | 24 ++----------- 8 files changed, 69 insertions(+), 92 deletions(-) create mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java diff --git a/gradle.properties b/gradle.properties index 76e5fa68b..3e8017f71 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,5 +8,4 @@ terra.license=MIT # Gradle options org.gradle.jvmargs=-Xmx4096M -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC org.gradle.warning.mode=all -#org.gradle.parallel=true diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java index 54d03961e..d316b1a3a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -17,35 +17,16 @@ package com.dfsek.terra.fabric; -import cloud.commandframework.execution.CommandExecutionCoordinator; -import cloud.commandframework.fabric.FabricServerCommandManager; import net.fabricmc.api.ModInitializer; -import net.minecraft.server.command.ServerCommandSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.dfsek.terra.api.command.CommandSender; -import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; +import com.dfsek.terra.lifecycle.LifecycleEntryPoint; -public class FabricEntryPoint implements ModInitializer { - private static final Logger logger = LoggerFactory.getLogger(FabricEntryPoint.class); - +public class FabricEntryPoint extends LifecycleEntryPoint implements ModInitializer { private static final FabricPlatform TERRA_PLUGIN = new FabricPlatform(); @Override public void onInitialize() { - logger.info("Initializing Terra Fabric mod..."); - - FabricServerCommandManager manager = new FabricServerCommandManager<>( - CommandExecutionCoordinator.simpleCoordinator(), - serverCommandSource -> (CommandSender) serverCommandSource, - commandSender -> (ServerCommandSource) commandSender - ); - - - manager.brigadierManager().setNativeNumberSuggestions(false); - - TERRA_PLUGIN.getEventManager().callEvent(new CommandRegistrationEvent(manager)); + initialize("Fabric", TERRA_PLUGIN); } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricPlatform.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricPlatform.java index 2c85b86ee..1501b736d 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricPlatform.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricPlatform.java @@ -17,43 +17,24 @@ package com.dfsek.terra.fabric; -import ca.solostudios.strata.Versions; -import ca.solostudios.strata.parser.tokenizer.ParseException; -import ca.solostudios.strata.version.Version; import net.fabricmc.loader.api.FabricLoader; import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; import java.util.Collection; import java.util.stream.Collectors; -import java.util.stream.Stream; -import com.dfsek.terra.addon.EphemeralAddon; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.lifecycle.LifecyclePlatform; public class FabricPlatform extends LifecyclePlatform { - private static final Logger LOGGER = LoggerFactory.getLogger(FabricPlatform.class); @Override protected Collection getPlatformMods() { - return FabricLoader.getInstance().getAllMods().stream().flatMap(mod -> { - String id = mod.getMetadata().getId(); - if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return Stream.empty(); - try { - Version version = Versions.parseVersion(mod.getMetadata().getVersion().getFriendlyString()); - return Stream.of(new EphemeralAddon(version, "fabric:" + id)); - } catch(ParseException e) { - LOGGER.warn( - "Mod {}, version {} does not follow semantic versioning specification, Terra addons will be unable to depend on " + - "it.", - id, mod.getMetadata().getVersion().getFriendlyString()); - } - return Stream.empty(); - }).collect(Collectors.toList()); + return FabricLoader.getInstance().getAllMods().stream().flatMap( + mod -> parseModData(mod.getMetadata().getId(), mod.getMetadata().getVersion().getFriendlyString())).collect( + Collectors.toList()); } @Override diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts index 0a9e71d7c..e8b852dc5 100644 --- a/platforms/mixin-lifecycle/build.gradle.kts +++ b/platforms/mixin-lifecycle/build.gradle.kts @@ -15,6 +15,11 @@ dependencies { minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") mappings("net.fabricmc:yarn:${Versions.Mod.yarn}:v2") + + modImplementation("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") + } } loom { diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java new file mode 100644 index 000000000..12260088a --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java @@ -0,0 +1,34 @@ +package com.dfsek.terra.lifecycle; + +import cloud.commandframework.execution.CommandExecutionCoordinator; + +import cloud.commandframework.fabric.FabricServerCommandManager; + +import com.dfsek.terra.api.command.CommandSender; +import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; + +import com.dfsek.terra.mod.MinecraftAddon; + +import net.minecraft.server.command.ServerCommandSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class LifecycleEntryPoint { + private static final Logger logger = LoggerFactory.getLogger(LifecycleEntryPoint.class); + + protected static void initialize(String modName, LifecyclePlatform platform) { + logger.info("Initializing Terra %s mod...", modName); + + FabricServerCommandManager manager = new FabricServerCommandManager<>( + CommandExecutionCoordinator.simpleCoordinator(), + serverCommandSource -> (CommandSender) serverCommandSource, + commandSender -> (ServerCommandSource) commandSender + ); + + + manager.brigadierManager().setNativeNumberSuggestions(false); + + platform.getEventManager().callEvent(new CommandRegistrationEvent(manager)); + } +} 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 f218380d7..44b5307c2 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 @@ -2,6 +2,7 @@ package com.dfsek.terra.lifecycle; import ca.solostudios.strata.Versions; import ca.solostudios.strata.parser.tokenizer.ParseException; +import ca.solostudios.strata.version.Version; import net.minecraft.MinecraftVersion; import net.minecraft.server.MinecraftServer; import org.slf4j.Logger; @@ -10,6 +11,7 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.stream.Stream; import com.dfsek.terra.addon.EphemeralAddon; import com.dfsek.terra.api.addon.BaseAddon; @@ -78,11 +80,25 @@ public abstract class LifecyclePlatform extends ModPlatform { LOGGER.warn("Failed to parse Minecraft version", e); } } - + addons.addAll(getPlatformMods()); - + return addons; } + protected Stream parseModData(String id, String modVersion) { + if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return Stream.empty(); + try { + Version version = Versions.parseVersion(modVersion); + return Stream.of(new EphemeralAddon(version, "quilt:" + id)); + } catch(ParseException e) { + LOGGER.warn( + "Mod {}, version {} does not follow semantic versioning specification, Terra addons will be unable to depend on " + + "it.", + id, modVersion); + } + return Stream.empty(); + } + protected abstract Collection getPlatformMods(); } diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java index 88f676daf..5b8688962 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java @@ -17,36 +17,17 @@ package com.dfsek.terra.quilt; -import cloud.commandframework.execution.CommandExecutionCoordinator; -import cloud.commandframework.fabric.FabricServerCommandManager; -import net.minecraft.server.command.ServerCommandSource; import org.quiltmc.loader.api.ModContainer; import org.quiltmc.qsl.base.api.entrypoint.ModInitializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.dfsek.terra.api.command.CommandSender; -import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; +import com.dfsek.terra.lifecycle.LifecycleEntryPoint; -public class QuiltEntryPoint implements ModInitializer { - private static final Logger logger = LoggerFactory.getLogger(QuiltEntryPoint.class); - +public class QuiltEntryPoint extends LifecycleEntryPoint implements ModInitializer { private static final QuiltPlatform TERRA_PLUGIN = new QuiltPlatform(); - + @Override public void onInitialize(ModContainer container) { - logger.info("Initializing Terra Quilt mod..."); - - FabricServerCommandManager manager = new FabricServerCommandManager<>( - CommandExecutionCoordinator.simpleCoordinator(), - serverCommandSource -> (CommandSender) serverCommandSource, - commandSender -> (ServerCommandSource) commandSender - ); - - - manager.brigadierManager().setNativeNumberSuggestions(false); - - TERRA_PLUGIN.getEventManager().callEvent(new CommandRegistrationEvent(manager)); + initialize("Quilt", TERRA_PLUGIN); } } diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPlatform.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPlatform.java index dfc1a7a18..0aa2e4323 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPlatform.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPlatform.java @@ -17,43 +17,23 @@ package com.dfsek.terra.quilt; -import ca.solostudios.strata.Versions; -import ca.solostudios.strata.parser.tokenizer.ParseException; -import ca.solostudios.strata.version.Version; import org.jetbrains.annotations.NotNull; import org.quiltmc.loader.api.QuiltLoader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; import java.util.Collection; import java.util.stream.Collectors; -import java.util.stream.Stream; -import com.dfsek.terra.addon.EphemeralAddon; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.lifecycle.LifecyclePlatform; public class QuiltPlatform extends LifecyclePlatform { - private static final Logger LOGGER = LoggerFactory.getLogger(QuiltPlatform.class); @Override protected Collection getPlatformMods() { - return QuiltLoader.getAllMods().stream().flatMap(mod -> { - String id = mod.metadata().id(); - if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return Stream.empty(); - try { - Version version = Versions.parseVersion(mod.metadata().version().raw()); - return Stream.of(new EphemeralAddon(version, "quilt:" + id)); - } catch(ParseException e) { - LOGGER.warn( - "Mod {}, version {} does not follow semantic versioning specification, Terra addons will be unable to depend on " + - "it.", - id, mod.metadata().version().raw()); - } - return Stream.empty(); - }).collect(Collectors.toList()); + return QuiltLoader.getAllMods().stream().flatMap(mod -> parseModData(mod.metadata().id(), mod.metadata().version().raw())).collect( + Collectors.toList()); } @Override From b1b91726ef1e0fc8de611d01fb070d27b13b1bf5 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 02/17] 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 4a6efa188..584611cb2 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 @@ -40,7 +40,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; @@ -78,6 +77,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) @@ -86,7 +86,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 f26cedd6130eabab212d93ecda0bd9ee16b6e125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Mon, 11 Jul 2022 13:49:55 -0700 Subject: [PATCH 03/17] Remove Vanilla Key --- .../terra/addons/biome/BiomeFactory.java | 2 +- .../terra/addons/biome/BiomeTemplate.java | 9 +- .../terra/addons/biome/UserDefinedBiome.java | 26 ++++-- .../dfsek/terra/api/world/biome/Biome.java | 9 +- .../dfsek/terra/forge/ForgeEntryPoint.java | 4 +- .../com/dfsek/terra/forge/ForgePlatform.java | 9 ++ .../com/dfsek/terra/forge/util/BiomeUtil.java | 92 ------------------- .../terra/forge/util/ForgeBiomeUtil.java | 29 ++++++ .../java/com/dfsek/terra/mod/ModPlatform.java | 11 ++- .../terra/mod/config/ProtoPlatformBiome.java | 15 +-- .../mod/config/VanillaBiomeProperties.java | 48 ++++++---- .../mod/generation/TerraBiomeSource.java | 4 +- .../lifecycle/DataPackContentsMixin.java | 2 - .../com/dfsek/terra/mod/util/BiomeUtil.java | 74 +++++++++++++++ .../dfsek/terra/mod/util/MinecraftUtil.java | 92 +++++-------------- .../com/dfsek/terra/mod/util/TagUtil.java | 54 +++-------- .../terra/lifecycle/LifecyclePlatform.java | 2 +- .../dfsek/terra/lifecycle/util/BiomeUtil.java | 86 ----------------- .../terra/lifecycle/util/LifecycleUtil.java | 1 + 19 files changed, 226 insertions(+), 343 deletions(-) delete mode 100644 platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java create mode 100644 platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeBiomeUtil.java create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java delete mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeFactory.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeFactory.java index 0f84c609c..5c11005aa 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeFactory.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeFactory.java @@ -22,6 +22,6 @@ public class BiomeFactory implements ConfigFactory { @Override public Biome build(BiomeTemplate template, Platform platform) { - return new UserDefinedBiome(template.getVanilla(), template); + return new UserDefinedBiome(template); } } diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeTemplate.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeTemplate.java index 656a3949a..a9d96a58e 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeTemplate.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeTemplate.java @@ -21,7 +21,6 @@ import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.meta.Meta; -import com.dfsek.terra.api.world.biome.PlatformBiome; @SuppressWarnings({ "FieldMayBeFinal", "unused" }) @@ -37,13 +36,11 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl @Default private List extended = Collections.emptyList(); - @Value("vanilla") - private @Meta PlatformBiome vanilla; - @Value("color") @Final @Default private @Meta int color = 0; + @Value("tags") @Default private @Meta Set<@Meta String> tags = new HashSet<>(); @@ -77,8 +74,4 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl public String getID() { return id; } - - public PlatformBiome getVanilla() { - return vanilla; - } } diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java index cf0d09ac4..ac94f62fe 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java @@ -7,6 +7,8 @@ package com.dfsek.terra.addons.biome; +import org.jetbrains.annotations.Nullable; + import java.util.Set; import com.dfsek.terra.api.properties.Context; @@ -18,7 +20,8 @@ import com.dfsek.terra.api.world.biome.PlatformBiome; * Class representing a config-defined biome */ public class UserDefinedBiome implements Biome { - private final PlatformBiome vanilla; + private PlatformBiome platformBiome; + private final String id; private final BiomeTemplate config; private final int color; @@ -26,8 +29,7 @@ public class UserDefinedBiome implements Biome { private final Context context = new Context(); - public UserDefinedBiome(PlatformBiome vanilla, BiomeTemplate config) { - this.vanilla = vanilla; + public UserDefinedBiome(BiomeTemplate config) { this.id = config.getID(); this.config = config; this.color = config.getColor(); @@ -41,14 +43,9 @@ public class UserDefinedBiome implements Biome { return "{BIOME:" + getID() + "}"; } - /** - * Gets the Vanilla biomes to represent the custom biome. - * - * @return Collection of biomes to represent the custom biome. - */ @Override - public PlatformBiome getPlatformBiome() { - return vanilla; + public @Nullable PlatformBiome getPlatformBiome() { + return platformBiome; } @Override @@ -56,6 +53,15 @@ public class UserDefinedBiome implements Biome { return color; } + @Override + public void setPlatformBiome(PlatformBiome biome) { + if(platformBiome != null) { + throw new IllegalStateException("Platform biome already set"); + } + + this.platformBiome = biome; + } + @Override public Set getTags() { return tags; diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java index 7d2ec6189..daca10e0f 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java @@ -8,6 +8,8 @@ package com.dfsek.terra.api.world.biome; +import org.jetbrains.annotations.Nullable; + import java.util.Set; import com.dfsek.terra.api.properties.PropertyHolder; @@ -24,7 +26,7 @@ public interface Biome extends PropertyHolder, StringIdentifiable { * * @return The platform biome. */ - PlatformBiome getPlatformBiome(); + @Nullable PlatformBiome getPlatformBiome(); /** * Get the color of this biome. @@ -39,4 +41,9 @@ public interface Biome extends PropertyHolder, StringIdentifiable { * @return A {@link Set} of String tags this biome holds. */ Set getTags(); + + /** + * Sets the platform biome this custom biome delegates to. + */ + void setPlatformBiome(PlatformBiome biome); } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java index b342e5a11..f1f12ac51 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java @@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.forge.AwfulForgeHacks.RegistrySanityCheck; import com.dfsek.terra.forge.AwfulForgeHacks.RegistryStep; -import com.dfsek.terra.forge.util.BiomeUtil; +import com.dfsek.terra.forge.util.ForgeBiomeUtil; import com.dfsek.terra.mod.data.Codecs; @@ -64,7 +64,7 @@ public class ForgeEntryPoint { public static void initialize(RegisterHelper helper) { getPlatform().getEventManager().callEvent( new PlatformInitializationEvent()); - BiomeUtil.registerBiomes(helper); + ForgeBiomeUtil.registerBiomes(helper); } @SubscribeEvent(priority = EventPriority.LOWEST) diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgePlatform.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgePlatform.java index 2d8b51c9a..04d5fae18 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgePlatform.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgePlatform.java @@ -22,6 +22,9 @@ import ca.solostudios.strata.parser.tokenizer.ParseException; import ca.solostudios.strata.version.Version; import net.minecraft.MinecraftVersion; import net.minecraft.server.MinecraftServer; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.biome.Biome; import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.server.ServerLifecycleHooks; import org.jetbrains.annotations.NotNull; @@ -35,6 +38,7 @@ import java.util.List; import com.dfsek.terra.addon.EphemeralAddon; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.util.generic.Lazy; +import com.dfsek.terra.forge.util.ForgeBiomeUtil; import com.dfsek.terra.mod.CommonPlatform; import com.dfsek.terra.mod.ModPlatform; import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; @@ -49,6 +53,11 @@ public class ForgePlatform extends ModPlatform { load(); } + @Override + public RegistryKey getBiomeKey(Identifier identifier) { + return ForgeBiomeUtil.getBiomeKey(identifier); + } + @Override public MinecraftServer getServer() { return ServerLifecycleHooks.getCurrentServer(); 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 deleted file mode 100644 index 177a63f8e..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.dfsek.terra.forge.util; - -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.BuiltinRegistries; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.village.VillagerType; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegisterEvent.RegisterHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Map; -import java.util.Objects; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.Biome; -import com.dfsek.terra.forge.ForgeEntryPoint; -import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.mod.config.ProtoPlatformBiome; -import com.dfsek.terra.mod.config.VanillaBiomeProperties; -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); - - - private BiomeUtil() { - - } - - - public static void registerBiomes(RegisterHelper helper) { - logger.info("Registering biomes..."); - ForgeEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. - pack.getCheckedRegistry(Biome.class) - .forEach((id, biome) -> registerBiome(biome, pack, id, helper)); - }); - MinecraftUtil.registerFlora(BuiltinRegistries.BIOME); - logger.info("Terra biomes registered."); - } - - /** - * Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate. - * - * @param biome The Terra BiomeBuilder. - * @param pack The ConfigPack this biome belongs to. - */ - private static void registerBiome(Biome biome, ConfigPack pack, - com.dfsek.terra.api.registry.key.RegistryKey id, - RegisterHelper helper) { - RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(BuiltinRegistries.BIOME); - - - if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); - } else { - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - - net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, - ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla) - .value(), - vanillaBiomeProperties); - - Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); - - if(ForgeRegistries.BIOMES.containsKey(identifier)) { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier) - .orElseThrow() - .getKey() - .orElseThrow()); - } else { - helper.register(MinecraftUtil.registerKey(identifier).getValue(), minecraftBiome); - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier) - .orElseThrow() - .getKey() - .orElseThrow()); - } - - Map villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap(); - - villagerMap.put(RegistryKey.of(Registry.BIOME_KEY, identifier), - Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), - villagerMap.getOrDefault(vanilla, VillagerType.PLAINS))); - - MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); - } - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeBiomeUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeBiomeUtil.java new file mode 100644 index 000000000..ea4780c03 --- /dev/null +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeBiomeUtil.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.forge.util; + +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegisterEvent.RegisterHelper; + +import com.dfsek.terra.mod.util.BiomeUtil; +import com.dfsek.terra.mod.util.MinecraftUtil; + + +public final class ForgeBiomeUtil extends BiomeUtil { + static RegisterHelper helper; + + public static void registerBiomes(RegisterHelper helper) { + ForgeBiomeUtil.helper = helper; + registerBiomes(); + } + + protected static RegistryKey registerBiome(Identifier identifier, + net.minecraft.world.biome.Biome biome) { + helper.register(MinecraftUtil.registerKey(identifier).getValue(), biome); + return ForgeRegistries.BIOMES.getHolder(identifier) + .orElseThrow() + .getKey() + .orElseThrow(); + } +} 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 584611cb2..5d2565794 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 @@ -12,7 +12,9 @@ import net.minecraft.sound.MusicSound; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.RegistryKey; import net.minecraft.village.VillagerType; +import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.Precipitation; import net.minecraft.world.biome.Biome.TemperatureModifier; import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; @@ -45,13 +47,14 @@ import com.dfsek.terra.mod.config.SpawnTypeConfig; import com.dfsek.terra.mod.config.VillagerTypeTemplate; import com.dfsek.terra.mod.handle.MinecraftItemHandle; import com.dfsek.terra.mod.handle.MinecraftWorldHandle; +import com.dfsek.terra.mod.util.BiomeUtil; import com.dfsek.terra.mod.util.PresetUtil; public abstract class ModPlatform extends AbstractPlatform { private final ItemHandle itemHandle = new MinecraftItemHandle(); private final WorldHandle worldHandle = new MinecraftWorldHandle(); - + public abstract MinecraftServer getServer(); public void registerWorldTypes(BiConsumer registerFunction) { @@ -59,6 +62,10 @@ public abstract class ModPlatform extends AbstractPlatform { .forEach(pack -> PresetUtil.createDefault(pack).apply(registerFunction)); } + public RegistryKey getBiomeKey(Identifier identifier) { + return BiomeUtil.getBiomeKey(identifier); + } + @Override public void register(TypeRegistry registry) { super.register(registry); @@ -94,7 +101,7 @@ public abstract class ModPlatform extends AbstractPlatform { private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { Identifier identifier = Identifier.tryParse(id); if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier, tracker); // failure. - return new ProtoPlatformBiome(identifier); + return new ProtoPlatformBiome(identifier, getBiomeKey(identifier)); } @Override diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/ProtoPlatformBiome.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/ProtoPlatformBiome.java index f9524ef58..88c3138ea 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/ProtoPlatformBiome.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/ProtoPlatformBiome.java @@ -22,8 +22,6 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.biome.Biome; -import java.util.Objects; - import com.dfsek.terra.api.world.biome.PlatformBiome; import com.dfsek.terra.mod.util.MinecraftUtil; @@ -31,10 +29,11 @@ import com.dfsek.terra.mod.util.MinecraftUtil; public class ProtoPlatformBiome implements PlatformBiome { private final Identifier identifier; - private RegistryKey delegate; + private final RegistryKey biome; - public ProtoPlatformBiome(Identifier identifier) { + public ProtoPlatformBiome(Identifier identifier, RegistryKey biome) { this.identifier = identifier; + this.biome = biome; } public RegistryKey get(Registry registry) { @@ -46,11 +45,7 @@ public class ProtoPlatformBiome implements PlatformBiome { return identifier; } - public RegistryKey getDelegate() { - return delegate; - } - - public void setDelegate(RegistryKey delegate) { - this.delegate = Objects.requireNonNull(delegate); + public RegistryKey getBiome() { + return biome; } } 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 b5b88a6b9..34a75d50d 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 @@ -7,6 +7,7 @@ import net.minecraft.sound.BiomeAdditionsSound; import net.minecraft.sound.BiomeMoodSound; import net.minecraft.sound.MusicSound; import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; import net.minecraft.village.VillagerType; import net.minecraft.world.biome.Biome.Precipitation; import net.minecraft.world.biome.Biome.TemperatureModifier; @@ -14,82 +15,93 @@ import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; import net.minecraft.world.biome.BiomeParticleConfig; import net.minecraft.world.biome.SpawnSettings; +import java.util.List; + import com.dfsek.terra.api.properties.Properties; public class VanillaBiomeProperties implements ConfigTemplate, Properties { - @Value("colors.grass") + + @Value("minecraft.tags") + @Default + private List tags = null; + + @Value("minecraft.colors.grass") @Default private Integer grassColor = null; - @Value("colors.fog") + @Value("minecraft.colors.fog") @Default private Integer fogColor = null; - @Value("colors.water") + @Value("minecraft.colors.water") @Default private Integer waterColor = null; - @Value("colors.water-fog") + @Value("minecraft.colors.water-fog") @Default private Integer waterFogColor = null; - @Value("colors.foliage") + @Value("minecraft.colors.foliage") @Default private Integer foliageColor = null; - @Value("colors.sky") + @Value("minecraft.colors.sky") @Default private Integer skyColor = null; - @Value("colors.modifier") + @Value("minecraft.colors.modifier") @Default private GrassColorModifier grassColorModifier = null; - @Value("particles") + @Value("minecraft.particles") @Default private BiomeParticleConfig particleConfig = null; - @Value("climate.precipitation") + @Value("minecraft.climate.precipitation") @Default private Precipitation precipitation = null; - @Value("climate.temperature") + @Value("minecraft.climate.temperature") @Default private Float temperature = null; - @Value("climate.temperature-modifier") + @Value("minecraft.climate.temperature-modifier") @Default private TemperatureModifier temperatureModifier = null; - @Value("climate.downfall") + @Value("minecraft.climate.downfall") @Default private Float downfall = null; - @Value("sound.loop-sound.sound") + @Value("minecraft.sound.loop-sound.sound") @Default private SoundEvent loopSound = null; - @Value("sound.mood-sound") + @Value("minecraft.sound.mood-sound") @Default private BiomeMoodSound moodSound = null; - @Value("sound.additions-sound") + @Value("minecraft.sound.additions-sound") @Default private BiomeAdditionsSound additionsSound = null; - @Value("sound.music") + @Value("minecraft.sound.music") @Default private MusicSound music = null; - @Value("spawning") + @Value("minecraft.spawning") @Default private SpawnSettings spawnSettings = null; - @Value("villager-type") + @Value("minecraft.villager-type") @Default private VillagerType villagerType = null; + public List getTags() { + return tags; + } + public Integer getGrassColor() { return grassColor; } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java index 5730cee80..6bde89c88 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java @@ -45,7 +45,7 @@ public class TerraBiomeSource extends BiomeSource { .stream(pack.getBiomeProvider() .getBiomes() .spliterator(), false) - .map(b -> biomes.getOrCreateEntry(((ProtoPlatformBiome) b.getPlatformBiome()).getDelegate()))); + .map(b -> biomes.getOrCreateEntry(((ProtoPlatformBiome) b.getPlatformBiome()).getBiome()))); this.biomeRegistry = biomes; this.pack = pack; @@ -63,7 +63,7 @@ public class TerraBiomeSource extends BiomeSource { .entryOf(((ProtoPlatformBiome) pack .getBiomeProvider() .getBiome(biomeX << 2, biomeY << 2, biomeZ << 2, SeedHack.getSeed(noiseSampler)) - .getPlatformBiome()).getDelegate() + .getPlatformBiome()).getBiome() ); } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java index a9ecb9354..d1c470076 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/lifecycle/DataPackContentsMixin.java @@ -9,7 +9,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.dfsek.terra.mod.util.MinecraftUtil; import com.dfsek.terra.mod.util.TagUtil; @@ -24,6 +23,5 @@ public class DataPackContentsMixin { Registry biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY); TagUtil.registerBiomeTags(biomeRegistry); - MinecraftUtil.registerFlora(biomeRegistry); } } 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..2b592e812 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/BiomeUtil.java @@ -0,0 +1,74 @@ +package com.dfsek.terra.mod.util; + +import net.minecraft.tag.TagKey; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.village.VillagerType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Map; +import java.util.Objects; + +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.mod.CommonPlatform; +import com.dfsek.terra.mod.config.ProtoPlatformBiome; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; + + +public class BiomeUtil { + private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); + + public static void registerBiomes() { + logger.info("Registering biomes..."); + CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. + pack.getCheckedRegistry(Biome.class) + .forEach((id, biome) -> registerBiome(biome, pack, id)); + }); + logger.info("Terra biomes registered."); + } + + protected static RegistryKey registerBiome(Identifier identifier, + net.minecraft.world.biome.Biome biome) { + BuiltinRegistries.add(BuiltinRegistries.BIOME, + MinecraftUtil.registerKey(identifier) + .getValue(), + biome); + return getBiomeKey(identifier); + } + + public static RegistryKey getBiomeKey(Identifier identifier) { + return BuiltinRegistries.BIOME.getKey(BuiltinRegistries.BIOME.get(identifier)).orElseThrow(); + } + + /** + * Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate. + * + * @param biome The Terra BiomeBuilder. + * @param pack The ConfigPack this biome belongs to. + */ + protected static void registerBiome(Biome biome, ConfigPack pack, + com.dfsek.terra.api.registry.key.RegistryKey id) { + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(vanillaBiomeProperties); + + Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); + + biome.setPlatformBiome(new ProtoPlatformBiome(identifier, registerBiome(identifier, minecraftBiome))); + + Map villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap(); + + villagerMap.put(RegistryKey.of(Registry.BIOME_KEY, identifier), + Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); + + for(Identifier tag : vanillaBiomeProperties.getTags()) { + MinecraftUtil.TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.of(Registry.BIOME_KEY, tag), new ArrayList<>()).add(identifier); + } + } +} 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 69f91e6f6..7bc86be92 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 @@ -3,6 +3,7 @@ package com.dfsek.terra.mod.util; import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; @@ -13,7 +14,6 @@ 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 net.minecraft.world.gen.feature.ConfiguredFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,14 +30,13 @@ import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.Sign; 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_ifaces.FloraFeatureHolder; public final class MinecraftUtil { public static final Logger logger = LoggerFactory.getLogger(MinecraftUtil.class); - public static final Map> - TERRA_BIOME_MAP = new HashMap<>(); + + public static final Map, List> + TERRA_BIOME_TAG_MAP = new HashMap<>(); private MinecraftUtil() { @@ -61,107 +60,62 @@ public final class MinecraftUtil { return null; } - public static void registerFlora(Registry biomes) { - logger.info("Injecting flora into Terra biomes..."); - TERRA_BIOME_MAP - .forEach((vb, terraBiomes) -> - biomes.getOrEmpty(vb) - .ifPresentOrElse(vanilla -> terraBiomes - .forEach(tb -> biomes.getOrEmpty(tb) - .ifPresentOrElse( - terra -> { - List> flowerFeatures = List.copyOf( - vanilla.getGenerationSettings() - .getFlowerFeatures()); - logger.debug("Injecting flora into biome" + - " {} : {}", tb, - flowerFeatures); - ((FloraFeatureHolder) terra.getGenerationSettings()).setFloraFeatures( - flowerFeatures); - }, - () -> logger.error( - "No such biome: {}", - tb))), - () -> logger.error("No vanilla biome: {}", vb))); - - } - - public static Map> getTerraBiomeMap() { - return Map.copyOf(TERRA_BIOME_MAP); - } - public static RegistryKey registerKey(Identifier identifier) { return RegistryKey.of(Registry.BIOME_KEY, identifier); } - public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla, - VanillaBiomeProperties vanillaBiomeProperties) { + public static Biome createBiome(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())) + effects.waterColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterColor())) + .waterFogColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterFogColor())) + .fogColor(Objects.requireNonNull(vanillaBiomeProperties.getFogColor())) + .skyColor(Objects.requireNonNull(vanillaBiomeProperties.getSkyColor())) .grassColorModifier( - Objects.requireNonNullElse(vanillaBiomeProperties.getGrassColorModifier(), - vanilla.getEffects().getGrassColorModifier())); + Objects.requireNonNull(vanillaBiomeProperties.getGrassColorModifier())); - if(vanillaBiomeProperties.getFoliageColor() == null) { - vanilla.getEffects().getFoliageColor().ifPresent(effects::foliageColor); - } else { + if(vanillaBiomeProperties.getFoliageColor() != null) { effects.foliageColor(vanillaBiomeProperties.getFoliageColor()); } - if(vanillaBiomeProperties.getGrassColor() == null) { - vanilla.getEffects().getGrassColor().ifPresent(effects::grassColor); - } else { + if(vanillaBiomeProperties.getGrassColor() != null) { effects.grassColor(vanillaBiomeProperties.getGrassColor()); } - if(vanillaBiomeProperties.getParticleConfig() == null) { - vanilla.getEffects().getParticleConfig().ifPresent(effects::particleConfig); - } else { + if(vanillaBiomeProperties.getParticleConfig() != null) { effects.particleConfig(vanillaBiomeProperties.getParticleConfig()); } - if(vanillaBiomeProperties.getLoopSound() == null) { - vanilla.getEffects().getLoopSound().ifPresent(effects::loopSound); - } else { + if(vanillaBiomeProperties.getLoopSound() != null) { effects.loopSound(vanillaBiomeProperties.getLoopSound()); } - if(vanillaBiomeProperties.getMoodSound() == null) { - vanilla.getEffects().getMoodSound().ifPresent(effects::moodSound); - } else { + if(vanillaBiomeProperties.getMoodSound() != null) { effects.moodSound(vanillaBiomeProperties.getMoodSound()); } - if(vanillaBiomeProperties.getAdditionsSound() == null) { - vanilla.getEffects().getAdditionsSound().ifPresent(effects::additionsSound); - } else { + if(vanillaBiomeProperties.getAdditionsSound() != null) { effects.additionsSound(vanillaBiomeProperties.getAdditionsSound()); } - if(vanillaBiomeProperties.getMusic() == null) { - vanilla.getEffects().getMusic().ifPresent(effects::music); - } else { + if(vanillaBiomeProperties.getMusic() != null) { effects.music(vanillaBiomeProperties.getMusic()); } - builder.precipitation(Objects.requireNonNullElse(vanillaBiomeProperties.getPrecipitation(), vanilla.getPrecipitation())); + builder.precipitation(Objects.requireNonNull(vanillaBiomeProperties.getPrecipitation())); - builder.temperature(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperature(), vanilla.getTemperature())); + builder.temperature(Objects.requireNonNull(vanillaBiomeProperties.getTemperature())); - builder.downfall(Objects.requireNonNullElse(vanillaBiomeProperties.getDownfall(), vanilla.getDownfall())); + builder.downfall(Objects.requireNonNull(vanillaBiomeProperties.getDownfall())); - builder.temperatureModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperatureModifier(), - ((BiomeAccessor) ((Object) vanilla)).getWeather().temperatureModifier())); + builder.temperatureModifier(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); - builder.spawnSettings(Objects.requireNonNullElse(vanillaBiomeProperties.getSpawnSettings(), vanilla.getSpawnSettings())); + builder.spawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); return builder .effects(effects.build()) 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 8edf50afc..e8adbf829 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 @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; public final class TagUtil { @@ -51,48 +52,23 @@ public final class TagUtil { } public static void registerBiomeTags(Registry registry) { - logger.info("Doing biome tag garbage...."); + logger.info("Doing data-driven biome tag garbage...."); + logger.info("who let this data drive?"); Map, List>> collect = tagsToMutableMap(registry); - - MinecraftUtil - .getTerraBiomeMap() - .forEach((vb, terraBiomes) -> - MinecraftUtil - .getEntry(registry, vb) - .ifPresentOrElse( - vanilla -> terraBiomes - .forEach(tb -> MinecraftUtil - .getEntry(registry, tb) - .ifPresentOrElse( - terra -> { - logger.debug( - vanilla.getKey() - .orElseThrow() - .getValue() + - " (vanilla for " + - terra.getKey() - .orElseThrow() - .getValue() + - ": " + - vanilla.streamTags() - .toList()); - - vanilla.streamTags() - .forEach( - tag -> collect - .computeIfAbsent( - tag, - t -> new ArrayList<>()) - .add(terra)); - }, - () -> logger.error( - "No such biome: {}", - tb))), - () -> logger.error("No vanilla biome: {}", vb))); - + + MinecraftUtil.TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { + collect.getOrDefault(tag, new ArrayList<>()) + .addAll(biomeList.stream() + .map(registry::getOrEmpty) + .filter(Optional::isPresent) + .map(Optional::get) + .map(RegistryEntry::of) + .toList()); + }); + registry.clearTags(); registry.populateTags(ImmutableMap.copyOf(collect)); - + if(logger.isDebugEnabled()) { registry.streamEntries() .map(e -> e.registryKey().getValue() + ": " + 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 44b5307c2..d28ad4634 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 @@ -15,10 +15,10 @@ 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.mod.CommonPlatform; import com.dfsek.terra.mod.ModPlatform; import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; +import com.dfsek.terra.mod.util.BiomeUtil; public abstract class LifecyclePlatform extends ModPlatform { 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/BiomeUtil.java deleted file mode 100644 index f0d3e06e6..000000000 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.dfsek.terra.lifecycle.util; - -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.BuiltinRegistries; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.village.VillagerType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Map; -import java.util.Objects; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.Biome; -import com.dfsek.terra.mod.CommonPlatform; -import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.mod.config.ProtoPlatformBiome; -import com.dfsek.terra.mod.config.VanillaBiomeProperties; -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); - - private BiomeUtil() { - - } - - public static void registerBiomes() { - logger.info("Registering biomes..."); - CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. - pack.getCheckedRegistry(Biome.class) - .forEach((id, biome) -> registerBiome(biome, pack, id)); - }); - MinecraftUtil.registerFlora(BuiltinRegistries.BIOME); - logger.info("Terra biomes registered."); - } - - /** - * Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate. - * - * @param biome The Terra BiomeBuilder. - * @param pack The ConfigPack this biome belongs to. - */ - private static void registerBiome(Biome biome, ConfigPack pack, - com.dfsek.terra.api.registry.key.RegistryKey id) { - Registry registry = BuiltinRegistries.BIOME; - RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry); - - - if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); - } else { - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - - net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, registry.get(vanilla), - vanillaBiomeProperties); - - Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); - - if(registry.containsId(identifier)) { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(MinecraftUtil.getEntry(registry, identifier) - .orElseThrow() - .getKey() - .orElseThrow()); - } else { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, - MinecraftUtil.registerKey(identifier) - .getValue(), - minecraftBiome).getKey().orElseThrow()); - } - - Map villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap(); - - villagerMap.put(RegistryKey.of(Registry.BIOME_KEY, identifier), - Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), - villagerMap.getOrDefault(vanilla, VillagerType.PLAINS))); - - MinecraftUtil.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 498de58aa..b5a611fd1 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 @@ -4,6 +4,7 @@ import net.minecraft.util.registry.BuiltinRegistries; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.mod.CommonPlatform; +import com.dfsek.terra.mod.util.BiomeUtil; public final class LifecycleUtil { From 526e655a8fc21c6c63890d1b60fa020b38e6121f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Mon, 11 Jul 2022 13:53:38 -0700 Subject: [PATCH 04/17] remove unused key --- .../terra/mod/config/PreLoadCompatibilityOptions.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java index 00825bc5f..df4e2f8b6 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java @@ -26,10 +26,6 @@ import com.dfsek.terra.api.properties.Properties; @SuppressWarnings("FieldMayBeFinal") public class PreLoadCompatibilityOptions implements ConfigTemplate, Properties { - @Value("minecraft.use-vanilla-biomes") - @Default - private boolean vanillaBiomes = false; - @Value("minecraft.beard.enable") @Default private boolean beard = true; @@ -42,10 +38,6 @@ public class PreLoadCompatibilityOptions implements ConfigTemplate, Properties { @Default private double airThreshold = -0.5; - public boolean useVanillaBiomes() { - return vanillaBiomes; - } - public boolean isBeard() { return beard; } From a286e266569fd93a24abad9460d56fa1e2a250bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Mon, 11 Jul 2022 14:57:43 -0700 Subject: [PATCH 05/17] Bukkit --- .../com/dfsek/terra/bukkit/BukkitAddon.java | 17 +- .../com/dfsek/terra/bukkit/PlatformImpl.java | 2 +- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 6 +- .../bukkit/config/VanillaBiomeProperties.java | 58 ------ .../dfsek/terra/bukkit/nms/Initializer.java | 41 +++-- .../bukkit/nms/v1_18_R2/NMSBiomeInjector.java | 1 - .../bukkit/nms/v1_19_R1/AwfulBukkitHacks.java | 77 ++++---- .../terra/bukkit/nms/v1_19_R1/NMSAddon.java | 28 +++ .../bukkit/nms/v1_19_R1/NMSBiomeInjector.java | 99 +++++----- .../bukkit/nms/v1_19_R1/NMSInitializer.java | 15 -- .../bukkit/nms/v1_19_R1/NMSPlatform.java | 94 ++++++++++ .../terra/bukkit/nms/v1_19_R1/Reflection.java | 17 ++ .../config/BiomeAdditionsSoundTemplate.java | 27 +++ .../config/BiomeMoodSoundTemplate.java | 35 ++++ .../config/BiomeParticleConfigTemplate.java | 33 ++++ .../v1_19_R1/config/EntityTypeTemplate.java | 20 ++ .../v1_19_R1/config/MusicSoundTemplate.java | 35 ++++ .../v1_19_R1/config/SoundEventTemplate.java | 29 +++ .../nms/v1_19_R1/config/SpawnCostConfig.java | 38 ++++ .../v1_19_R1/config/SpawnEntryTemplate.java | 31 ++++ .../config/SpawnSettingsTemplate.java | 43 +++++ .../nms/v1_19_R1/config/SpawnTypeConfig.java | 32 ++++ .../config/VanillaBiomeProperties.java | 174 ++++++++++++++++++ .../v1_19_R1/config/VillagerTypeTemplate.java | 20 ++ 24 files changed, 774 insertions(+), 198 deletions(-) delete mode 100644 platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/config/VanillaBiomeProperties.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSAddon.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeAdditionsSoundTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeMoodSoundTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeParticleConfigTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/EntityTypeTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SoundEventTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnCostConfig.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VillagerTypeTemplate.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 ac215b83e..a0fa8362d 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 @@ -7,31 +7,18 @@ import com.dfsek.terra.api.addon.BaseAddon; 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.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; } - @Override - public void 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(); - } - + @Override public Version getVersion() { return VERSION; 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 bba0e1bc1..f802fcac5 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 @@ -117,7 +117,7 @@ public class PlatformImpl extends AbstractPlatform { } - private BukkitPlatformBiome parseBiome(String id, DepthTracker depthTracker) throws LoadException { + protected BukkitPlatformBiome parseBiome(String id, DepthTracker depthTracker) throws LoadException { if(!id.startsWith("minecraft:")) throw new LoadException("Invalid biome identifier " + id, depthTracker); return new BukkitPlatformBiome(org.bukkit.block.Biome.valueOf(id.toUpperCase(Locale.ROOT).substring(10))); } 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 6390444f2..b3d8c1d36 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 @@ -47,7 +47,7 @@ import com.dfsek.terra.bukkit.world.BukkitAdapter; public class TerraBukkitPlugin extends JavaPlugin { private static final Logger logger = LoggerFactory.getLogger(TerraBukkitPlugin.class); - private final PlatformImpl platform = new PlatformImpl(this); + private PlatformImpl platform; private final Map generatorMap = new HashMap<>(); @Override @@ -56,6 +56,8 @@ public class TerraBukkitPlugin extends JavaPlugin { return; } + platform = Initializer.init(this); + platform.getEventManager().callEvent(new PlatformInitializationEvent()); @@ -91,8 +93,6 @@ public class TerraBukkitPlugin extends JavaPlugin { Bukkit.getPluginManager().registerEvents(new CommonListener(), this); // Register master event listener PaperUtil.checkPaper(this); - - Initializer.init(platform); } public PlatformImpl getPlatform() { 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 8b2d77e50..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 2c8f1c211..8b7085f86 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.TerraBukkitPlugin; + import org.bukkit.Bukkit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,30 +13,35 @@ public interface Initializer { String NMS = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; String TERRA_PACKAGE = Initializer.class.getPackageName(); - static void init(PlatformImpl platform) { + static PlatformImpl init(TerraBukkitPlugin plugin) { Logger logger = LoggerFactory.getLogger(Initializer.class); try { - Class initializerClass = Class.forName(TERRA_PACKAGE + "." + NMS + ".NMSInitializer"); + Class initializerClass = Class.forName(TERRA_PACKAGE + "." + NMS + ".NMSPlatform"); try { - Initializer initializer = (Initializer) initializerClass.getConstructor().newInstance(); - initializer.initialize(platform); + return (PlatformImpl) initializerClass.getConstructor().newInstance(plugin); } catch(ReflectiveOperationException e) { throw new RuntimeException("Error initializing NMS bindings. Report this to Terra.", e); } } catch(ClassNotFoundException e) { - 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."); - logger.error(""); - logger.error(""); - for(int i = 0; i < 20; i++) { - logger.error("PROCEEDING WITH AN EXISTING TERRA WORLD WILL RESULT IN CORRUPTION!!!"); - } - logger.error(""); - logger.error(""); - 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."); + Runnable runnable = () -> { // scary big block of text + logger.error("NMS bindings for version {} do not exist.", NMS); + logger.error("This is usually due to running Terra on an unsupported Minecraft version."); + logger.error("Terra will now be DISABLED."); + logger.error(""); + logger.error(""); + for(int i = 0; i < 20; i++) { + logger.error("PROCEEDING WITH AN EXISTING TERRA WORLD WILL RESULT IN CORRUPTION!!!"); + } + logger.error(""); + logger.error(""); + logger.error("NMS bindings for version {} do not exist.", NMS); + logger.error("This is usually due to running Terra on an unsupported Minecraft version."); + logger.error("Terra will now be DISABLED."); + }; + runnable.run(); + Bukkit.getScheduler().scheduleAsyncDelayedTask(plugin, runnable, 200L); + Bukkit.getPluginManager().disablePlugin(plugin); } + return null; } - - void initialize(PlatformImpl plugin); } 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 index 6271e4632..2fa3b8f43 100644 --- 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 @@ -11,7 +11,6 @@ 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 { 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 index 3bce51cdd..851333a4c 100644 --- 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 @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; + import com.google.common.collect.ImmutableMap; import com.mojang.serialization.Lifecycle; import net.minecraft.core.Holder; @@ -10,8 +12,8 @@ import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.npc.VillagerType; import net.minecraft.world.level.biome.Biome; -import org.bukkit.NamespacedKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,6 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; import com.dfsek.terra.registry.master.ConfigRegistry; @@ -28,7 +31,8 @@ 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 final Map, List> + TERRA_BIOME_TAG_MAP = new HashMap<>(); public static void registerBiomes(ConfigRegistry configRegistry) { try { @@ -40,22 +44,27 @@ public class AwfulBukkitHacks { 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))); - + + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + + Biome platform = NMSBiomeInjector.createBiome(vanillaBiomeProperties); + 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()); + Map villagerMap = Reflection.VILLAGER_TYPE.getByBiome(); + + villagerMap.put(ResourceKey.create(Registry.BIOME_REGISTRY, delegateKey.location()), + Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); + + for(ResourceLocation tag : vanillaBiomeProperties.getTags()) { + TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.create(Registry.BIOME_REGISTRY, tag), new ArrayList<>()).add(delegateKey.location()); + } LOGGER.debug("Registered biome: " + delegateKey); } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { @@ -64,47 +73,25 @@ public class AwfulBukkitHacks { })); Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); + + LOGGER.info("Doing data-driven biome tag garbage...."); + LOGGER.info("who let this data drive?"); 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))); + + TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { + collect.getOrDefault(tag, new ArrayList<>()) + .addAll(biomeList.stream() + .map(biomeRegistry::getOptional) + .filter(Optional::isPresent) + .map(Optional::get) + .map(Holder::direct) + .toList()); + }); biomeRegistry.resetTags(); biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSAddon.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSAddon.java new file mode 100644 index 000000000..a66bd9804 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSAddon.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1; + +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_19_R1.config.VanillaBiomeProperties; + + +public class NMSAddon extends BukkitAddon { + public NMSAddon(PlatformImpl terraBukkitPlugin) { + super(terraBukkitPlugin); + } + + @Override + public void 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_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 index 8a5d56c35..78e99db0e 100644 --- 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 @@ -1,9 +1,13 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; + 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.Biome.BiomeBuilder; +import net.minecraft.world.level.biome.BiomeGenerationSettings; import net.minecraft.world.level.biome.BiomeSpecialEffects; import java.util.Locale; @@ -11,7 +15,6 @@ 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 { @@ -22,54 +25,64 @@ public class NMSBiomeInjector { .map(registry::getOrCreateHolderOrThrow); } - public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) + public static Biome createBiome(VanillaBiomeProperties vanillaBiomeProperties) 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()); - - + + BiomeGenerationSettings.Builder generationSettings = new BiomeGenerationSettings.Builder(); + 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 { + + net.minecraft.world.level.biome.Biome.BiomeBuilder builder = new BiomeBuilder(); + + effects.waterColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterColor())) + .waterFogColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterFogColor())) + .fogColor(Objects.requireNonNull(vanillaBiomeProperties.getFogColor())) + .skyColor(Objects.requireNonNull(vanillaBiomeProperties.getSkyColor())) + .grassColorModifier( + Objects.requireNonNull(vanillaBiomeProperties.getGrassColorModifier())); + + if(vanillaBiomeProperties.getFoliageColor() != null) { effects.foliageColorOverride(vanillaBiomeProperties.getFoliageColor()); } - - if(vanillaBiomeProperties.getGrassColor() == null) { - vanilla.getSpecialEffects().getGrassColorOverride().ifPresent(effects::grassColorOverride); - } else { - // grass + + if(vanillaBiomeProperties.getGrassColor() != null) { 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(); + + if(vanillaBiomeProperties.getParticleConfig() != null) { + effects.ambientParticle(vanillaBiomeProperties.getParticleConfig()); + } + + if(vanillaBiomeProperties.getLoopSound() != null) { + effects.ambientLoopSound(vanillaBiomeProperties.getLoopSound()); + } + + if(vanillaBiomeProperties.getMoodSound() != null) { + effects.ambientMoodSound(vanillaBiomeProperties.getMoodSound()); + } + + if(vanillaBiomeProperties.getAdditionsSound() != null) { + effects.ambientAdditionsSound(vanillaBiomeProperties.getAdditionsSound()); + } + + if(vanillaBiomeProperties.getMusic() != null) { + effects.backgroundMusic(vanillaBiomeProperties.getMusic()); + } + + builder.precipitation(Objects.requireNonNull(vanillaBiomeProperties.getPrecipitation())); + + builder.temperature(Objects.requireNonNull(vanillaBiomeProperties.getTemperature())); + + builder.downfall(Objects.requireNonNull(vanillaBiomeProperties.getDownfall())); + + builder.temperatureAdjustment(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); + + builder.mobSpawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); + + return builder + .specialEffects(effects.build()) + .generationSettings(generationSettings.build()) + .build(); } public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) { 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/NMSPlatform.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java new file mode 100644 index 000000000..a43c271ef --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java @@ -0,0 +1,94 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1; + +import com.dfsek.tectonic.api.TypeRegistry; +import com.dfsek.tectonic.api.exception.LoadException; + +import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.api.world.biome.PlatformBiome; +import com.dfsek.terra.bukkit.BukkitAddon; +import com.dfsek.terra.bukkit.TerraBukkitPlugin; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeAdditionsSoundTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeMoodSoundTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeParticleConfigTemplate; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.EntityTypeTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.MusicSoundTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SoundEventTemplate; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnCostConfig; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnEntryTemplate; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnSettingsTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnTypeConfig; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VillagerTypeTemplate; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.Music; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +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 net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; +import org.bukkit.Bukkit; + +import com.dfsek.terra.bukkit.PlatformImpl; + +import java.util.List; +import java.util.Locale; + + +public class NMSPlatform extends PlatformImpl { + + public NMSPlatform(TerraBukkitPlugin plugin) { + super(plugin); + AwfulBukkitHacks.registerBiomes(getRawConfigRegistry()); + Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), plugin); + } + + @Override + public void register(TypeRegistry registry) { + super.register(registry); + registry.registerLoader(PlatformBiome.class, (type, o, loader, depthTracker) -> parseBiome((String) o, depthTracker)) + .registerLoader(ResourceLocation.class, (type, o, loader, depthTracker) -> { + ResourceLocation identifier = ResourceLocation.tryParse((String) o); + if(identifier == null) + throw new LoadException("Invalid identifier: " + o, depthTracker); + return identifier; + }) + .registerLoader(Precipitation.class, (type, o, loader, depthTracker) -> Precipitation.valueOf(((String) o).toUpperCase( + Locale.ROOT))) + .registerLoader(GrassColorModifier.class, + (type, o, loader, depthTracker) -> GrassColorModifier.valueOf(((String) o).toUpperCase( + Locale.ROOT))) + .registerLoader(GrassColorModifier.class, + (type, o, loader, depthTracker) -> TemperatureModifier.valueOf(((String) o).toUpperCase( + Locale.ROOT))) + .registerLoader(MobCategory.class, (type, o, loader, depthTracker) -> MobCategory.valueOf((String) o)) + .registerLoader(AmbientParticleSettings.class, BiomeParticleConfigTemplate::new) + .registerLoader(SoundEvent.class, SoundEventTemplate::new) + .registerLoader(AmbientMoodSettings.class, BiomeMoodSoundTemplate::new) + .registerLoader(AmbientAdditionsSettings.class, BiomeAdditionsSoundTemplate::new) + .registerLoader(Music.class, MusicSoundTemplate::new) + .registerLoader(EntityType.class, EntityTypeTemplate::new) + .registerLoader(SpawnCostConfig.class, SpawnCostConfig::new) + .registerLoader(SpawnerData.class, SpawnEntryTemplate::new) + .registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new) + .registerLoader(MobSpawnSettings.class, SpawnSettingsTemplate::new) + .registerLoader(VillagerType.class, VillagerTypeTemplate::new); + } + + @Override + protected Iterable platformAddon() { + return List.of(new NMSAddon(this)); + } +} 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 index 8fa9a0b01..fa35491db 100644 --- 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 @@ -1,21 +1,31 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; import net.minecraft.core.MappedRegistry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.entity.npc.VillagerType; +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; +import xyz.jpenilla.reflectionremapper.proxy.annotation.Static; + +import java.util.Map; public class Reflection { public static final MappedRegistryProxy MAPPED_REGISTRY; + public static final VillagerTypeProxy VILLAGER_TYPE; + static { ReflectionRemapper reflectionRemapper = ReflectionRemapper.forReobfMappingsInPaperJar(); ReflectionProxyFactory reflectionProxyFactory = ReflectionProxyFactory.create(reflectionRemapper, Reflection.class.getClassLoader()); MAPPED_REGISTRY = reflectionProxyFactory.reflectionProxy(MappedRegistryProxy.class); + VILLAGER_TYPE = reflectionProxyFactory.reflectionProxy(VillagerTypeProxy.class); } @@ -24,4 +34,11 @@ public class Reflection { @FieldSetter("frozen") void setFrozen(MappedRegistry instance, boolean frozen); } + + @Proxies(VillagerTypeProxy.class) + public interface VillagerTypeProxy { + @Static + @FieldGetter("BY_BIOME") + Map, VillagerType> getByBiome(); + } } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeAdditionsSoundTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeAdditionsSoundTemplate.java new file mode 100644 index 000000000..fe9b970aa --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeAdditionsSoundTemplate.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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.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(sound, soundChance); + } + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeMoodSoundTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeMoodSoundTemplate.java new file mode 100644 index 000000000..842dc052c --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeMoodSoundTemplate.java @@ -0,0 +1,35 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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.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(sound, soundCultivationTicks, soundSpawnRange, soundExtraDistance); + } + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeParticleConfigTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeParticleConfigTemplate.java new file mode 100644 index 000000000..42988da4e --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/BiomeParticleConfigTemplate.java @@ -0,0 +1,33 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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.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)), probability); + } catch(CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/EntityTypeTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/EntityTypeTemplate.java new file mode 100644 index 000000000..44fffa6ab --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/EntityTypeTemplate.java @@ -0,0 +1,20 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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.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 Registry.ENTITY_TYPE.get(id); + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java new file mode 100644 index 000000000..0e8594a53 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java @@ -0,0 +1,35 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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.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(sound, minDelay, maxDelay, replaceCurrentMusic); + } + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SoundEventTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SoundEventTemplate.java new file mode 100644 index 000000000..382d56541 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SoundEventTemplate.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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 new SoundEvent(id); + } else { + return new SoundEvent(id, distanceToTravel); + } + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnCostConfig.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnCostConfig.java new file mode 100644 index 000000000..26cbcf8bc --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnCostConfig.java @@ -0,0 +1,38 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java new file mode 100644 index 000000000..8809349f9 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java new file mode 100644 index 000000000..6f088fdab --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java @@ -0,0 +1,43 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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; + + +public class SpawnSettingsTemplate implements ObjectTemplate { + @Value("spawns") + @Default + private List spawns = null; + + @Value("costs") + @Default + private List costs = null; + + @Value("probability") + @Default + private Float probability = null; + + @Override + public MobSpawnSettings get() { + MobSpawnSettings.Builder builder = new MobSpawnSettings.Builder(); + for(SpawnTypeConfig spawn : spawns) { + MobCategory group = spawn.getGroup(); + for (SpawnerData entry : spawn.getEntry()) { + builder.addSpawn(group, entry); + } + } + for(SpawnCostConfig cost : costs) { + builder.addMobCharge(cost.getType(), cost.getMass(), cost.getGravity()); + } + if(probability != null) { + builder.creatureGenerationProbability(probability); + } + + return builder.build(); + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java new file mode 100644 index 000000000..a98956405 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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 entry = null; + + public MobCategory getGroup() { + return group; + } + + public List getEntry() { + return entry; + } + + @Override + public SpawnTypeConfig get() { + return this; + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java new file mode 100644 index 000000000..bc3e10930 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java @@ -0,0 +1,174 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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("minecraft.tags") + @Default + private List tags = null; + + @Value("minecraft.colors.grass") + @Default + private Integer grassColor = null; + + @Value("minecraft.colors.fog") + @Default + private Integer fogColor = null; + + @Value("minecraft.colors.water") + @Default + private Integer waterColor = null; + + @Value("minecraft.colors.water-fog") + @Default + private Integer waterFogColor = null; + + @Value("minecraft.colors.foliage") + @Default + private Integer foliageColor = null; + + @Value("minecraft.colors.sky") + @Default + private Integer skyColor = null; + + @Value("minecraft.colors.modifier") + @Default + private GrassColorModifier grassColorModifier = null; + + @Value("minecraft.particles") + @Default + private AmbientParticleSettings particleConfig = null; + + @Value("minecraft.climate.precipitation") + @Default + private Precipitation precipitation = null; + + @Value("minecraft.climate.temperature") + @Default + private Float temperature = null; + + @Value("minecraft.climate.temperature-modifier") + @Default + private TemperatureModifier temperatureModifier = null; + + @Value("minecraft.climate.downfall") + @Default + private Float downfall = null; + + @Value("minecraft.sound.loop-sound.sound") + @Default + private SoundEvent loopSound = null; + + @Value("minecraft.sound.mood-sound") + @Default + private AmbientMoodSettings moodSound = null; + + @Value("minecraft.sound.additions-sound") + @Default + private AmbientAdditionsSettings additionsSound = null; + + @Value("minecraft.sound.music") + @Default + private Music music = null; + + @Value("minecraft.spawning") + @Default + private MobSpawnSettings spawnSettings = null; + + @Value("minecraft.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 Precipitation 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_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VillagerTypeTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VillagerTypeTemplate.java new file mode 100644 index 000000000..1de0ea0cb --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VillagerTypeTemplate.java @@ -0,0 +1,20 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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.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 Registry.VILLAGER_TYPE.get(id); + } +} From ba6d4649c61e026d9a6c14b37bc28776543f5c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Mon, 11 Jul 2022 15:16:54 -0700 Subject: [PATCH 06/17] remove bukkit 1.18 --- platforms/bukkit/build.gradle.kts | 1 - .../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 | 78 ------ .../bukkit/nms/v1_18_R2/NMSBiomeProvider.java | 49 ---- .../v1_18_R2/NMSChunkGeneratorDelegate.java | 253 ------------------ .../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 --- 12 files changed, 695 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 diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index ee85af57a..8a00fd79d 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -8,7 +8,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("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 2fa163cee..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", "0.1.0-SNAPSHOT") -} - -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 e125ffb68..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 2fa3b8f43..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java +++ /dev/null @@ -1,78 +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; - - -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 111b2802b..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 395ea949c..000000000 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSChunkGeneratorDelegate.java +++ /dev/null @@ -1,253 +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.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(Math.cos(d0) * d1); - int l1 = (int) Math.round(Math.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 55408a136..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 73b009fc4..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 9e226cb8d..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 3902b61d3..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); - } -} From 50377a1b898f1aeaa3469f18afa0583ac12673a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Mon, 11 Jul 2022 21:49:16 -0700 Subject: [PATCH 07/17] Fabric/Quilt fertilization support --- buildSrc/src/main/kotlin/Versions.kt | 10 ++- .../config/VanillaBiomeProperties.java | 4 +- platforms/fabric/build.gradle.kts | 6 ++ .../terra/fabric/FabricASMEntryPoint.java | 19 +++++ .../terra/fabric/util/FabricLoaderUtil.java | 18 +++++ .../fabric/src/main/resources/fabric.mod.json | 3 + .../mod/config/VanillaBiomeProperties.java | 38 ++++++--- .../terra/mod/mixin/FertilizableMixin.java | 10 +++ .../com/dfsek/terra/mod/util/BiomeUtil.java | 27 +++++-- .../terra/mod/util/FertilizableUtil.java | 34 ++++++++ .../dfsek/terra/mod/util/MinecraftUtil.java | 6 -- .../com/dfsek/terra/mod/util/TagUtil.java | 2 +- platforms/mixin-lifecycle/build.gradle.kts | 5 ++ .../terra/lifecycle/asm/FertilizableASM.java | 81 +++++++++++++++++++ .../dfsek/terra/lifecycle/util/ASMUtil.java | 56 +++++++++++++ .../terra/lifecycle/util/LoaderUtil.java | 9 +++ platforms/quilt/build.gradle.kts | 8 ++ .../dfsek/terra/quilt/QuiltASMEntryPoint.java | 17 ++++ .../terra/quilt/util/QuiltLoaderUtil.java | 18 +++++ .../quilt/src/main/resources/quilt.mod.json | 3 + 20 files changed, 342 insertions(+), 32 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java create mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java create mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java create mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LoaderUtil.java create mode 100644 platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java create mode 100644 platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 6d0a1e2e0..d2d0af695 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -29,16 +29,18 @@ object Versions { object Mod { const val mixin = "0.11.2+mixin.0.8.5" - + const val minecraft = "1.19" const val yarn = "$minecraft+build.1" const val fabricLoader = "0.14.2" - + + const val minecraftGudAsm = "v0.3.1" + const val architecuryLoom = "0.12.0.290" const val architecturyPlugin = "3.4-SNAPSHOT" - + const val loomQuiltflower = "1.7.1" - + const val lazyDfu = "0.1.2" } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java index bc3e10930..ebe54c996 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java @@ -3,7 +3,6 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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; @@ -15,6 +14,9 @@ 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 java.util.List; + import com.dfsek.terra.api.properties.Properties; diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 7ed3f2e75..dbe104cdd 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -12,6 +12,12 @@ architectury { dependencies { shadedApi(project(":common:implementation:base")) + annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") + annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}") + + modImplementation("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") + include("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") + implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } "developmentFabric"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionFabric")) { isTransitive = false } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java new file mode 100644 index 000000000..afd877f0b --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java @@ -0,0 +1,19 @@ +package com.dfsek.terra.fabric; + +import com.dfsek.terra.fabric.util.FabricLoaderUtil; + +import net.gudenau.minecraft.asm.api.v1.AsmInitializer; +import net.gudenau.minecraft.asm.api.v1.AsmRegistry; + +import com.dfsek.terra.lifecycle.asm.FertilizableASM; +import com.dfsek.terra.lifecycle.util.LoaderUtil; +import com.dfsek.terra.quilt.util.QuiltLoaderUtil; + + +public class FabricASMEntryPoint implements AsmInitializer { + @Override + public void onInitializeAsm() { + LoaderUtil.INSTANCE = new FabricLoaderUtil(); + AsmRegistry.getInstance().registerTransformer(new FertilizableASM()); + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java new file mode 100644 index 000000000..a9813edbf --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java @@ -0,0 +1,18 @@ +package com.dfsek.terra.fabric.util; + +import com.dfsek.terra.lifecycle.util.LoaderUtil; + +import net.fabricmc.loader.api.FabricLoader; + + +public class FabricLoaderUtil extends LoaderUtil { + @Override + public String mapClassName(String namespace, String className) { + return FabricLoader.getInstance().getMappingResolver().mapClassName(namespace, className); + } + + @Override + public String mapMethodName(String namespace, String owner, String name, String descriptor) { + return FabricLoader.getInstance().getMappingResolver().mapMethodName(namespace, owner, name, descriptor); + } +} diff --git a/platforms/fabric/src/main/resources/fabric.mod.json b/platforms/fabric/src/main/resources/fabric.mod.json index e71bcfeac..4647d6933 100644 --- a/platforms/fabric/src/main/resources/fabric.mod.json +++ b/platforms/fabric/src/main/resources/fabric.mod.json @@ -18,6 +18,9 @@ "entrypoints": { "main": [ "com.dfsek.terra.fabric.FabricEntryPoint" + ], + "gud_asm": [ + "com.dfsek.terra.fabric.FabricASMEntryPoint" ] }, "mixins": [ 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 34a75d50d..f996b31b5 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 @@ -15,44 +15,52 @@ import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; import net.minecraft.world.biome.BiomeParticleConfig; import net.minecraft.world.biome.SpawnSettings; +import java.util.Collections; import java.util.List; +import java.util.Map; import com.dfsek.terra.api.properties.Properties; +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; public class VanillaBiomeProperties implements ConfigTemplate, Properties { + @Value("minecraft.fertilizables") + @Default + private Map> fertilizables = Collections.emptyMap(); + @Value("minecraft.tags") @Default - private List tags = null; + private List tags = Collections.emptyList(); @Value("minecraft.colors.grass") @Default - private Integer grassColor = null; + private Integer grassColor = 0; @Value("minecraft.colors.fog") @Default - private Integer fogColor = null; + private Integer fogColor = 0; @Value("minecraft.colors.water") @Default - private Integer waterColor = null; + private Integer waterColor = 0; @Value("minecraft.colors.water-fog") @Default - private Integer waterFogColor = null; + private Integer waterFogColor = 0; @Value("minecraft.colors.foliage") @Default - private Integer foliageColor = null; + private Integer foliageColor = 0; @Value("minecraft.colors.sky") @Default - private Integer skyColor = null; + private Integer skyColor = 0; @Value("minecraft.colors.modifier") @Default - private GrassColorModifier grassColorModifier = null; + private GrassColorModifier grassColorModifier = GrassColorModifier.NONE; @Value("minecraft.particles") @Default @@ -60,19 +68,19 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Value("minecraft.climate.precipitation") @Default - private Precipitation precipitation = null; + private Precipitation precipitation = Precipitation.NONE; @Value("minecraft.climate.temperature") @Default - private Float temperature = null; + private Float temperature = 0.0f; @Value("minecraft.climate.temperature-modifier") @Default - private TemperatureModifier temperatureModifier = null; + private TemperatureModifier temperatureModifier = TemperatureModifier.NONE; @Value("minecraft.climate.downfall") @Default - private Float downfall = null; + private Float downfall = 0.0f; @Value("minecraft.sound.loop-sound.sound") @Default @@ -92,12 +100,16 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Value("minecraft.spawning") @Default - private SpawnSettings spawnSettings = null; + private SpawnSettings spawnSettings = SpawnSettings.INSTANCE; @Value("minecraft.villager-type") @Default private VillagerType villagerType = null; + public Map> getFertilizables() { + return fertilizables; + } + public List getTags() { return tags; } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java new file mode 100644 index 000000000..141e5a79b --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java @@ -0,0 +1,10 @@ +package com.dfsek.terra.mod.mixin; + +import net.minecraft.block.Fertilizable; +import org.spongepowered.asm.mixin.Mixin; + + +@Mixin(Fertilizable.class) +public class FertilizableMixin { + +} 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 2b592e812..9da187845 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 @@ -4,16 +4,21 @@ import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryEntry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.village.VillagerType; 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.api.config.ConfigPack; +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.mod.CommonPlatform; import com.dfsek.terra.mod.config.ProtoPlatformBiome; @@ -24,6 +29,12 @@ import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; public class BiomeUtil { private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); + public static final Map, Map>> + TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>(); + + public static final Map, List> + TERRA_BIOME_TAG_MAP = new HashMap<>(); + public static void registerBiomes() { logger.info("Registering biomes..."); CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. @@ -55,20 +66,22 @@ public class BiomeUtil { protected static void registerBiome(Biome biome, ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey id) { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(vanillaBiomeProperties); - + Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); - + biome.setPlatformBiome(new ProtoPlatformBiome(identifier, registerBiome(identifier, minecraftBiome))); - + Map villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap(); - + villagerMap.put(RegistryKey.of(Registry.BIOME_KEY, identifier), Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); - + + TERRA_BIOME_FERTILIZABLE_MAP.put(RegistryEntry.of(minecraftBiome), vanillaBiomeProperties.getFertilizables()); + for(Identifier tag : vanillaBiomeProperties.getTags()) { - MinecraftUtil.TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.of(Registry.BIOME_KEY, tag), new ArrayList<>()).add(identifier); + TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.of(Registry.BIOME_KEY, tag), new ArrayList<>()).add(identifier); } } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java new file mode 100644 index 000000000..67a17e96b --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java @@ -0,0 +1,34 @@ +package com.dfsek.terra.mod.util; + +import com.dfsek.terra.api.util.Rotation; +import com.dfsek.terra.api.util.vector.Vector3Int; + +import com.dfsek.terra.api.world.WritableWorld; + +import net.minecraft.block.BlockState; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; +import net.minecraft.util.registry.Registry; + +import java.util.Map; + +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; + + +public class FertilizableUtil { + public static boolean grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + Map> fertilizables = BiomeUtil.TERRA_BIOME_FERTILIZABLE_MAP.get(world.getBiome(pos)); + if (fertilizables != null) { + ProbabilityCollection probabilityCollection = fertilizables.get(Registry.BLOCK.getId(state.getBlock())); + if (probabilityCollection != null) { + ConfiguredStructure structure = probabilityCollection.get((java.util.Random) random); + structure.getStructure().get((java.util.Random) random).generate(Vector3Int.of(pos.getX(), pos.getY(), pos.getZ()), (WritableWorld) world, (java.util.Random) random, Rotation.NONE); + return true; + } + } + return false; + } +} 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 7bc86be92..941f85b2c 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 @@ -3,7 +3,6 @@ package com.dfsek.terra.mod.util; import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.block.entity.SignBlockEntity; -import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; @@ -17,10 +16,7 @@ import net.minecraft.world.biome.GenerationSettings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; -import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -35,8 +31,6 @@ import com.dfsek.terra.mod.config.VanillaBiomeProperties; public final class MinecraftUtil { public static final Logger logger = LoggerFactory.getLogger(MinecraftUtil.class); - public static final Map, List> - TERRA_BIOME_TAG_MAP = new HashMap<>(); private MinecraftUtil() { 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 e8adbf829..e9c6151c5 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 @@ -56,7 +56,7 @@ public final class TagUtil { logger.info("who let this data drive?"); Map, List>> collect = tagsToMutableMap(registry); - MinecraftUtil.TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { + BiomeUtil.TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { collect.getOrDefault(tag, new ArrayList<>()) .addAll(biomeList.stream() .map(registry::getOrEmpty) diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts index e8b852dc5..f3cbd5486 100644 --- a/platforms/mixin-lifecycle/build.gradle.kts +++ b/platforms/mixin-lifecycle/build.gradle.kts @@ -11,6 +11,11 @@ dependencies { annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}") + modImplementation("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") + } + implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java new file mode 100644 index 000000000..1f32e2d99 --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java @@ -0,0 +1,81 @@ +package com.dfsek.terra.lifecycle.asm; + +import com.dfsek.terra.mod.util.FertilizableUtil; + +import net.gudenau.minecraft.asm.api.v1.Identifier; +import net.gudenau.minecraft.asm.api.v1.Transformer; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.JumpInsnNode; +import org.objectweb.asm.tree.LabelNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; + +import java.io.IOException; + +import com.dfsek.terra.lifecycle.util.ASMUtil; +import com.dfsek.terra.lifecycle.util.LoaderUtil; + +import org.objectweb.asm.tree.VarInsnNode; + +import static org.objectweb.asm.Opcodes.ACC_STATIC; + + +public class FertilizableASM implements Transformer { + + private static String fertilizableClassName = LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_2256"); + + private static String fertilizableGrowMethodSignatureBase = String.format("(L%1$s;L%2$s;L%3$s;L%4$s;)", + LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_3218").replace(".", "/"), + LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_5819").replace(".", "/"), + LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_2338").replace(".", "/"), + LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_2680").replace(".", "/")); + + private static String fertilizableGrowMethodSignature = fertilizableGrowMethodSignatureBase + "V"; + + private static String fertilizableGrowMethodName = LoaderUtil.INSTANCE.mapMethodName("intermediary", "net.minecraft.class_2256", "method_9652", "(Lnet/minecraft/class_3218;Lnet/minecraft/class_5819;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V"); + + @Override + public Identifier getName() { + return new Identifier("terra", "asm_test"); + } + + @Override + public boolean handlesClass(String name, String transformedName) { + return true; + } + + @Override + public boolean transform(ClassNode classNode, Flags flags) { + try { + if (ASMUtil.inheritsFrom(classNode, fertilizableClassName.replace(".", "/"))) { + for (MethodNode method : classNode.methods) { + if (method.name.equals(fertilizableGrowMethodName)) { + if ((method.access & ACC_STATIC) == 0) { + if(method.desc.equals(fertilizableGrowMethodSignature)) { + InsnList list = new InsnList(); + list.add(new VarInsnNode(Opcodes.ALOAD, 1)); + list.add(new VarInsnNode(Opcodes.ALOAD, 2)); + list.add(new VarInsnNode(Opcodes.ALOAD, 3)); + list.add(new VarInsnNode(Opcodes.ALOAD, 4)); + list.add(new MethodInsnNode(Opcodes.INVOKESTATIC, FertilizableUtil.class.getName().replace(".", "/"), "grow", fertilizableGrowMethodSignatureBase + "Z", false)); + LabelNode jmp = new LabelNode(); + list.add(new JumpInsnNode(Opcodes.IFNE, jmp)); + list.add(new InsnNode(Opcodes.RETURN)); + list.add(jmp); + method.instructions.insertBefore(method.instructions.getFirst(), list); + flags.requestFrames(); + return true; + } + } + } + } + } + } catch(IOException e) { + throw new RuntimeException(e); + } + return false; + } +} diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java new file mode 100644 index 000000000..918c398b1 --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java @@ -0,0 +1,56 @@ +package com.dfsek.terra.lifecycle.util; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.tree.ClassNode; + +import java.io.IOException; +import java.util.WeakHashMap; + +import static org.objectweb.asm.ClassReader.SKIP_CODE; +import static org.objectweb.asm.ClassReader.SKIP_DEBUG; +import static org.objectweb.asm.ClassReader.SKIP_FRAMES; + + +public class ASMUtil { + static final ThreadLocal>> INHERITANCE_CACHE = new ThreadLocal<>(); + + public static boolean inheritsFrom(ClassNode classNode, String interfaceName) throws IOException { + if (INHERITANCE_CACHE.get() == null) { + INHERITANCE_CACHE.set(new WeakHashMap<>()); + } + return inheritsFromInternal(classNode, interfaceName); + } + + protected static boolean inheritsFromInternal(ClassNode classNode, String interfaceName) throws IOException { + if (INHERITANCE_CACHE.get().containsKey(classNode.name)) { + if (INHERITANCE_CACHE.get().get(classNode.name).containsKey(interfaceName)) { + return INHERITANCE_CACHE.get().get(classNode.name).get(interfaceName); + } + } + for (String parent : classNode.interfaces) { + if (checkClass(parent, interfaceName)) { + return true; + } + } + if (checkClass(classNode.superName, interfaceName)) { + return true; + } + INHERITANCE_CACHE.get().getOrDefault(classNode.name, new WeakHashMap<>()).put(interfaceName, false); + return false; + } + + protected static boolean checkClass(String name, String interfaceName) throws IOException { + if (name.startsWith("java/")) { + return false; + } + + boolean isClass = name.equals(interfaceName); + INHERITANCE_CACHE.get().getOrDefault(name, new WeakHashMap<>()).put(interfaceName, isClass); + if (isClass) { + return true; + } + ClassNode node = new ClassNode(); + new ClassReader(name).accept(node, SKIP_CODE | SKIP_DEBUG | SKIP_FRAMES); + return inheritsFromInternal(node, interfaceName); + } +} diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LoaderUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LoaderUtil.java new file mode 100644 index 000000000..3fc7898c6 --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/LoaderUtil.java @@ -0,0 +1,9 @@ +package com.dfsek.terra.lifecycle.util; + +public abstract class LoaderUtil { + public static LoaderUtil INSTANCE; + + public abstract String mapClassName(String namespace, String className); + + public abstract String mapMethodName(String namespace, String owner, String name, String descriptor); +} diff --git a/platforms/quilt/build.gradle.kts b/platforms/quilt/build.gradle.kts index 940045d47..52af2ed18 100644 --- a/platforms/quilt/build.gradle.kts +++ b/platforms/quilt/build.gradle.kts @@ -15,6 +15,14 @@ dependencies { annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}") + modImplementation("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") + } + include("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") + } implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } "developmentQuilt"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java new file mode 100644 index 000000000..4ecd2b7d7 --- /dev/null +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java @@ -0,0 +1,17 @@ +package com.dfsek.terra.quilt; + +import net.gudenau.minecraft.asm.api.v1.AsmInitializer; +import net.gudenau.minecraft.asm.api.v1.AsmRegistry; + +import com.dfsek.terra.lifecycle.asm.FertilizableASM; +import com.dfsek.terra.lifecycle.util.LoaderUtil; +import com.dfsek.terra.quilt.util.QuiltLoaderUtil; + + +public class QuiltASMEntryPoint implements AsmInitializer { + @Override + public void onInitializeAsm() { + LoaderUtil.INSTANCE = new QuiltLoaderUtil(); + AsmRegistry.getInstance().registerTransformer(new FertilizableASM()); + } +} diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java new file mode 100644 index 000000000..19a3f4bf3 --- /dev/null +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java @@ -0,0 +1,18 @@ +package com.dfsek.terra.quilt.util; + +import com.dfsek.terra.lifecycle.util.LoaderUtil; + +import org.quiltmc.loader.api.QuiltLoader; + + +public class QuiltLoaderUtil extends LoaderUtil { + @Override + public String mapClassName(String namespace, String className) { + return QuiltLoader.getMappingResolver().mapClassName(namespace, className); + } + + @Override + public String mapMethodName(String namespace, String owner, String name, String descriptor) { + return QuiltLoader.getMappingResolver().mapMethodName(namespace, owner, name, descriptor); + } +} diff --git a/platforms/quilt/src/main/resources/quilt.mod.json b/platforms/quilt/src/main/resources/quilt.mod.json index 0f53988ec..e2151593d 100644 --- a/platforms/quilt/src/main/resources/quilt.mod.json +++ b/platforms/quilt/src/main/resources/quilt.mod.json @@ -26,6 +26,9 @@ ], "pre_launch": [ "com.dfsek.terra.quilt.QuiltPreLaunchEntryPoint" + ], + "gud_asm": [ + "com.dfsek.terra.quilt.QuiltASMEntryPoint" ] }, "depends": [ From 75b545b0be75c7109bf4f7aefa8a77f50b91f796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 12 Jul 2022 01:04:55 -0700 Subject: [PATCH 08/17] Bukkit Growing --- .../bukkit/listeners/CommonListener.java | 29 ----- .../bukkit/listeners/SpigotListener.java | 104 ------------------ .../bukkit/nms/v1_19_R1/AwfulBukkitHacks.java | 17 ++- .../nms/v1_19_R1/NMSInjectListener.java | 34 +++++- .../config/VanillaBiomeProperties.java | 12 ++ .../nms/v1_19_R1/util/FertilizableUtil.java | 29 +++++ .../com/dfsek/terra/mod}/util/ASMUtil.java | 2 +- .../terra/lifecycle/asm/FertilizableASM.java | 8 +- 8 files changed, 87 insertions(+), 148 deletions(-) delete mode 100644 platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java delete mode 100644 platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java rename platforms/{mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle => mixin-common/src/main/java/com/dfsek/terra/mod}/util/ASMUtil.java (98%) diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java deleted file mode 100644 index 84d836fd7..000000000 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.bukkit.listeners; - -import org.bukkit.event.Listener; - - -/** - * Listener for events on all implementations. - */ -public class CommonListener implements Listener { - public CommonListener() { - } -} diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java deleted file mode 100644 index 796053e82..000000000 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.bukkit.listeners; - -import org.bukkit.entity.Villager; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntitySpawnEvent; -import org.bukkit.event.entity.VillagerAcquireTradeEvent; -import org.bukkit.event.entity.VillagerCareerChangeEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.dfsek.terra.api.Platform; - - -/** - * Listener to load on Spigot servers, contains Villager crash prevention and hacky ender eye redirection. - *

- * (This is currently loaded on all servers; once Paper accepts the StructureLocateEvent PR this will only be loaded on servers without - * StructureLocateEvent). - */ -public class SpigotListener implements Listener { - private static final Logger logger = LoggerFactory.getLogger(SpigotListener.class); - private final Platform platform; - - public SpigotListener(Platform platform) { - this.platform = platform; - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onEnderEye(EntitySpawnEvent e) { -/* - Entity entity = e.getEntity(); - if(e.getEntityType() == EntityType.ENDER_SIGNAL) { - logger.info("Detected Ender Signal..."); - World w = BukkitAdapter.adapt(e.getEntity().getWorld()); - EnderSignal signal = (EnderSignal) entity; - ConfiguredStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(w.getConfig().getLocatable().get - ("STRONGHOLD")); - if(config != null) { - logger.info("Overriding Ender Signal..."); - AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation() - .toVector()), tw.getWorld(), 0, 500, location -> { - if(location != null) - signal.setTargetLocation(BukkitAdapter.adapt(location).toLocation(e.getLocation().getWorld())); - logger.info("Location: {}", location); - }, main); - finder.run(); // Do this synchronously so eye doesn't change direction several ticks after spawning. - } else - logger.warn("No overrides are defined for Strongholds. Ender Signals will not work correctly."); - } -*/ - } - - @EventHandler - public void onCartographerChange(VillagerAcquireTradeEvent e) { - if(!(e.getEntity() instanceof Villager)) - return; - if(((Villager) e.getEntity()).getProfession() == Villager.Profession.CARTOGRAPHER) { - logger.error(""" - .------------------------------------------------------------------------. - | Prevented server crash by stopping Cartographer villager from | - | spawning. Please upgrade to Paper, which has a StructureLocateEvent | - | that fixes this issue at the source, and doesn't require us to do | - | stupid band-aids. | - |------------------------------------------------------------------------| - """.strip()); - e.setCancelled(true); // Cancel leveling if the villager is a Cartographer, to prevent crashing server. - } - } - - @EventHandler - public void onCartographerLevel(VillagerCareerChangeEvent e) { - if(e.getProfession() == Villager.Profession.CARTOGRAPHER) { - logger.error(""" - .------------------------------------------------------------------------. - | Prevented server crash by stopping Cartographer villager from leveling | - | up. Please upgrade to Paper, which has a StructureLocateEvent that | - | fixes this issue at the source, and doesn't require us to do stupid | - | band-aids. | - |------------------------------------------------------------------------| - """.strip()); - e.getEntity().setProfession(Villager.Profession.NITWIT); // Give villager new profession to prevent server crash. - e.setCancelled(true); - } - } -} 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 index 851333a4c..f2e4b30dd 100644 --- 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 @@ -1,7 +1,5 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; - import com.google.common.collect.ImmutableMap; import com.mojang.serialization.Lifecycle; import net.minecraft.core.Holder; @@ -24,6 +22,9 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; import com.dfsek.terra.registry.master.ConfigRegistry; @@ -31,6 +32,9 @@ import com.dfsek.terra.registry.master.ConfigRegistry; public class AwfulBukkitHacks { private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); + public static final Map, Map>> + TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>(); public static final Map, List> TERRA_BIOME_TAG_MAP = new HashMap<>(); @@ -56,16 +60,19 @@ public class AwfulBukkitHacks { BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - + Map villagerMap = Reflection.VILLAGER_TYPE.getByBiome(); villagerMap.put(ResourceKey.create(Registry.BIOME_REGISTRY, delegateKey.location()), Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); + TERRA_BIOME_FERTILIZABLE_MAP.put(Holder.direct(platform), vanillaBiomeProperties.getFertilizables()); + for(ResourceLocation tag : vanillaBiomeProperties.getTags()) { - TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.create(Registry.BIOME_REGISTRY, tag), new ArrayList<>()).add(delegateKey.location()); + TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.create(Registry.BIOME_REGISTRY, tag), new ArrayList<>()).add( + delegateKey.location()); } - + LOGGER.debug("Registered biome: " + delegateKey); } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { throw new RuntimeException(e); 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 index d57689a9b..f22430a84 100644 --- 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 @@ -1,21 +1,31 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockGrowEvent; +import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.WorldInitEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashSet; +import java.util.Random; import java.util.Set; import java.util.concurrent.locks.ReentrantLock; import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.util.vector.Vector3Int; +import com.dfsek.terra.api.world.ServerWorld; import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.FertilizableUtil; +import com.dfsek.terra.bukkit.world.BukkitAdapter; public class NMSInjectListener implements Listener { @@ -38,14 +48,30 @@ public class NMSInjectListener implements Listener { 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(); } } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onBlockGrow(BlockGrowEvent event) { + Block block = event.getBlock(); + Vector3Int pos = Vector3Int.of(block.getX(), block.getY(), block.getZ()); + ServerWorld world = BukkitAdapter.adapt(block.getWorld()); + event.setCancelled(FertilizableUtil.grow(world, new Random(), pos, ResourceLocation.tryParse(block.getType().getKey().asString()))); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onStructureGow(StructureGrowEvent event) { + Block block = event.getLocation().getBlock(); + Vector3Int pos = Vector3Int.of(block.getX(), block.getY(), block.getZ()); + ServerWorld world = BukkitAdapter.adapt(block.getWorld()); + event.setCancelled(FertilizableUtil.grow(world, new Random(), pos, ResourceLocation.tryParse(block.getType().getKey().asString()))); + } } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java index ebe54c996..fd624c6c1 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java @@ -15,13 +15,21 @@ import net.minecraft.world.level.biome.Biome.TemperatureModifier; import net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier; import net.minecraft.world.level.biome.MobSpawnSettings; +import java.util.Collections; import java.util.List; +import java.util.Map; import com.dfsek.terra.api.properties.Properties; +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; public class VanillaBiomeProperties implements ConfigTemplate, Properties { + @Value("minecraft.fertilizables") + @Default + private Map> fertilizables = Collections.emptyMap(); + @Value("minecraft.tags") @Default private List tags = null; @@ -98,6 +106,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Default private VillagerType villagerType = null; + public Map> getFertilizables() { + return fertilizables; + } + public List getTags() { return tags; } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java new file mode 100644 index 000000000..caa936035 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.util; + +import net.minecraft.resources.ResourceLocation; + +import java.util.Map; +import java.util.Random; + +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.Rotation; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; +import com.dfsek.terra.api.util.vector.Vector3Int; +import com.dfsek.terra.api.world.ServerWorld; +import com.dfsek.terra.bukkit.nms.v1_19_R1.AwfulBukkitHacks; + + +public class FertilizableUtil { + public static boolean grow(ServerWorld world, Random random, Vector3Int pos, ResourceLocation block) { + Map> fertilizables = AwfulBukkitHacks.TERRA_BIOME_FERTILIZABLE_MAP.get(world.getBiomeProvider().getBiome(pos, world.getSeed())); + if (fertilizables != null) { + ProbabilityCollection probabilityCollection = fertilizables.get(block); + if (probabilityCollection != null) { + ConfiguredStructure structure = probabilityCollection.get(random); + structure.getStructure().get(random).generate(pos, world, random, Rotation.NONE); + return true; + } + } + return false; + } +} diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/ASMUtil.java similarity index 98% rename from platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java rename to platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/ASMUtil.java index 918c398b1..d424331c2 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/ASMUtil.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.lifecycle.util; +package com.dfsek.terra.mod.util; import org.objectweb.asm.ClassReader; import org.objectweb.asm.tree.ClassNode; diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java index 1f32e2d99..ff6bb8a07 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java @@ -1,7 +1,5 @@ package com.dfsek.terra.lifecycle.asm; -import com.dfsek.terra.mod.util.FertilizableUtil; - import net.gudenau.minecraft.asm.api.v1.Identifier; import net.gudenau.minecraft.asm.api.v1.Transformer; import org.objectweb.asm.Opcodes; @@ -12,13 +10,13 @@ import org.objectweb.asm.tree.JumpInsnNode; import org.objectweb.asm.tree.LabelNode; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.VarInsnNode; import java.io.IOException; -import com.dfsek.terra.lifecycle.util.ASMUtil; import com.dfsek.terra.lifecycle.util.LoaderUtil; - -import org.objectweb.asm.tree.VarInsnNode; +import com.dfsek.terra.mod.util.ASMUtil; +import com.dfsek.terra.mod.util.FertilizableUtil; import static org.objectweb.asm.Opcodes.ACC_STATIC; From d8285bc9a7063c1c6f9445c3ae4d1749e7c549fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 12 Jul 2022 13:04:07 -0700 Subject: [PATCH 09/17] make bukkit growing better --- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 2 -- .../bukkit/nms/v1_19_R1/NMSInjectListener.java | 17 ++++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) 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 b3d8c1d36..320102b9c 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 @@ -37,7 +37,6 @@ import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; -import com.dfsek.terra.bukkit.listeners.CommonListener; import com.dfsek.terra.bukkit.nms.Initializer; import com.dfsek.terra.bukkit.util.PaperUtil; import com.dfsek.terra.bukkit.util.VersionUtil; @@ -91,7 +90,6 @@ public class TerraBukkitPlugin extends JavaPlugin { return; } - Bukkit.getPluginManager().registerEvents(new CommonListener(), this); // Register master event listener PaperUtil.checkPaper(this); } 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 index f22430a84..1c8bf5170 100644 --- 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 @@ -9,6 +9,8 @@ import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockEvent; +import org.bukkit.event.block.BlockFertilizeEvent; import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.WorldInitEvent; @@ -61,17 +63,18 @@ public class NMSInjectListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onBlockGrow(BlockGrowEvent event) { - Block block = event.getBlock(); - Vector3Int pos = Vector3Int.of(block.getX(), block.getY(), block.getZ()); - ServerWorld world = BukkitAdapter.adapt(block.getWorld()); - event.setCancelled(FertilizableUtil.grow(world, new Random(), pos, ResourceLocation.tryParse(block.getType().getKey().asString()))); + event.setCancelled(onGrow(event)); } @EventHandler(priority = EventPriority.HIGHEST) - public void onStructureGow(StructureGrowEvent event) { - Block block = event.getLocation().getBlock(); + public void onBlockFertilize(BlockFertilizeEvent event) { + event.setCancelled(onGrow(event)); + } + + public boolean onGrow(BlockEvent event) { + Block block = event.getBlock(); Vector3Int pos = Vector3Int.of(block.getX(), block.getY(), block.getZ()); ServerWorld world = BukkitAdapter.adapt(block.getWorld()); - event.setCancelled(FertilizableUtil.grow(world, new Random(), pos, ResourceLocation.tryParse(block.getType().getKey().asString()))); + return FertilizableUtil.grow(world, new Random(), pos, ResourceLocation.tryParse(block.getType().getKey().asString())); } } From 970a5c60d9cd79824f13b3b1537a2cfc7ee9c38a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 12 Jul 2022 13:09:58 -0700 Subject: [PATCH 10/17] clean --- .../com/dfsek/terra/mod/mixin/FertilizableMixin.java | 10 ---------- .../java/com/dfsek/terra/mod/util/MinecraftUtil.java | 2 +- .../com/dfsek/terra/lifecycle/asm/FertilizableASM.java | 2 +- .../java/com/dfsek/terra/lifecycle}/util/ASMUtil.java | 2 +- 4 files changed, 3 insertions(+), 13 deletions(-) delete mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java rename platforms/{mixin-common/src/main/java/com/dfsek/terra/mod => mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle}/util/ASMUtil.java (98%) diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java deleted file mode 100644 index 141e5a79b..000000000 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/FertilizableMixin.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.mod.mixin; - -import net.minecraft.block.Fertilizable; -import org.spongepowered.asm.mixin.Mixin; - - -@Mixin(Fertilizable.class) -public class FertilizableMixin { - -} 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 941f85b2c..d61bb74c7 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 @@ -110,7 +110,7 @@ public final class MinecraftUtil { builder.temperatureModifier(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); builder.spawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); - + return builder .effects(effects.build()) .generationSettings(generationSettings.build()) diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java index ff6bb8a07..e8d525c52 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java @@ -15,7 +15,7 @@ import org.objectweb.asm.tree.VarInsnNode; import java.io.IOException; import com.dfsek.terra.lifecycle.util.LoaderUtil; -import com.dfsek.terra.mod.util.ASMUtil; +import com.dfsek.terra.lifecycle.util.ASMUtil; import com.dfsek.terra.mod.util.FertilizableUtil; import static org.objectweb.asm.Opcodes.ACC_STATIC; diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/ASMUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java similarity index 98% rename from platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/ASMUtil.java rename to platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java index d424331c2..918c398b1 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/ASMUtil.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.mod.util; +package com.dfsek.terra.lifecycle.util; import org.objectweb.asm.ClassReader; import org.objectweb.asm.tree.ClassNode; From 09c0f0acc9e37d13a8dd5b398985ca1f9df83bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 12 Jul 2022 13:37:28 -0700 Subject: [PATCH 11/17] Remove unused config keys --- .../terra/config/pack/ConfigPackTemplate.java | 80 ------------------- .../terra/fabric/FabricASMEntryPoint.java | 1 - .../dfsek/terra/mod/util/MinecraftUtil.java | 2 +- .../terra/lifecycle/asm/FertilizableASM.java | 2 +- 4 files changed, 2 insertions(+), 83 deletions(-) diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java index 3aa0a8c27..0ced6acd7 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java @@ -41,10 +41,6 @@ public class ConfigPackTemplate implements ConfigTemplate { @Default private @Meta Map variables = new HashMap<>(); - @Value("beta.carving") - @Default - private @Meta boolean betaCarvers = false; - @Value("structures.locatable") @Default private @Meta Map<@Meta String, @Meta String> locatable = new HashMap<>(); @@ -53,22 +49,6 @@ public class ConfigPackTemplate implements ConfigTemplate { @Default private @Meta int elevationBlend = 4; - @Value("vanilla.mobs") - @Default - private @Meta boolean vanillaMobs = true; - - @Value("vanilla.caves") - @Default - private @Meta boolean vanillaCaves = false; - - @Value("vanilla.decorations") - @Default - private @Meta boolean vanillaDecorations = false; - - @Value("vanilla.structures") - @Default - private @Meta boolean vanillaStructures = false; - @Value("author") @Default private String author = "Anon Y. Mous"; @@ -84,26 +64,6 @@ public class ConfigPackTemplate implements ConfigTemplate { @Value("version") private Version version; - @Value("disable.carvers") - @Default - private @Meta boolean disableCarvers = false; - - @Value("disable.structures") - @Default - private @Meta boolean disableStructures = false; - - @Value("disable.ores") - @Default - private @Meta boolean disableOres = false; - - @Value("disable.trees") - @Default - private @Meta boolean disableTrees = false; - - @Value("disable.flora") - @Default - private @Meta boolean disableFlora = false; - @Value("generator") private @Meta ChunkGeneratorProvider generatorProvider; @@ -111,46 +71,6 @@ public class ConfigPackTemplate implements ConfigTemplate { @Default private boolean biomeCache = false; - public boolean disableCarvers() { - return disableCarvers; - } - - public boolean disableFlora() { - return disableFlora; - } - - public boolean disableOres() { - return disableOres; - } - - public boolean disableStructures() { - return disableStructures; - } - - public boolean disableTrees() { - return disableTrees; - } - - public boolean vanillaMobs() { - return vanillaMobs; - } - - public boolean vanillaCaves() { - return vanillaCaves; - } - - public boolean vanillaDecorations() { - return vanillaDecorations; - } - - public boolean vanillaStructures() { - return vanillaStructures; - } - - public boolean doBetaCarvers() { - return betaCarvers; - } - public ChunkGeneratorProvider getGeneratorProvider() { return generatorProvider; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java index afd877f0b..d3d2d2a5c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java @@ -7,7 +7,6 @@ import net.gudenau.minecraft.asm.api.v1.AsmRegistry; import com.dfsek.terra.lifecycle.asm.FertilizableASM; import com.dfsek.terra.lifecycle.util.LoaderUtil; -import com.dfsek.terra.quilt.util.QuiltLoaderUtil; public class FabricASMEntryPoint implements AsmInitializer { 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 d61bb74c7..00be6a437 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 @@ -110,7 +110,7 @@ public final class MinecraftUtil { builder.temperatureModifier(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); builder.spawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); - + return builder .effects(effects.build()) .generationSettings(generationSettings.build()) diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java index e8d525c52..09cfa0272 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java @@ -14,8 +14,8 @@ import org.objectweb.asm.tree.VarInsnNode; import java.io.IOException; -import com.dfsek.terra.lifecycle.util.LoaderUtil; import com.dfsek.terra.lifecycle.util.ASMUtil; +import com.dfsek.terra.lifecycle.util.LoaderUtil; import com.dfsek.terra.mod.util.FertilizableUtil; import static org.objectweb.asm.Opcodes.ACC_STATIC; From 5c2998c91c403265e207cfa9d8bf93a2e1e42cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 12 Jul 2022 13:39:52 -0700 Subject: [PATCH 12/17] remove more --- .../terra/config/pack/ConfigPackTemplate.java | 34 ------------------- .../terra/fabric/FabricASMEntryPoint.java | 3 +- 2 files changed, 1 insertion(+), 36 deletions(-) diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java index 0ced6acd7..c8cabb795 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java @@ -23,9 +23,7 @@ import com.dfsek.tectonic.api.config.template.annotations.Default; import com.dfsek.tectonic.api.config.template.annotations.Value; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage; @@ -37,26 +35,10 @@ public class ConfigPackTemplate implements ConfigTemplate { @Value("id") private String id; - @Value("variables") - @Default - private @Meta Map variables = new HashMap<>(); - - @Value("structures.locatable") - @Default - private @Meta Map<@Meta String, @Meta String> locatable = new HashMap<>(); - - @Value("blend.terrain.elevation") - @Default - private @Meta int elevationBlend = 4; - @Value("author") @Default private String author = "Anon Y. Mous"; - @Value("disable.sapling") - @Default - private @Meta boolean disableSaplings = false; - @Value("stages") @Default private @Meta List<@Meta GenerationStage> stages = Collections.emptyList(); @@ -83,10 +65,6 @@ public class ConfigPackTemplate implements ConfigTemplate { return version; } - public boolean isDisableSaplings() { - return disableSaplings; - } - public String getID() { return id; } @@ -95,18 +73,6 @@ public class ConfigPackTemplate implements ConfigTemplate { return author; } - public Map getVariables() { - return variables; - } - - public int getElevationBlend() { - return elevationBlend; - } - - public Map getLocatable() { - return locatable; - } - public boolean getBiomeCache() { return biomeCache; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java index d3d2d2a5c..60dcde0d1 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java @@ -1,10 +1,9 @@ package com.dfsek.terra.fabric; -import com.dfsek.terra.fabric.util.FabricLoaderUtil; - import net.gudenau.minecraft.asm.api.v1.AsmInitializer; import net.gudenau.minecraft.asm.api.v1.AsmRegistry; +import com.dfsek.terra.fabric.util.FabricLoaderUtil; import com.dfsek.terra.lifecycle.asm.FertilizableASM; import com.dfsek.terra.lifecycle.util.LoaderUtil; From dd9f421972c282407eb0ee828455b748032c6212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 12 Jul 2022 18:46:32 -0700 Subject: [PATCH 13/17] Growing --- .../terra/fabric/FabricASMEntryPoint.java | 17 ---- .../terra/fabric/util/FabricLoaderUtil.java | 18 ----- .../fabric/src/main/resources/fabric.mod.json | 3 - .../java/com/dfsek/terra/mod/ModPlatform.java | 4 +- .../terra/mod/config/FertilizableConfig.java | 51 ++++++++++++ .../mod/config/VanillaBiomeProperties.java | 6 +- ...lsUnsynchronizedRandomAccessFixMixin.java} | 2 +- ...ava => NetherFossilOptimizationMixin.java} | 2 +- .../mod/mixin/gameplay/BoneMealItemMixin.java | 32 ++++++++ .../mod/mixin/gameplay/BoneMealTaskMixin.java | 57 +++++++++++++ .../mod/mixin/gameplay/ServerWorldMixin.java | 32 ++++++++ .../com/dfsek/terra/mod/util/BiomeUtil.java | 5 +- .../terra/mod/util/FertilizableUtil.java | 50 ++++++++---- .../main/resources/terra.common.mixins.json | 7 +- .../terra/lifecycle/asm/FertilizableASM.java | 79 ------------------- .../dfsek/terra/lifecycle/util/ASMUtil.java | 56 ------------- .../dfsek/terra/quilt/QuiltASMEntryPoint.java | 17 ---- .../terra/quilt/util/QuiltLoaderUtil.java | 18 ----- .../quilt/src/main/resources/quilt.mod.json | 3 - 19 files changed, 221 insertions(+), 238 deletions(-) delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java rename platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/{BeeMoveGoalsUnsynchronizedRandomAccessFix.java => BeeMoveGoalsUnsynchronizedRandomAccessFixMixin.java} (94%) rename platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/{NetherFossilOptimization.java => NetherFossilOptimizationMixin.java} (96%) create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealItemMixin.java create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/ServerWorldMixin.java delete mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java delete mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java delete mode 100644 platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java delete mode 100644 platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java deleted file mode 100644 index 60dcde0d1..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricASMEntryPoint.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.dfsek.terra.fabric; - -import net.gudenau.minecraft.asm.api.v1.AsmInitializer; -import net.gudenau.minecraft.asm.api.v1.AsmRegistry; - -import com.dfsek.terra.fabric.util.FabricLoaderUtil; -import com.dfsek.terra.lifecycle.asm.FertilizableASM; -import com.dfsek.terra.lifecycle.util.LoaderUtil; - - -public class FabricASMEntryPoint implements AsmInitializer { - @Override - public void onInitializeAsm() { - LoaderUtil.INSTANCE = new FabricLoaderUtil(); - AsmRegistry.getInstance().registerTransformer(new FertilizableASM()); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java deleted file mode 100644 index a9813edbf..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricLoaderUtil.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.dfsek.terra.fabric.util; - -import com.dfsek.terra.lifecycle.util.LoaderUtil; - -import net.fabricmc.loader.api.FabricLoader; - - -public class FabricLoaderUtil extends LoaderUtil { - @Override - public String mapClassName(String namespace, String className) { - return FabricLoader.getInstance().getMappingResolver().mapClassName(namespace, className); - } - - @Override - public String mapMethodName(String namespace, String owner, String name, String descriptor) { - return FabricLoader.getInstance().getMappingResolver().mapMethodName(namespace, owner, name, descriptor); - } -} diff --git a/platforms/fabric/src/main/resources/fabric.mod.json b/platforms/fabric/src/main/resources/fabric.mod.json index 4647d6933..e71bcfeac 100644 --- a/platforms/fabric/src/main/resources/fabric.mod.json +++ b/platforms/fabric/src/main/resources/fabric.mod.json @@ -18,9 +18,6 @@ "entrypoints": { "main": [ "com.dfsek.terra.fabric.FabricEntryPoint" - ], - "gud_asm": [ - "com.dfsek.terra.fabric.FabricASMEntryPoint" ] }, "mixins": [ 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 5d2565794..03d7e179c 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 @@ -37,6 +37,7 @@ import com.dfsek.terra.mod.config.BiomeAdditionsSoundTemplate; import com.dfsek.terra.mod.config.BiomeMoodSoundTemplate; import com.dfsek.terra.mod.config.BiomeParticleConfigTemplate; import com.dfsek.terra.mod.config.EntityTypeTemplate; +import com.dfsek.terra.mod.config.FertilizableConfig; import com.dfsek.terra.mod.config.MusicSoundTemplate; import com.dfsek.terra.mod.config.ProtoPlatformBiome; import com.dfsek.terra.mod.config.SoundEventTemplate; @@ -95,7 +96,8 @@ public abstract class ModPlatform extends AbstractPlatform { .registerLoader(SpawnEntry.class, SpawnEntryTemplate::new) .registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new) .registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new) - .registerLoader(VillagerType.class, VillagerTypeTemplate::new); + .registerLoader(VillagerType.class, VillagerTypeTemplate::new) + .registerLoader(FertilizableConfig.class, FertilizableConfig::new); } private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java new file mode 100644 index 000000000..d1fe3f92d --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/FertilizableConfig.java @@ -0,0 +1,51 @@ +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.util.Identifier; + +import java.util.Map; + +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; + + +public class FertilizableConfig implements ObjectTemplate { + @Value("strucutres") + @Default + private ProbabilityCollection structures = null; + + @Value("cooldowns") + @Default + private Map cooldowns = null; + + @Value("can-grow") + @Default + private ConfiguredStructure canGrow = null; + + @Value("villager-fertilizable") + @Default + private Boolean villagerFertilizable = null; + + public ProbabilityCollection getStructures() { + return structures; + } + + public Map getCooldowns() { + return cooldowns; + } + + public ConfiguredStructure getCanGrow() { + return canGrow; + } + + public Boolean isVillagerFertilizable() { + return villagerFertilizable; + } + + @Override + public FertilizableConfig get() { + return this; + } +} 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 f996b31b5..5c852d68a 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 @@ -20,15 +20,13 @@ import java.util.List; import java.util.Map; import com.dfsek.terra.api.properties.Properties; -import com.dfsek.terra.api.structure.configured.ConfiguredStructure; -import com.dfsek.terra.api.util.collection.ProbabilityCollection; public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Value("minecraft.fertilizables") @Default - private Map> fertilizables = Collections.emptyMap(); + private Map fertilizables = Collections.emptyMap(); @Value("minecraft.tags") @Default @@ -106,7 +104,7 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Default private VillagerType villagerType = null; - public Map> getFertilizables() { + public Map getFertilizables() { return fertilizables; } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFixMixin.java similarity index 94% rename from platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java rename to platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFixMixin.java index f29e6d259..6ef0478df 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFixMixin.java @@ -19,7 +19,7 @@ import com.dfsek.terra.mod.CommonPlatform; MoveToHiveGoal.class, MoveToFlowerGoal.class }) -public class BeeMoveGoalsUnsynchronizedRandomAccessFix { +public class BeeMoveGoalsUnsynchronizedRandomAccessFixMixin { @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;random:Lnet/minecraft/util/math/random/Random;")) public Random redirectRandomAccess(World instance) { diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimization.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimizationMixin.java similarity index 96% rename from platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimization.java rename to platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimizationMixin.java index f2ab4956a..c3c199629 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimization.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimizationMixin.java @@ -20,7 +20,7 @@ import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; * nether. */ @Mixin(NetherFossilStructure.class) -public class NetherFossilOptimization { +public class NetherFossilOptimizationMixin { @Inject(method = "getStructurePosition", at = @At("HEAD"), cancellable = true) public void injectFossilPositions(Context context, CallbackInfoReturnable> cir) { if(context.chunkGenerator() instanceof MinecraftChunkGeneratorWrapper) { diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealItemMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealItemMixin.java new file mode 100644 index 000000000..22fac5a71 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealItemMixin.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.mod.mixin.gameplay; + + +import net.minecraft.item.BoneMealItem; +import net.minecraft.item.ItemStack; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import com.dfsek.terra.mod.util.FertilizableUtil; + + +@Mixin(BoneMealItem.class) +public class BoneMealItemMixin { + private static final Identifier cooldownId = new Identifier("terra", "bone_meal_cooldown"); + + @Inject(method = "useOnFertilizable", at = @At("HEAD"), cancellable = true) + private static void injectUseOnFertilizable(ItemStack stack, World world, BlockPos pos, CallbackInfoReturnable cir) { + if(world instanceof ServerWorld) { + Boolean value = FertilizableUtil.grow((ServerWorld) world, pos, world.getBlockState(pos), cooldownId); + stack.decrement(1); + if(value != null) { + cir.setReturnValue(value); + } + } + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java new file mode 100644 index 000000000..90e93b656 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/BoneMealTaskMixin.java @@ -0,0 +1,57 @@ +package com.dfsek.terra.mod.mixin.gameplay; + + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.ai.brain.task.BoneMealTask; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.Registry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Map; +import java.util.Random; + +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.Rotation; +import com.dfsek.terra.api.util.vector.Vector3Int; +import com.dfsek.terra.api.world.WritableWorld; +import com.dfsek.terra.mod.config.FertilizableConfig; +import com.dfsek.terra.mod.util.BiomeUtil; + + +@Mixin(BoneMealTask.class) +public class BoneMealTaskMixin { + + @Inject(method = "canBoneMeal", at = @At("HEAD"), cancellable = true) + public void injectCanBoneMeal(BlockPos pos, ServerWorld world, CallbackInfoReturnable cir) { + Map map = BiomeUtil.TERRA_BIOME_FERTILIZABLE_MAP.get(world.getBiome(pos)); + if(map != null) { + BlockState blockState = world.getBlockState(pos); + Block block = blockState.getBlock(); + FertilizableConfig config = map.get(Registry.BLOCK.getId(block)); + if(config != null) { + Boolean villagerFertilizable = config.isVillagerFertilizable(); + if(villagerFertilizable != null) { + if(villagerFertilizable) { + ConfiguredStructure canGrow = config.getCanGrow(); + if(canGrow != null) { + Random random = (Random) world.getRandom(); + cir.setReturnValue(canGrow.getStructure().get(random).generate( + Vector3Int.of(pos.getX(), pos.getY(), pos.getZ()), (WritableWorld) world, random, Rotation.NONE)); + return; + } + cir.setReturnValue(true); + return; + } + cir.setReturnValue(false); + return; + } + } + } + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/ServerWorldMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/ServerWorldMixin.java new file mode 100644 index 000000000..0081db33d --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/gameplay/ServerWorldMixin.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.mod.mixin.gameplay; + + +import net.minecraft.block.BlockState; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import com.dfsek.terra.mod.util.FertilizableUtil; + + +@Mixin(ServerWorld.class) +public class ServerWorldMixin { + private static final Identifier cooldownId = new Identifier("terra", "random_cooldown"); + + @Redirect(method = "tickChunk", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/block/BlockState;randomTick(Lnet/minecraft/server/world/ServerWorld;" + + "Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/random/Random;)V")) + public void injectTickChunk(BlockState instance, ServerWorld serverWorld, BlockPos blockPos, Random random) { + Boolean value = FertilizableUtil.grow(serverWorld, blockPos, instance, cooldownId); + if(value != null) { + if(!value) { + instance.randomTick(serverWorld, blockPos, random); + } + } + } +} 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 9da187845..e6a3546fe 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 @@ -17,10 +17,9 @@ import java.util.Map; import java.util.Objects; import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.structure.configured.ConfiguredStructure; -import com.dfsek.terra.api.util.collection.ProbabilityCollection; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.mod.CommonPlatform; +import com.dfsek.terra.mod.config.FertilizableConfig; import com.dfsek.terra.mod.config.ProtoPlatformBiome; import com.dfsek.terra.mod.config.VanillaBiomeProperties; import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; @@ -29,7 +28,7 @@ import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; public class BiomeUtil { private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); - public static final Map, Map>> + public static final Map, Map> TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>(); public static final Map, List> diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java index 67a17e96b..7ee320b75 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/FertilizableUtil.java @@ -1,34 +1,54 @@ package com.dfsek.terra.mod.util; -import com.dfsek.terra.api.util.Rotation; -import com.dfsek.terra.api.util.vector.Vector3Int; - -import com.dfsek.terra.api.world.WritableWorld; - +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.random.Random; import net.minecraft.util.registry.Registry; import java.util.Map; +import java.util.Random; import com.dfsek.terra.api.structure.configured.ConfiguredStructure; -import com.dfsek.terra.api.util.collection.ProbabilityCollection; +import com.dfsek.terra.api.util.Rotation; +import com.dfsek.terra.api.util.vector.Vector3Int; +import com.dfsek.terra.api.world.WritableWorld; +import com.dfsek.terra.mod.config.FertilizableConfig; public class FertilizableUtil { - public static boolean grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { - Map> fertilizables = BiomeUtil.TERRA_BIOME_FERTILIZABLE_MAP.get(world.getBiome(pos)); - if (fertilizables != null) { - ProbabilityCollection probabilityCollection = fertilizables.get(Registry.BLOCK.getId(state.getBlock())); - if (probabilityCollection != null) { - ConfiguredStructure structure = probabilityCollection.get((java.util.Random) random); - structure.getStructure().get((java.util.Random) random).generate(Vector3Int.of(pos.getX(), pos.getY(), pos.getZ()), (WritableWorld) world, (java.util.Random) random, Rotation.NONE); + + private static final Random mojankRandom = new Random(); + + public static Boolean grow(ServerWorld world, BlockPos pos, BlockState state, Identifier cooldownId) { + return grow(world, mojankRandom, pos, state, cooldownId); + } + + public static Boolean grow(ServerWorld world, Random random, BlockPos pos, BlockState state, Identifier cooldownId) { + Map map = BiomeUtil.TERRA_BIOME_FERTILIZABLE_MAP.get(world.getBiome(pos)); + if(map != null) { + Block block = state.getBlock(); + FertilizableConfig config = map.get(Registry.BLOCK.getId(block)); + if(config != null) { + ConfiguredStructure canGrow = config.getCanGrow(); + if(canGrow != null) { + if(!canGrow.getStructure().get(random).generate( + Vector3Int.of(pos.getX(), pos.getY(), pos.getZ()), (WritableWorld) world, random, Rotation.NONE)) { + return false; + } + } + Double cooldown = config.getCooldowns().get(cooldownId); + if(cooldown != null) { + if(random.nextFloat() > cooldown) { + return true; + } + } + config.getStructures().get(random).getStructure().get(random).generate( + Vector3Int.of(pos.getX(), pos.getY(), pos.getZ()), (WritableWorld) world, random, Rotation.NONE); return true; } } - return false; + return null; } } diff --git a/platforms/mixin-common/src/main/resources/terra.common.mixins.json b/platforms/mixin-common/src/main/resources/terra.common.mixins.json index d4402241c..c8ebae978 100644 --- a/platforms/mixin-common/src/main/resources/terra.common.mixins.json +++ b/platforms/mixin-common/src/main/resources/terra.common.mixins.json @@ -9,8 +9,11 @@ "access.StateAccessor", "access.StructureAccessorAccessor", "access.VillagerTypeAccessor", - "fix.BeeMoveGoalsUnsynchronizedRandomAccessFix", - "fix.NetherFossilOptimization", + "fix.BeeMoveGoalsUnsynchronizedRandomAccessFixMixin", + "fix.NetherFossilOptimizationMixin", + "gameplay.BoneMealItemMixin", + "gameplay.BoneMealTaskMixin", + "gameplay.ServerWorldMixin", "implementations.compat.GenerationSettingsFloraFeaturesMixin", "implementations.terra.BiomeMixin", "implementations.terra.HandleImplementationMixin", diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java deleted file mode 100644 index 09cfa0272..000000000 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/asm/FertilizableASM.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.dfsek.terra.lifecycle.asm; - -import net.gudenau.minecraft.asm.api.v1.Identifier; -import net.gudenau.minecraft.asm.api.v1.Transformer; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.JumpInsnNode; -import org.objectweb.asm.tree.LabelNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.VarInsnNode; - -import java.io.IOException; - -import com.dfsek.terra.lifecycle.util.ASMUtil; -import com.dfsek.terra.lifecycle.util.LoaderUtil; -import com.dfsek.terra.mod.util.FertilizableUtil; - -import static org.objectweb.asm.Opcodes.ACC_STATIC; - - -public class FertilizableASM implements Transformer { - - private static String fertilizableClassName = LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_2256"); - - private static String fertilizableGrowMethodSignatureBase = String.format("(L%1$s;L%2$s;L%3$s;L%4$s;)", - LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_3218").replace(".", "/"), - LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_5819").replace(".", "/"), - LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_2338").replace(".", "/"), - LoaderUtil.INSTANCE.mapClassName("intermediary", "net.minecraft.class_2680").replace(".", "/")); - - private static String fertilizableGrowMethodSignature = fertilizableGrowMethodSignatureBase + "V"; - - private static String fertilizableGrowMethodName = LoaderUtil.INSTANCE.mapMethodName("intermediary", "net.minecraft.class_2256", "method_9652", "(Lnet/minecraft/class_3218;Lnet/minecraft/class_5819;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V"); - - @Override - public Identifier getName() { - return new Identifier("terra", "asm_test"); - } - - @Override - public boolean handlesClass(String name, String transformedName) { - return true; - } - - @Override - public boolean transform(ClassNode classNode, Flags flags) { - try { - if (ASMUtil.inheritsFrom(classNode, fertilizableClassName.replace(".", "/"))) { - for (MethodNode method : classNode.methods) { - if (method.name.equals(fertilizableGrowMethodName)) { - if ((method.access & ACC_STATIC) == 0) { - if(method.desc.equals(fertilizableGrowMethodSignature)) { - InsnList list = new InsnList(); - list.add(new VarInsnNode(Opcodes.ALOAD, 1)); - list.add(new VarInsnNode(Opcodes.ALOAD, 2)); - list.add(new VarInsnNode(Opcodes.ALOAD, 3)); - list.add(new VarInsnNode(Opcodes.ALOAD, 4)); - list.add(new MethodInsnNode(Opcodes.INVOKESTATIC, FertilizableUtil.class.getName().replace(".", "/"), "grow", fertilizableGrowMethodSignatureBase + "Z", false)); - LabelNode jmp = new LabelNode(); - list.add(new JumpInsnNode(Opcodes.IFNE, jmp)); - list.add(new InsnNode(Opcodes.RETURN)); - list.add(jmp); - method.instructions.insertBefore(method.instructions.getFirst(), list); - flags.requestFrames(); - return true; - } - } - } - } - } - } catch(IOException e) { - throw new RuntimeException(e); - } - return false; - } -} diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java deleted file mode 100644 index 918c398b1..000000000 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/ASMUtil.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.dfsek.terra.lifecycle.util; - -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.tree.ClassNode; - -import java.io.IOException; -import java.util.WeakHashMap; - -import static org.objectweb.asm.ClassReader.SKIP_CODE; -import static org.objectweb.asm.ClassReader.SKIP_DEBUG; -import static org.objectweb.asm.ClassReader.SKIP_FRAMES; - - -public class ASMUtil { - static final ThreadLocal>> INHERITANCE_CACHE = new ThreadLocal<>(); - - public static boolean inheritsFrom(ClassNode classNode, String interfaceName) throws IOException { - if (INHERITANCE_CACHE.get() == null) { - INHERITANCE_CACHE.set(new WeakHashMap<>()); - } - return inheritsFromInternal(classNode, interfaceName); - } - - protected static boolean inheritsFromInternal(ClassNode classNode, String interfaceName) throws IOException { - if (INHERITANCE_CACHE.get().containsKey(classNode.name)) { - if (INHERITANCE_CACHE.get().get(classNode.name).containsKey(interfaceName)) { - return INHERITANCE_CACHE.get().get(classNode.name).get(interfaceName); - } - } - for (String parent : classNode.interfaces) { - if (checkClass(parent, interfaceName)) { - return true; - } - } - if (checkClass(classNode.superName, interfaceName)) { - return true; - } - INHERITANCE_CACHE.get().getOrDefault(classNode.name, new WeakHashMap<>()).put(interfaceName, false); - return false; - } - - protected static boolean checkClass(String name, String interfaceName) throws IOException { - if (name.startsWith("java/")) { - return false; - } - - boolean isClass = name.equals(interfaceName); - INHERITANCE_CACHE.get().getOrDefault(name, new WeakHashMap<>()).put(interfaceName, isClass); - if (isClass) { - return true; - } - ClassNode node = new ClassNode(); - new ClassReader(name).accept(node, SKIP_CODE | SKIP_DEBUG | SKIP_FRAMES); - return inheritsFromInternal(node, interfaceName); - } -} diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java deleted file mode 100644 index 4ecd2b7d7..000000000 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltASMEntryPoint.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.dfsek.terra.quilt; - -import net.gudenau.minecraft.asm.api.v1.AsmInitializer; -import net.gudenau.minecraft.asm.api.v1.AsmRegistry; - -import com.dfsek.terra.lifecycle.asm.FertilizableASM; -import com.dfsek.terra.lifecycle.util.LoaderUtil; -import com.dfsek.terra.quilt.util.QuiltLoaderUtil; - - -public class QuiltASMEntryPoint implements AsmInitializer { - @Override - public void onInitializeAsm() { - LoaderUtil.INSTANCE = new QuiltLoaderUtil(); - AsmRegistry.getInstance().registerTransformer(new FertilizableASM()); - } -} diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java deleted file mode 100644 index 19a3f4bf3..000000000 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/util/QuiltLoaderUtil.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.dfsek.terra.quilt.util; - -import com.dfsek.terra.lifecycle.util.LoaderUtil; - -import org.quiltmc.loader.api.QuiltLoader; - - -public class QuiltLoaderUtil extends LoaderUtil { - @Override - public String mapClassName(String namespace, String className) { - return QuiltLoader.getMappingResolver().mapClassName(namespace, className); - } - - @Override - public String mapMethodName(String namespace, String owner, String name, String descriptor) { - return QuiltLoader.getMappingResolver().mapMethodName(namespace, owner, name, descriptor); - } -} diff --git a/platforms/quilt/src/main/resources/quilt.mod.json b/platforms/quilt/src/main/resources/quilt.mod.json index e2151593d..0f53988ec 100644 --- a/platforms/quilt/src/main/resources/quilt.mod.json +++ b/platforms/quilt/src/main/resources/quilt.mod.json @@ -26,9 +26,6 @@ ], "pre_launch": [ "com.dfsek.terra.quilt.QuiltPreLaunchEntryPoint" - ], - "gud_asm": [ - "com.dfsek.terra.quilt.QuiltASMEntryPoint" ] }, "depends": [ From f75880acac2c4837fd34a4cb915d91223470a682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Thu, 14 Jul 2022 00:38:54 -0700 Subject: [PATCH 14/17] Bukkit update --- .../com/dfsek/terra/bukkit/PlatformImpl.java | 11 -- .../bukkit/world/BukkitPlatformBiome.java | 42 ------ .../bukkit/nms/v1_19_R1/AwfulBukkitHacks.java | 69 +--------- .../bukkit/nms/v1_19_R1/NMSBiomeProvider.java | 13 +- .../nms/v1_19_R1/NMSInjectListener.java | 29 ---- .../bukkit/nms/v1_19_R1/NMSPlatform.java | 24 +++- .../v1_19_R1/config/FertilizableConfig.java | 49 +++++++ .../v1_19_R1/config/ProtoPlatformBiome.java | 51 +++++++ .../config/VanillaBiomeProperties.java | 41 +++--- .../bukkit/nms/v1_19_R1/util/BiomeUtil.java | 75 +++++++++++ .../nms/v1_19_R1/util/FertilizableUtil.java | 29 ---- .../nms/v1_19_R1/util/MinecraftAdapter.java | 55 ++++++++ .../nms/v1_19_R1/util/MinecraftUtil.java | 124 ++++++++++++++++++ .../bukkit/nms/v1_19_R1/util/TagUtil.java | 60 +++++++++ 14 files changed, 466 insertions(+), 206 deletions(-) delete mode 100644 platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java delete mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java 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 f802fcac5..a6849ec31 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 @@ -18,8 +18,6 @@ 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 org.bukkit.Bukkit; import org.bukkit.entity.EntityType; import org.jetbrains.annotations.NotNull; @@ -28,18 +26,15 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.List; -import java.util.Locale; import com.dfsek.terra.AbstractPlatform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; -import com.dfsek.terra.api.world.biome.PlatformBiome; import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; import com.dfsek.terra.bukkit.handles.BukkitItemHandle; import com.dfsek.terra.bukkit.handles.BukkitWorldHandle; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; public class PlatformImpl extends AbstractPlatform { @@ -112,13 +107,7 @@ public class PlatformImpl extends AbstractPlatform { public void register(TypeRegistry registry) { super.register(registry); registry.registerLoader(BlockState.class, (type, o, loader, depthTracker) -> handle.createBlockState((String) o)) - .registerLoader(PlatformBiome.class, (type, o, loader, depthTracker) -> parseBiome((String) o, depthTracker)) .registerLoader(EntityType.class, (type, o, loader, depthTracker) -> EntityType.valueOf((String) o)); } - - protected BukkitPlatformBiome parseBiome(String id, DepthTracker depthTracker) throws LoadException { - if(!id.startsWith("minecraft:")) throw new LoadException("Invalid biome identifier " + id, depthTracker); - return new BukkitPlatformBiome(org.bukkit.block.Biome.valueOf(id.toUpperCase(Locale.ROOT).substring(10))); - } } diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java deleted file mode 100644 index aff5773fa..000000000 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.bukkit.world; - -import com.dfsek.terra.api.properties.Context; -import com.dfsek.terra.api.properties.PropertyHolder; -import com.dfsek.terra.api.world.biome.PlatformBiome; - - -public class BukkitPlatformBiome implements PlatformBiome, PropertyHolder { - private final org.bukkit.block.Biome biome; - private final Context context = new Context(); - - public BukkitPlatformBiome(org.bukkit.block.Biome biome) { - this.biome = biome; - } - - @Override - public org.bukkit.block.Biome getHandle() { - return biome; - } - - @Override - public Context getContext() { - return context; - } -} 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 index f2e4b30dd..9521c7532 100644 --- 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 @@ -1,31 +1,24 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; -import com.google.common.collect.ImmutableMap; -import com.mojang.serialization.Lifecycle; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.TagUtil; + 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.entity.npc.VillagerType; import net.minecraft.world.level.biome.Biome; 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 java.util.Optional; import com.dfsek.terra.api.structure.configured.ConfiguredStructure; import com.dfsek.terra.api.util.collection.ProbabilityCollection; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; import com.dfsek.terra.registry.master.ConfigRegistry; @@ -46,62 +39,12 @@ public class AwfulBukkitHacks { 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(); - - ResourceKey delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, - new ResourceLocation("terra", - NMSBiomeInjector.createBiomeID(pack, key))); - - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - - Biome platform = NMSBiomeInjector.createBiome(vanillaBiomeProperties); - - BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); - biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - Map villagerMap = Reflection.VILLAGER_TYPE.getByBiome(); - - villagerMap.put(ResourceKey.create(Registry.BIOME_REGISTRY, delegateKey.location()), - Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); - - TERRA_BIOME_FERTILIZABLE_MAP.put(Holder.direct(platform), vanillaBiomeProperties.getFertilizables()); - - for(ResourceLocation tag : vanillaBiomeProperties.getTags()) { - TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.create(Registry.BIOME_REGISTRY, tag), new ArrayList<>()).add( - delegateKey.location()); - } - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } + BiomeUtil.registerBiome(biome, pack, key); })); Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - LOGGER.info("Doing data-driven biome tag garbage...."); - LOGGER.info("who let this data drive?"); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { - collect.getOrDefault(tag, new ArrayList<>()) - .addAll(biomeList.stream() - .map(biomeRegistry::getOptional) - .filter(Optional::isPresent) - .map(Optional::get) - .map(Holder::direct) - .toList()); - }); - - biomeRegistry.resetTags(); - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); + TagUtil.registerBiomeTags(biomeRegistry); } 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/NMSBiomeProvider.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeProvider.java index 0c5a8ef06..642a40509 100644 --- 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 @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; + import com.mojang.serialization.Codec; import net.minecraft.core.Holder; import net.minecraft.core.Registry; @@ -9,7 +11,6 @@ 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 { @@ -20,9 +21,7 @@ public class NMSBiomeProvider extends BiomeSource { public NMSBiomeProvider(BiomeProvider delegate, long seed) { super(delegate.stream() .map(biome -> Registries.biomeRegistry() - .getHolderOrThrow(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext() - .get(NMSBiomeInfo.class) - .biomeKey()))); + .getHolderOrThrow(((ProtoPlatformBiome) biome.getPlatformBiome()).getBiome()))); this.delegate = delegate; this.seed = seed; } @@ -34,9 +33,7 @@ public class NMSBiomeProvider extends BiomeSource { @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()); + return biomeRegistry.getHolderOrThrow(((ProtoPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) + .getPlatformBiome()).getBiome()); } } 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 index 1c8bf5170..59cf101e5 100644 --- 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 @@ -1,33 +1,21 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockEvent; -import org.bukkit.event.block.BlockFertilizeEvent; -import org.bukkit.event.block.BlockGrowEvent; -import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.WorldInitEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashSet; -import java.util.Random; import java.util.Set; import java.util.concurrent.locks.ReentrantLock; import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.util.vector.Vector3Int; -import com.dfsek.terra.api.world.ServerWorld; import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper; -import com.dfsek.terra.bukkit.nms.v1_19_R1.util.FertilizableUtil; -import com.dfsek.terra.bukkit.world.BukkitAdapter; public class NMSInjectListener implements Listener { @@ -60,21 +48,4 @@ public class NMSInjectListener implements Listener { INJECT_LOCK.unlock(); } } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onBlockGrow(BlockGrowEvent event) { - event.setCancelled(onGrow(event)); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onBlockFertilize(BlockFertilizeEvent event) { - event.setCancelled(onGrow(event)); - } - - public boolean onGrow(BlockEvent event) { - Block block = event.getBlock(); - Vector3Int pos = Vector3Int.of(block.getX(), block.getY(), block.getZ()); - ServerWorld world = BukkitAdapter.adapt(block.getWorld()); - return FertilizableUtil.grow(world, new Random(), pos, ResourceLocation.tryParse(block.getType().getKey().asString())); - } } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java index a43c271ef..47e67618d 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java @@ -1,6 +1,7 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; import com.dfsek.tectonic.api.TypeRegistry; +import com.dfsek.tectonic.api.depth.DepthTracker; import com.dfsek.tectonic.api.exception.LoadException; import com.dfsek.terra.api.addon.BaseAddon; @@ -13,7 +14,9 @@ import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeMoodSoundTemplate; import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeParticleConfigTemplate; import com.dfsek.terra.bukkit.nms.v1_19_R1.config.EntityTypeTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig; import com.dfsek.terra.bukkit.nms.v1_19_R1.config.MusicSoundTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SoundEventTemplate; import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnCostConfig; @@ -25,6 +28,10 @@ import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnTypeConfig; import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VillagerTypeTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil; + +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.Music; import net.minecraft.sounds.SoundEvent; @@ -34,6 +41,7 @@ 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; import net.minecraft.world.level.biome.Biome.Precipitation; import net.minecraft.world.level.biome.Biome.TemperatureModifier; import net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier; @@ -55,6 +63,10 @@ public class NMSPlatform extends PlatformImpl { Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), plugin); } + public ResourceKey getBiomeKey(ResourceLocation identifier) { + return BiomeUtil.getBiomeKey(identifier); + } + @Override public void register(TypeRegistry registry) { super.register(registry); @@ -73,7 +85,7 @@ public class NMSPlatform extends PlatformImpl { .registerLoader(GrassColorModifier.class, (type, o, loader, depthTracker) -> TemperatureModifier.valueOf(((String) o).toUpperCase( Locale.ROOT))) - .registerLoader(MobCategory.class, (type, o, loader, depthTracker) -> MobCategory.valueOf((String) o)) + .registerLoader(MobCategory.class,(type, o, loader, depthTracker) -> MobCategory.valueOf((String) o)) .registerLoader(AmbientParticleSettings.class, BiomeParticleConfigTemplate::new) .registerLoader(SoundEvent.class, SoundEventTemplate::new) .registerLoader(AmbientMoodSettings.class, BiomeMoodSoundTemplate::new) @@ -84,7 +96,15 @@ public class NMSPlatform extends PlatformImpl { .registerLoader(SpawnerData.class, SpawnEntryTemplate::new) .registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new) .registerLoader(MobSpawnSettings.class, SpawnSettingsTemplate::new) - .registerLoader(VillagerType.class, VillagerTypeTemplate::new); + .registerLoader(VillagerType.class, VillagerTypeTemplate::new) + .registerLoader(FertilizableConfig.class, FertilizableConfig::new); + } + + + private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { + ResourceLocation identifier = ResourceLocation.tryParse(id); + if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier, tracker); // failure. + return new ProtoPlatformBiome(identifier, getBiomeKey(identifier)); } @Override diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java new file mode 100644 index 000000000..1e545169e --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java @@ -0,0 +1,49 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.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.Map; +import net.minecraft.resources.ResourceLocation; +import com.dfsek.terra.api.structure.configured.ConfiguredStructure; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; + + +public class FertilizableConfig implements ObjectTemplate { + @Value("strucutres") + @Default + private ProbabilityCollection structures = null; + + @Value("cooldowns") + @Default + private Map cooldowns = null; + + @Value("can-grow") + @Default + private ConfiguredStructure canGrow = null; + + @Value("villager-fertilizable") + @Default + private Boolean villagerFertilizable = null; + + public ProbabilityCollection getStructures() { + return structures; + } + + public Map getCooldowns() { + return cooldowns; + } + + public ConfiguredStructure getCanGrow() { + return canGrow; + } + + public Boolean isVillagerFertilizable() { + return villagerFertilizable; + } + + @Override + public FertilizableConfig get() { + return this; + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java new file mode 100644 index 000000000..81284df60 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java @@ -0,0 +1,51 @@ +/* + * This file is part of Terra. + * + * Terra is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Terra is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Terra. If not, see . + */ + +package com.dfsek.terra.bukkit.nms.v1_19_R1.config; + +import com.dfsek.terra.api.world.biome.PlatformBiome; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.MinecraftUtil; + +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; + + +public class ProtoPlatformBiome implements PlatformBiome { + private final ResourceLocation identifier; + + private final ResourceKey biome; + + public ProtoPlatformBiome(ResourceLocation identifier, ResourceKey biome) { + this.identifier = identifier; + this.biome = biome; + } + + public ResourceKey get(Registry registry) { + return MinecraftUtil.getEntry(registry, identifier).orElseThrow().unwrapKey().orElseThrow(); + } + + @Override + public Object getHandle() { + return identifier; + } + + public ResourceKey getBiome() { + return biome; + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java index fd624c6c1..fd4db759a 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java @@ -3,6 +3,10 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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.Collections; +import java.util.List; +import java.util.Map; + import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.Music; import net.minecraft.sounds.SoundEvent; @@ -14,53 +18,46 @@ 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 java.util.Collections; -import java.util.List; -import java.util.Map; - import com.dfsek.terra.api.properties.Properties; -import com.dfsek.terra.api.structure.configured.ConfiguredStructure; -import com.dfsek.terra.api.util.collection.ProbabilityCollection; public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Value("minecraft.fertilizables") @Default - private Map> fertilizables = Collections.emptyMap(); + private Map fertilizables = Collections.emptyMap(); @Value("minecraft.tags") @Default - private List tags = null; + private List tags = Collections.emptyList(); @Value("minecraft.colors.grass") @Default - private Integer grassColor = null; + private Integer grassColor = 0; @Value("minecraft.colors.fog") @Default - private Integer fogColor = null; + private Integer fogColor = 0; @Value("minecraft.colors.water") @Default - private Integer waterColor = null; + private Integer waterColor = 0; @Value("minecraft.colors.water-fog") @Default - private Integer waterFogColor = null; + private Integer waterFogColor = 0; @Value("minecraft.colors.foliage") @Default - private Integer foliageColor = null; + private Integer foliageColor = 0; @Value("minecraft.colors.sky") @Default - private Integer skyColor = null; + private Integer skyColor = 0; @Value("minecraft.colors.modifier") @Default - private GrassColorModifier grassColorModifier = null; + private GrassColorModifier grassColorModifier = GrassColorModifier.NONE; @Value("minecraft.particles") @Default @@ -68,19 +65,19 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Value("minecraft.climate.precipitation") @Default - private Precipitation precipitation = null; + private Precipitation precipitation = Precipitation.NONE; @Value("minecraft.climate.temperature") @Default - private Float temperature = null; + private Float temperature = 0.0f; @Value("minecraft.climate.temperature-modifier") @Default - private TemperatureModifier temperatureModifier = null; + private TemperatureModifier temperatureModifier = TemperatureModifier.NONE; @Value("minecraft.climate.downfall") @Default - private Float downfall = null; + private Float downfall = 0.0f; @Value("minecraft.sound.loop-sound.sound") @Default @@ -100,13 +97,13 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Value("minecraft.spawning") @Default - private MobSpawnSettings spawnSettings = null; + private MobSpawnSettings spawnSettings = MobSpawnSettings.EMPTY; @Value("minecraft.villager-type") @Default private VillagerType villagerType = null; - public Map> getFertilizables() { + public Map getFertilizables() { return fertilizables; } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java new file mode 100644 index 000000000..32530f8c6 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java @@ -0,0 +1,75 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.util; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.Reflection; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; + +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 net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.npc.VillagerType; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.world.biome.Biome; + +public class BiomeUtil { + private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); + + public static final Map, Map> + TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>(); + + public static final Map, List> + TERRA_BIOME_TAG_MAP = new HashMap<>(); + + protected static ResourceKey registerBiome(ResourceLocation identifier, + net.minecraft.world.level.biome.Biome biome) { + BuiltinRegistries.register(BuiltinRegistries.BIOME, + MinecraftUtil.registerKey(identifier) + .location(), + biome); + return getBiomeKey(identifier); + } + + public static ResourceKey getBiomeKey(ResourceLocation identifier) { + return BuiltinRegistries.BIOME.getResourceKey(BuiltinRegistries.BIOME.get(identifier)).orElseThrow(); + } + + /** + * Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate. + * + * @param biome The Terra BiomeBuilder. + * @param pack The ConfigPack this biome belongs to. + */ + public static void registerBiome(Biome biome, ConfigPack pack, + com.dfsek.terra.api.registry.key.RegistryKey id) { + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + + net.minecraft.world.level.biome.Biome minecraftBiome = MinecraftUtil.createBiome(vanillaBiomeProperties); + + ResourceLocation identifier = new ResourceLocation("terra", MinecraftUtil.createBiomeID(pack, id)); + + biome.setPlatformBiome(new ProtoPlatformBiome(identifier, registerBiome(identifier, minecraftBiome))); + + Map villagerMap = Reflection.VILLAGER_TYPE.getByBiome(); + + villagerMap.put(ResourceKey.create(Registry.BIOME_REGISTRY, identifier), + Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); + + TERRA_BIOME_FERTILIZABLE_MAP.put(Holder.direct(minecraftBiome), vanillaBiomeProperties.getFertilizables()); + + for(ResourceLocation tag : vanillaBiomeProperties.getTags()) { + TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.create(Registry.BIOME_REGISTRY, tag), new ArrayList<>()).add(identifier); + } + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java deleted file mode 100644 index caa936035..000000000 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/FertilizableUtil.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.dfsek.terra.bukkit.nms.v1_19_R1.util; - -import net.minecraft.resources.ResourceLocation; - -import java.util.Map; -import java.util.Random; - -import com.dfsek.terra.api.structure.configured.ConfiguredStructure; -import com.dfsek.terra.api.util.Rotation; -import com.dfsek.terra.api.util.collection.ProbabilityCollection; -import com.dfsek.terra.api.util.vector.Vector3Int; -import com.dfsek.terra.api.world.ServerWorld; -import com.dfsek.terra.bukkit.nms.v1_19_R1.AwfulBukkitHacks; - - -public class FertilizableUtil { - public static boolean grow(ServerWorld world, Random random, Vector3Int pos, ResourceLocation block) { - Map> fertilizables = AwfulBukkitHacks.TERRA_BIOME_FERTILIZABLE_MAP.get(world.getBiomeProvider().getBiome(pos, world.getSeed())); - if (fertilizables != null) { - ProbabilityCollection probabilityCollection = fertilizables.get(block); - if (probabilityCollection != null) { - ConfiguredStructure structure = probabilityCollection.get(random); - structure.getStructure().get(random).generate(pos, world, random, Rotation.NONE); - return true; - } - } - return false; - } -} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java new file mode 100644 index 000000000..1b830202f --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java @@ -0,0 +1,55 @@ +/* + * This file is part of Terra. + * + * Terra is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Terra is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Terra. If not, see . + */ + +package com.dfsek.terra.bukkit.nms.v1_19_R1.util; + +import com.dfsek.terra.api.util.vector.Vector3; +import com.dfsek.terra.api.world.info.WorldProperties; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.LevelHeightAccessor; + + +public final class MinecraftAdapter { + + public static Vector3 adapt(BlockPos pos) { + return Vector3.of(pos.getX(), pos.getY(), pos.getZ()); + } + + public static WorldProperties adapt(LevelHeightAccessor height, long seed) { + return new WorldProperties() { + @Override + public long getSeed() { + return seed; + } + + @Override + public int getMaxHeight() { + return height.getMaxBuildHeight(); + } + + @Override + public int getMinHeight() { + return height.getMinBuildHeight(); + } + + @Override + public Object getHandle() { + return height; + } + }; + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java new file mode 100644 index 000000000..f6f8db471 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java @@ -0,0 +1,124 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.util; + +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Locale; +import java.util.Objects; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biome.BiomeBuilder; +import net.minecraft.world.level.biome.BiomeGenerationSettings; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; +import net.minecraft.world.level.block.entity.SignBlockEntity; +import net.minecraft.world.level.block.entity.SpawnerBlockEntity; +import com.dfsek.terra.api.block.entity.BlockEntity; +import com.dfsek.terra.api.block.entity.Container; +import com.dfsek.terra.api.block.entity.MobSpawner; +import com.dfsek.terra.api.block.entity.Sign; +import com.dfsek.terra.api.config.ConfigPack; + + +public final class MinecraftUtil { + public static final Logger logger = LoggerFactory.getLogger(MinecraftUtil.class); + + + private MinecraftUtil() { + + } + + public static Optional> getEntry(Registry registry, ResourceLocation identifier) { + return registry.getOptional(identifier) + .flatMap(registry::getResourceKey) + .map(registry::getOrCreateHolderOrThrow); + } + + public static BlockEntity createState(LevelAccessor worldAccess, BlockPos pos) { + net.minecraft.world.level.block.entity.BlockEntity entity = worldAccess.getBlockEntity(pos); + if(entity instanceof SignBlockEntity) { + return (Sign) entity; + } else if(entity instanceof SpawnerBlockEntity) { + return (MobSpawner) entity; + } else if(entity instanceof RandomizableContainerBlockEntity) { + return (Container) entity; + } + return null; + } + + public static ResourceKey registerKey(ResourceLocation identifier) { + return ResourceKey.create(Registry.BIOME_REGISTRY, identifier); + } + + public static Biome createBiome(VanillaBiomeProperties vanillaBiomeProperties) { + + BiomeGenerationSettings.Builder generationSettings = new BiomeGenerationSettings.Builder(); + + BiomeSpecialEffects.Builder effects = new BiomeSpecialEffects.Builder(); + + BiomeBuilder builder = new BiomeBuilder(); + + effects.waterColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterColor())) + .waterFogColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterFogColor())) + .fogColor(Objects.requireNonNull(vanillaBiomeProperties.getFogColor())) + .skyColor(Objects.requireNonNull(vanillaBiomeProperties.getSkyColor())) + .grassColorModifier( + Objects.requireNonNull(vanillaBiomeProperties.getGrassColorModifier())); + + if(vanillaBiomeProperties.getFoliageColor() != null) { + effects.foliageColorOverride(vanillaBiomeProperties.getFoliageColor()); + } + + if(vanillaBiomeProperties.getGrassColor() != null) { + effects.grassColorOverride(vanillaBiomeProperties.getGrassColor()); + } + + if(vanillaBiomeProperties.getParticleConfig() != null) { + effects.ambientParticle(vanillaBiomeProperties.getParticleConfig()); + } + + if(vanillaBiomeProperties.getLoopSound() != null) { + effects.ambientLoopSound(vanillaBiomeProperties.getLoopSound()); + } + + if(vanillaBiomeProperties.getMoodSound() != null) { + effects.ambientMoodSound(vanillaBiomeProperties.getMoodSound()); + } + + if(vanillaBiomeProperties.getAdditionsSound() != null) { + effects.ambientAdditionsSound(vanillaBiomeProperties.getAdditionsSound()); + } + + if(vanillaBiomeProperties.getMusic() != null) { + effects.backgroundMusic(vanillaBiomeProperties.getMusic()); + } + + builder.precipitation(Objects.requireNonNull(vanillaBiomeProperties.getPrecipitation())); + + builder.temperature(Objects.requireNonNull(vanillaBiomeProperties.getTemperature())); + + builder.downfall(Objects.requireNonNull(vanillaBiomeProperties.getDownfall())); + + builder.temperatureAdjustment(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); + + builder.mobSpawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); + + return builder + .specialEffects(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/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java new file mode 100644 index 000000000..669791c71 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java @@ -0,0 +1,60 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1.util; + + +import com.google.common.collect.ImmutableMap; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.biome.Biome; +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.Optional; + + +public final class TagUtil { + private static final Logger logger = LoggerFactory.getLogger(TagUtil.class); + + private TagUtil() { + + } + + private static Map, List>> tagsToMutableMap(Registry registry) { + return registry + .getTags() + .collect(HashMap::new, + (map, pair) -> + map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), + HashMap::putAll); + } + + public static void registerBiomeTags(Registry registry) { + logger.info("Doing data-driven biome tag garbage...."); + logger.info("who let this data drive?"); + Map, List>> collect = tagsToMutableMap(registry); + + BiomeUtil.TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { + collect.getOrDefault(tag, new ArrayList<>()) + .addAll(biomeList.stream() + .map(registry::getOptional) + .filter(Optional::isPresent) + .map(Optional::get) + .map(Holder::direct) + .toList()); + }); + + registry.resetTags(); + registry.bindTags(ImmutableMap.copyOf(collect)); + + if(logger.isDebugEnabled()) { + registry.holders() + .map(e -> e.key().location() + ": " + + e.tags().reduce("", (s, t) -> t.location() + ", " + s, String::concat)) + .forEach(logger::debug); + } + } +} From 199360b9813d22e78c1fb1a8fae9d04c66d2948e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Thu, 14 Jul 2022 00:45:52 -0700 Subject: [PATCH 15/17] Update LifecycleEntryPoint.java --- .../java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java index 12260088a..4350f31c0 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java @@ -18,7 +18,7 @@ public class LifecycleEntryPoint { private static final Logger logger = LoggerFactory.getLogger(LifecycleEntryPoint.class); protected static void initialize(String modName, LifecyclePlatform platform) { - logger.info("Initializing Terra %s mod...", modName); + logger.info("Initializing Terra {} mod...", modName); FabricServerCommandManager manager = new FabricServerCommandManager<>( CommandExecutionCoordinator.simpleCoordinator(), From 4b518c28a0cdd8f6edc1c960de27914634c98592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Thu, 14 Jul 2022 19:43:50 -0700 Subject: [PATCH 16/17] Requested changes --- buildSrc/src/main/kotlin/Versions.kt | 2 -- .../terra/addons/biome/UserDefinedBiome.java | 5 +++-- .../com/dfsek/terra/api/world/biome/Biome.java | 3 ++- .../bukkit/generator/BukkitBiomeProvider.java | 6 ++++-- .../terra/bukkit/world/BukkitPlatformBiome.java | 10 ++++++++++ .../terra/bukkit/nms/v1_19_R1/NMSPlatform.java | 1 - .../nms/v1_19_R1/config/MusicSoundTemplate.java | 15 +++++++-------- .../nms/v1_19_R1/config/ProtoPlatformBiome.java | 13 +++++++++++-- .../nms/v1_19_R1/config/SpawnEntryTemplate.java | 12 +++++------- platforms/fabric/build.gradle.kts | 3 --- .../terra/mod/config/MusicSoundTemplate.java | 15 +++++++-------- .../terra/mod/config/SpawnEntryTemplate.java | 13 ++++++------- .../terra/mod/generation/TerraBiomeSource.java | 4 ++-- platforms/mixin-lifecycle/build.gradle.kts | 5 ----- platforms/quilt/build.gradle.kts | 9 --------- 15 files changed, 57 insertions(+), 59 deletions(-) create mode 100644 platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index d2d0af695..9f68c177a 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -34,8 +34,6 @@ object Versions { const val yarn = "$minecraft+build.1" const val fabricLoader = "0.14.2" - const val minecraftGudAsm = "v0.3.1" - const val architecuryLoom = "0.12.0.290" const val architecturyPlugin = "3.4-SNAPSHOT" diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java index ac94f62fe..7fecae728 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java @@ -9,6 +9,7 @@ package com.dfsek.terra.addons.biome; import org.jetbrains.annotations.Nullable; +import java.util.Optional; import java.util.Set; import com.dfsek.terra.api.properties.Context; @@ -44,8 +45,8 @@ public class UserDefinedBiome implements Biome { } @Override - public @Nullable PlatformBiome getPlatformBiome() { - return platformBiome; + public Optional getPlatformBiome() { + return Optional.ofNullable(platformBiome); } @Override diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java index daca10e0f..9661d3547 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java @@ -10,6 +10,7 @@ package com.dfsek.terra.api.world.biome; import org.jetbrains.annotations.Nullable; +import java.util.Optional; import java.util.Set; import com.dfsek.terra.api.properties.PropertyHolder; @@ -26,7 +27,7 @@ public interface Biome extends PropertyHolder, StringIdentifiable { * * @return The platform biome. */ - @Nullable PlatformBiome getPlatformBiome(); + Optional getPlatformBiome(); /** * Get the color of this biome. diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java index dfff71ccc..d499dc4c1 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.generator; +import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; + import org.bukkit.generator.BiomeProvider; import org.bukkit.generator.WorldInfo; import org.jetbrains.annotations.NotNull; @@ -20,13 +22,13 @@ public class BukkitBiomeProvider extends BiomeProvider implements Handle { @Override public @NotNull org.bukkit.block.Biome getBiome(@NotNull WorldInfo worldInfo, int x, int y, int z) { Biome biome = delegate.getBiome(x, y, z, worldInfo.getSeed()); - return (org.bukkit.block.Biome) biome.getPlatformBiome().getHandle(); + return ((BukkitPlatformBiome)biome.getPlatformBiome().get()).getBukkitBiome(); } @Override public @NotNull List getBiomes(@NotNull WorldInfo worldInfo) { return StreamSupport.stream(delegate.getBiomes().spliterator(), false) - .map(terraBiome -> (org.bukkit.block.Biome) terraBiome.getPlatformBiome().getHandle()) + .map(terraBiome -> ((BukkitPlatformBiome)terraBiome.getPlatformBiome().get()).getBukkitBiome()) .collect(Collectors.toList()); } diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java new file mode 100644 index 000000000..650414a06 --- /dev/null +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java @@ -0,0 +1,10 @@ +package com.dfsek.terra.bukkit.world; + +import com.dfsek.terra.api.world.biome.PlatformBiome; + +import org.bukkit.block.Biome; + + +public interface BukkitPlatformBiome extends PlatformBiome { + Biome getBukkitBiome(); +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java index 47e67618d..51c71ec9f 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java @@ -6,7 +6,6 @@ import com.dfsek.tectonic.api.exception.LoadException; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.world.biome.PlatformBiome; -import com.dfsek.terra.bukkit.BukkitAddon; import com.dfsek.terra.bukkit.TerraBukkitPlugin; import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeAdditionsSoundTemplate; diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java index 0e8594a53..974477a39 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java @@ -3,6 +3,8 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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.dfsek.terra.api.util.Range; import net.minecraft.sounds.Music; import net.minecraft.sounds.SoundEvent; @@ -12,13 +14,10 @@ public class MusicSoundTemplate implements ObjectTemplate { @Default private SoundEvent sound = null; - @Value("min-delay") + @Value("delay") @Default - private Integer minDelay = null; - - @Value("max-delay") - @Default - private Integer maxDelay = null; + private Range delay = null; + @Value("replace-current-music") @Default @@ -26,10 +25,10 @@ public class MusicSoundTemplate implements ObjectTemplate { @Override public Music get() { - if(sound == null || minDelay == null || maxDelay == null || replaceCurrentMusic == null) { + if(sound == null || delay == null || replaceCurrentMusic == null) { return null; } else { - return new Music(sound, minDelay, maxDelay, replaceCurrentMusic); + return new Music(sound, delay.getMin(), delay.getMax(), replaceCurrentMusic); } } } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java index 81284df60..4a9b8e3cd 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java @@ -20,17 +20,21 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config; import com.dfsek.terra.api.world.biome.PlatformBiome; import com.dfsek.terra.bukkit.nms.v1_19_R1.util.MinecraftUtil; +import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; + import net.minecraft.core.Registry; +import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; +import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock; -public class ProtoPlatformBiome implements PlatformBiome { +public class ProtoPlatformBiome implements PlatformBiome, BukkitPlatformBiome { private final ResourceLocation identifier; private final ResourceKey biome; - + public ProtoPlatformBiome(ResourceLocation identifier, ResourceKey biome) { this.identifier = identifier; this.biome = biome; @@ -48,4 +52,9 @@ public class ProtoPlatformBiome implements PlatformBiome { public ResourceKey getBiome() { return biome; } + + @Override + public org.bukkit.block.Biome getBukkitBiome() { + return org.bukkit.block.Biome.CUSTOM; + } } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java index 8809349f9..ee9881e54 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java @@ -3,6 +3,8 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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.dfsek.terra.api.util.Range; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; @@ -16,16 +18,12 @@ public class SpawnEntryTemplate implements ObjectTemplate { @Default private Integer weight = null; - @Value("min-group-size") + @Value("group-size") @Default - private Integer minGroupSize = null; - - @Value("max-group-size") - @Default - private Integer maxGroupSize = null; + private Range groupSize = null; @Override public SpawnerData get() { - return new SpawnerData(type, weight, minGroupSize, maxGroupSize); + return new SpawnerData(type, weight, groupSize.getMin(), groupSize.getMax()); } } diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index dbe104cdd..2a20545a2 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -15,9 +15,6 @@ dependencies { annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}") - modImplementation("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") - include("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") - implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } "developmentFabric"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionFabric")) { isTransitive = false } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java index 17745a9af..6d8d9d704 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java @@ -3,6 +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 com.dfsek.terra.api.util.Range; + import net.minecraft.sound.MusicSound; import net.minecraft.sound.SoundEvent; @@ -12,13 +15,9 @@ public class MusicSoundTemplate implements ObjectTemplate { @Default private SoundEvent sound = null; - @Value("min-delay") + @Value("delay") @Default - private Integer minDelay = null; - - @Value("max-delay") - @Default - private Integer maxDelay = null; + private Range delay = null; @Value("replace-current-music") @Default @@ -26,10 +25,10 @@ public class MusicSoundTemplate implements ObjectTemplate { @Override public MusicSound get() { - if(sound == null || minDelay == null || maxDelay == null || replaceCurrentMusic == null) { + if(sound == null || delay == null || replaceCurrentMusic == null) { return null; } else { - return new MusicSound(sound, minDelay, maxDelay, replaceCurrentMusic); + return new MusicSound(sound, delay.getMin(), delay.getMax(), replaceCurrentMusic); } } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java index 7c203b62e..a0cfa92b2 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java @@ -3,6 +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 com.dfsek.terra.api.util.Range; + import net.minecraft.entity.EntityType; import net.minecraft.world.biome.SpawnSettings.SpawnEntry; @@ -16,16 +19,12 @@ public class SpawnEntryTemplate implements ObjectTemplate { @Default private Integer weight = null; - @Value("min-group-size") + @Value("group-size") @Default - private Integer minGroupSize = null; - - @Value("max-group-size") - @Default - private Integer maxGroupSize = null; + private Range groupSize = null; @Override public SpawnEntry get() { - return new SpawnEntry(type, weight, minGroupSize, maxGroupSize); + return new SpawnEntry(type, weight, groupSize.getMin(), groupSize.getMax()); } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java index 6bde89c88..22c227db1 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java @@ -45,7 +45,7 @@ public class TerraBiomeSource extends BiomeSource { .stream(pack.getBiomeProvider() .getBiomes() .spliterator(), false) - .map(b -> biomes.getOrCreateEntry(((ProtoPlatformBiome) b.getPlatformBiome()).getBiome()))); + .map(b -> biomes.getOrCreateEntry(((ProtoPlatformBiome) b.getPlatformBiome().get()).getBiome()))); this.biomeRegistry = biomes; this.pack = pack; @@ -63,7 +63,7 @@ public class TerraBiomeSource extends BiomeSource { .entryOf(((ProtoPlatformBiome) pack .getBiomeProvider() .getBiome(biomeX << 2, biomeY << 2, biomeZ << 2, SeedHack.getSeed(noiseSampler)) - .getPlatformBiome()).getBiome() + .getPlatformBiome().get()).getBiome() ); } diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts index f3cbd5486..e8b852dc5 100644 --- a/platforms/mixin-lifecycle/build.gradle.kts +++ b/platforms/mixin-lifecycle/build.gradle.kts @@ -11,11 +11,6 @@ dependencies { annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}") - modImplementation("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") { - exclude("net.fabricmc") - exclude("net.fabricmc.fabric-api") - } - implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") diff --git a/platforms/quilt/build.gradle.kts b/platforms/quilt/build.gradle.kts index 52af2ed18..38ddaaae6 100644 --- a/platforms/quilt/build.gradle.kts +++ b/platforms/quilt/build.gradle.kts @@ -15,15 +15,6 @@ dependencies { annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") annotationProcessor("dev.architectury:architectury-loom:${Versions.Mod.architecuryLoom}") - modImplementation("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") { - exclude("net.fabricmc") - exclude("net.fabricmc.fabric-api") - } - include("com.github.the-glitch-network:minecraft-gudasm:${Versions.Mod.minecraftGudAsm}") { - exclude("net.fabricmc") - exclude("net.fabricmc.fabric-api") - } - implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } "developmentQuilt"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionQuilt")) { isTransitive = false } From 1003304fdef72301c063d7faaf04427de023a057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Thu, 14 Jul 2022 19:50:25 -0700 Subject: [PATCH 17/17] Reformat --- .../src/main/kotlin/DistributionConfig.kt | 6 +-- buildSrc/src/main/kotlin/Versions.kt | 8 +-- .../terra/addons/biome/UserDefinedBiome.java | 18 +++---- .../structure/StructureGenerationStage.java | 2 +- .../dfsek/terra/api/world/biome/Biome.java | 12 ++--- .../com/dfsek/terra/addon/InternalAddon.java | 2 +- .../terra/addon/BootstrapAddonLoader.java | 4 +- gradle.properties | 1 - .../com/dfsek/terra/bukkit/BukkitAddon.java | 5 +- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 3 +- .../bukkit/generator/BukkitBiomeProvider.java | 7 ++- .../BukkitChunkGeneratorWrapper.java | 8 +-- .../dfsek/terra/bukkit/nms/Initializer.java | 3 +- .../bukkit/world/BukkitPlatformBiome.java | 4 +- .../bukkit/nms/v1_19_R1/AwfulBukkitHacks.java | 11 ++--- .../bukkit/nms/v1_19_R1/NMSBiomeInjector.java | 39 +++++++-------- .../bukkit/nms/v1_19_R1/NMSBiomeProvider.java | 5 +- .../v1_19_R1/NMSChunkGeneratorDelegate.java | 6 +-- .../nms/v1_19_R1/NMSInjectListener.java | 8 +-- .../bukkit/nms/v1_19_R1/NMSPlatform.java | 49 ++++++++----------- .../terra/bukkit/nms/v1_19_R1/Reflection.java | 1 + .../v1_19_R1/config/FertilizableConfig.java | 4 +- .../v1_19_R1/config/MusicSoundTemplate.java | 6 +-- .../v1_19_R1/config/ProtoPlatformBiome.java | 13 ++--- .../v1_19_R1/config/SpawnEntryTemplate.java | 4 +- .../config/SpawnSettingsTemplate.java | 5 +- .../nms/v1_19_R1/config/SpawnTypeConfig.java | 3 +- .../config/VanillaBiomeProperties.java | 9 ++-- .../bukkit/nms/v1_19_R1/util/BiomeUtil.java | 47 +++++++++--------- .../nms/v1_19_R1/util/MinecraftAdapter.java | 5 +- .../nms/v1_19_R1/util/MinecraftUtil.java | 18 +++---- .../bukkit/nms/v1_19_R1/util/TagUtil.java | 6 +-- .../java/com/dfsek/terra/mod/ModPlatform.java | 2 +- .../terra/mod/config/MusicSoundTemplate.java | 5 +- .../terra/mod/config/SpawnEntryTemplate.java | 5 +- .../mod/config/SpawnSettingsTemplate.java | 2 +- .../entity/MobSpawnerBlockEntityMixin.java | 14 +++--- .../com/dfsek/terra/mod/util/BiomeUtil.java | 18 +++---- .../dfsek/terra/mod/util/MinecraftUtil.java | 2 +- .../com/dfsek/terra/mod/util/TagUtil.java | 6 +-- .../terra/lifecycle/LifecycleEntryPoint.java | 18 +++---- .../terra/lifecycle/LifecyclePlatform.java | 4 +- .../terra/lifecycle/util/LifecycleUtil.java | 2 +- .../dfsek/terra/quilt/AwfulQuiltHacks.java | 6 +-- .../com/dfsek/terra/quilt/QuiltAddon.java | 4 +- 45 files changed, 189 insertions(+), 221 deletions(-) diff --git a/buildSrc/src/main/kotlin/DistributionConfig.kt b/buildSrc/src/main/kotlin/DistributionConfig.kt index 6c743e9e8..c6b23d09b 100644 --- a/buildSrc/src/main/kotlin/DistributionConfig.kt +++ b/buildSrc/src/main/kotlin/DistributionConfig.kt @@ -8,7 +8,6 @@ import java.nio.file.StandardCopyOption import org.gradle.api.DefaultTask import org.gradle.api.Project import org.gradle.api.plugins.BasePluginExtension -import org.gradle.kotlin.dsl.TaskContainerScope import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.extra @@ -88,7 +87,8 @@ fun Project.configureDistribution() { val jar = getJarTask().archiveFileName.get() resources.computeIfAbsent( if (extra.has("bootstrap") && extra.get("bootstrap") as Boolean) "addons/bootstrap" - else "addons") { ArrayList() }.add(jar) + else "addons" + ) { ArrayList() }.add(jar) } val options = DumperOptions() @@ -109,7 +109,7 @@ fun Project.configureDistribution() { FileWriter(manifest).use { yaml.dump(resources, it) } - + } } diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 9f68c177a..6d0a1e2e0 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -29,16 +29,16 @@ object Versions { object Mod { const val mixin = "0.11.2+mixin.0.8.5" - + const val minecraft = "1.19" const val yarn = "$minecraft+build.1" const val fabricLoader = "0.14.2" - + const val architecuryLoom = "0.12.0.290" const val architecturyPlugin = "3.4-SNAPSHOT" - + const val loomQuiltflower = "1.7.1" - + const val lazyDfu = "0.1.2" } diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java index 7fecae728..cee1f1c9c 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java @@ -7,8 +7,6 @@ package com.dfsek.terra.addons.biome; -import org.jetbrains.annotations.Nullable; - import java.util.Optional; import java.util.Set; @@ -21,14 +19,12 @@ import com.dfsek.terra.api.world.biome.PlatformBiome; * Class representing a config-defined biome */ public class UserDefinedBiome implements Biome { - private PlatformBiome platformBiome; - private final String id; private final BiomeTemplate config; private final int color; private final Set tags; - private final Context context = new Context(); + private PlatformBiome platformBiome; public UserDefinedBiome(BiomeTemplate config) { this.id = config.getID(); @@ -49,20 +45,20 @@ public class UserDefinedBiome implements Biome { return Optional.ofNullable(platformBiome); } - @Override - public int getColor() { - return color; - } - @Override public void setPlatformBiome(PlatformBiome biome) { if(platformBiome != null) { throw new IllegalStateException("Platform biome already set"); } - + this.platformBiome = biome; } + @Override + public int getColor() { + return color; + } + @Override public Set getTags() { return tags; diff --git a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationStage.java b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationStage.java index 07d9e7128..9c2ac99ab 100644 --- a/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationStage.java +++ b/common/addons/generation-stage-structure/src/main/java/com/dfsek/terra/addons/generation/structure/StructureGenerationStage.java @@ -12,6 +12,6 @@ public class StructureGenerationStage implements GenerationStage { @Override public void populate(ProtoWorld world) { - + } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java index 9661d3547..c2c88fea4 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/Biome.java @@ -8,8 +8,6 @@ package com.dfsek.terra.api.world.biome; -import org.jetbrains.annotations.Nullable; - import java.util.Optional; import java.util.Set; @@ -29,6 +27,11 @@ public interface Biome extends PropertyHolder, StringIdentifiable { */ Optional getPlatformBiome(); + /** + * Sets the platform biome this custom biome delegates to. + */ + void setPlatformBiome(PlatformBiome biome); + /** * Get the color of this biome. * @@ -42,9 +45,4 @@ public interface Biome extends PropertyHolder, StringIdentifiable { * @return A {@link Set} of String tags this biome holds. */ Set getTags(); - - /** - * Sets the platform biome this custom biome delegates to. - */ - void setPlatformBiome(PlatformBiome biome); } diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java b/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java index cdd9ac5f2..0a63af2db 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java @@ -27,7 +27,7 @@ public class InternalAddon implements BaseAddon { private static final Version VERSION = Versions.getVersion(1, 0, 0); public InternalAddon() { - + } @Override diff --git a/common/implementation/bootstrap-addon-loader/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java b/common/implementation/bootstrap-addon-loader/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java index 301f276fa..874e8047c 100644 --- a/common/implementation/bootstrap-addon-loader/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java +++ b/common/implementation/bootstrap-addon-loader/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java @@ -84,7 +84,7 @@ public class BootstrapAddonLoader implements BootstrapBaseAddon bootstrapAddons = Files.walk(bootstrapFolder, 1, FileVisitOption.FOLLOW_LINKS)) { return bootstrapAddons.filter(path -> path.toFile().isFile()) .filter(path -> path.toFile().canRead()) @@ -96,7 +96,7 @@ public class BootstrapAddonLoader implements BootstrapBaseAddon generatorMap = new HashMap<>(); + private PlatformImpl platform; @Override public void onEnable() { diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java index d499dc4c1..418f27b15 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitBiomeProvider.java @@ -1,7 +1,5 @@ package com.dfsek.terra.bukkit.generator; -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; - import org.bukkit.generator.BiomeProvider; import org.bukkit.generator.WorldInfo; import org.jetbrains.annotations.NotNull; @@ -12,6 +10,7 @@ import java.util.stream.StreamSupport; import com.dfsek.terra.api.Handle; import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; public class BukkitBiomeProvider extends BiomeProvider implements Handle { @@ -22,13 +21,13 @@ public class BukkitBiomeProvider extends BiomeProvider implements Handle { @Override public @NotNull org.bukkit.block.Biome getBiome(@NotNull WorldInfo worldInfo, int x, int y, int z) { Biome biome = delegate.getBiome(x, y, z, worldInfo.getSeed()); - return ((BukkitPlatformBiome)biome.getPlatformBiome().get()).getBukkitBiome(); + return ((BukkitPlatformBiome) biome.getPlatformBiome().get()).getBukkitBiome(); } @Override public @NotNull List getBiomes(@NotNull WorldInfo worldInfo) { return StreamSupport.stream(delegate.getBiomes().spliterator(), false) - .map(terraBiome -> ((BukkitPlatformBiome)terraBiome.getPlatformBiome().get()).getBukkitBiome()) + .map(terraBiome -> ((BukkitPlatformBiome) terraBiome.getPlatformBiome().get()).getBukkitBiome()) .collect(Collectors.toList()); } diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java index 8d7302fa7..4cb9bfaef 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java @@ -46,7 +46,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener private ChunkGenerator delegate; private ConfigPack pack; - + public BukkitChunkGeneratorWrapper(ChunkGenerator delegate, ConfigPack pack, BlockState air) { this.delegate = delegate; this.pack = pack; @@ -97,7 +97,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener public boolean shouldGenerateMobs() { return true; } - + @Override public boolean shouldGenerateStructures() { return true; @@ -117,7 +117,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener return delegate; } - + private record SeededVector(int x, int z, WorldProperties worldProperties) { @Override public boolean equals(Object obj) { @@ -126,7 +126,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener } return false; } - + @Override public int hashCode() { int code = x; 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 8b7085f86..4674b0045 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,12 +1,11 @@ package com.dfsek.terra.bukkit.nms; -import com.dfsek.terra.bukkit.TerraBukkitPlugin; - import org.bukkit.Bukkit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.dfsek.terra.bukkit.PlatformImpl; +import com.dfsek.terra.bukkit.TerraBukkitPlugin; public interface Initializer { diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java index 650414a06..138fa6133 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java @@ -1,9 +1,9 @@ package com.dfsek.terra.bukkit.world; -import com.dfsek.terra.api.world.biome.PlatformBiome; - import org.bukkit.block.Biome; +import com.dfsek.terra.api.world.biome.PlatformBiome; + public interface BukkitPlatformBiome extends PlatformBiome { Biome getBukkitBiome(); 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 index 9521c7532..13254b156 100644 --- 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 @@ -1,9 +1,5 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; -import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.util.TagUtil; - import net.minecraft.core.Holder; import net.minecraft.core.MappedRegistry; import net.minecraft.core.WritableRegistry; @@ -19,17 +15,18 @@ import java.util.Map; import com.dfsek.terra.api.structure.configured.ConfiguredStructure; import com.dfsek.terra.api.util.collection.ProbabilityCollection; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.TagUtil; import com.dfsek.terra.registry.master.ConfigRegistry; public class AwfulBukkitHacks { - private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); - public static final Map, Map>> TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>(); public static final Map, List> TERRA_BIOME_TAG_MAP = new HashMap<>(); + private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); public static void registerBiomes(ConfigRegistry configRegistry) { try { @@ -43,7 +40,7 @@ public class AwfulBukkitHacks { })); Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - + TagUtil.registerBiomeTags(biomeRegistry); } catch(SecurityException | IllegalArgumentException exception) { 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 index 78e99db0e..42768215b 100644 --- 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 @@ -1,7 +1,5 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; - import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -15,10 +13,11 @@ import java.util.Objects; import java.util.Optional; import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; public class NMSBiomeInjector { - + public static Optional> getEntry(Registry registry, ResourceLocation identifier) { return registry.getOptional(identifier) .flatMap(registry::getResourceKey) @@ -27,58 +26,58 @@ public class NMSBiomeInjector { public static Biome createBiome(VanillaBiomeProperties vanillaBiomeProperties) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - + BiomeGenerationSettings.Builder generationSettings = new BiomeGenerationSettings.Builder(); - + BiomeSpecialEffects.Builder effects = new BiomeSpecialEffects.Builder(); - + net.minecraft.world.level.biome.Biome.BiomeBuilder builder = new BiomeBuilder(); - + effects.waterColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterColor())) .waterFogColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterFogColor())) .fogColor(Objects.requireNonNull(vanillaBiomeProperties.getFogColor())) .skyColor(Objects.requireNonNull(vanillaBiomeProperties.getSkyColor())) .grassColorModifier( Objects.requireNonNull(vanillaBiomeProperties.getGrassColorModifier())); - + if(vanillaBiomeProperties.getFoliageColor() != null) { effects.foliageColorOverride(vanillaBiomeProperties.getFoliageColor()); } - + if(vanillaBiomeProperties.getGrassColor() != null) { effects.grassColorOverride(vanillaBiomeProperties.getGrassColor()); } - + if(vanillaBiomeProperties.getParticleConfig() != null) { effects.ambientParticle(vanillaBiomeProperties.getParticleConfig()); } - + if(vanillaBiomeProperties.getLoopSound() != null) { effects.ambientLoopSound(vanillaBiomeProperties.getLoopSound()); } - + if(vanillaBiomeProperties.getMoodSound() != null) { effects.ambientMoodSound(vanillaBiomeProperties.getMoodSound()); } - + if(vanillaBiomeProperties.getAdditionsSound() != null) { effects.ambientAdditionsSound(vanillaBiomeProperties.getAdditionsSound()); } - + if(vanillaBiomeProperties.getMusic() != null) { effects.backgroundMusic(vanillaBiomeProperties.getMusic()); } - + builder.precipitation(Objects.requireNonNull(vanillaBiomeProperties.getPrecipitation())); - + builder.temperature(Objects.requireNonNull(vanillaBiomeProperties.getTemperature())); - + builder.downfall(Objects.requireNonNull(vanillaBiomeProperties.getDownfall())); - + builder.temperatureAdjustment(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); - + builder.mobSpawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); - + return builder .specialEffects(effects.build()) .generationSettings(generationSettings.build()) 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 index 642a40509..37385c1cb 100644 --- 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 @@ -1,7 +1,5 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; - import com.mojang.serialization.Codec; import net.minecraft.core.Holder; import net.minecraft.core.Registry; @@ -11,6 +9,7 @@ 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.nms.v1_19_R1.config.ProtoPlatformBiome; public class NMSBiomeProvider extends BiomeSource { @@ -34,6 +33,6 @@ public class NMSBiomeProvider extends BiomeSource { @Override public @NotNull Holder getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) { return biomeRegistry.getHolderOrThrow(((ProtoPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed) - .getPlatformBiome()).getBiome()); + .getPlatformBiome()).getBiome()); } } 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 index 81933be0f..7fc14abe9 100644 --- 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 @@ -143,10 +143,10 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator { */ return vanilla.getBaseColumn(x, z, world, noiseConfig); } - + @Override public void addDebugScreenInfo(@NotNull List text, @NotNull RandomState noiseConfig, @NotNull BlockPos pos) { - + } @Override @@ -187,7 +187,7 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator { } }); } - + private List generateRingPositions(StructureSet holder, RandomState randomstate, ConcentricRingsStructurePlacement concentricringsstructureplacement) { // Spigot if(concentricringsstructureplacement.count() == 0) { 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 index 59cf101e5..d57689a9b 100644 --- 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 @@ -38,13 +38,13 @@ public class NMSInjectListener implements Listener { 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/NMSPlatform.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java index 51c71ec9f..323c84986 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSPlatform.java @@ -3,32 +3,6 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1; import com.dfsek.tectonic.api.TypeRegistry; import com.dfsek.tectonic.api.depth.DepthTracker; import com.dfsek.tectonic.api.exception.LoadException; - -import com.dfsek.terra.api.addon.BaseAddon; -import com.dfsek.terra.api.world.biome.PlatformBiome; -import com.dfsek.terra.bukkit.TerraBukkitPlugin; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeAdditionsSoundTemplate; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeMoodSoundTemplate; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeParticleConfigTemplate; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.EntityTypeTemplate; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.MusicSoundTemplate; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SoundEventTemplate; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnCostConfig; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnEntryTemplate; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnSettingsTemplate; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnTypeConfig; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VillagerTypeTemplate; - -import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil; - import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -48,11 +22,28 @@ import net.minecraft.world.level.biome.MobSpawnSettings; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import org.bukkit.Bukkit; -import com.dfsek.terra.bukkit.PlatformImpl; - import java.util.List; import java.util.Locale; +import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.api.world.biome.PlatformBiome; +import com.dfsek.terra.bukkit.PlatformImpl; +import com.dfsek.terra.bukkit.TerraBukkitPlugin; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeAdditionsSoundTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeMoodSoundTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeParticleConfigTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.EntityTypeTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.MusicSoundTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SoundEventTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnCostConfig; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnEntryTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnSettingsTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnTypeConfig; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VillagerTypeTemplate; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil; + public class NMSPlatform extends PlatformImpl { @@ -84,7 +75,7 @@ public class NMSPlatform extends PlatformImpl { .registerLoader(GrassColorModifier.class, (type, o, loader, depthTracker) -> TemperatureModifier.valueOf(((String) o).toUpperCase( Locale.ROOT))) - .registerLoader(MobCategory.class,(type, o, loader, depthTracker) -> MobCategory.valueOf((String) o)) + .registerLoader(MobCategory.class, (type, o, loader, depthTracker) -> MobCategory.valueOf((String) o)) .registerLoader(AmbientParticleSettings.class, BiomeParticleConfigTemplate::new) .registerLoader(SoundEvent.class, SoundEventTemplate::new) .registerLoader(AmbientMoodSettings.class, BiomeMoodSoundTemplate::new) 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 index fa35491db..9d19710d3 100644 --- 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 @@ -35,6 +35,7 @@ public class Reflection { void setFrozen(MappedRegistry instance, boolean frozen); } + @Proxies(VillagerTypeProxy.class) public interface VillagerTypeProxy { @Static diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java index 1e545169e..110f7d5ae 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/FertilizableConfig.java @@ -3,8 +3,10 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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.Map; import net.minecraft.resources.ResourceLocation; + +import java.util.Map; + import com.dfsek.terra.api.structure.configured.ConfiguredStructure; import com.dfsek.terra.api.util.collection.ProbabilityCollection; diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java index 974477a39..5e8410e60 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/MusicSoundTemplate.java @@ -3,11 +3,11 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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.dfsek.terra.api.util.Range; import net.minecraft.sounds.Music; import net.minecraft.sounds.SoundEvent; +import com.dfsek.terra.api.util.Range; + public class MusicSoundTemplate implements ObjectTemplate { @Value("sound") @@ -17,7 +17,7 @@ public class MusicSoundTemplate implements ObjectTemplate { @Value("delay") @Default private Range delay = null; - + @Value("replace-current-music") @Default diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java index 4a9b8e3cd..e88768da1 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/ProtoPlatformBiome.java @@ -17,24 +17,21 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config; -import com.dfsek.terra.api.world.biome.PlatformBiome; -import com.dfsek.terra.bukkit.nms.v1_19_R1.util.MinecraftUtil; - -import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; - import net.minecraft.core.Registry; -import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; -import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock; + +import com.dfsek.terra.api.world.biome.PlatformBiome; +import com.dfsek.terra.bukkit.nms.v1_19_R1.util.MinecraftUtil; +import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; public class ProtoPlatformBiome implements PlatformBiome, BukkitPlatformBiome { private final ResourceLocation identifier; private final ResourceKey biome; - + public ProtoPlatformBiome(ResourceLocation identifier, ResourceKey biome) { this.identifier = identifier; this.biome = biome; diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java index ee9881e54..d46cec6b4 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnEntryTemplate.java @@ -3,11 +3,11 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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.dfsek.terra.api.util.Range; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; +import com.dfsek.terra.api.util.Range; + public class SpawnEntryTemplate implements ObjectTemplate { @Value("type") diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java index 6f088fdab..2b007a035 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnSettingsTemplate.java @@ -3,11 +3,12 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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 java.util.List; + public class SpawnSettingsTemplate implements ObjectTemplate { @Value("spawns") @@ -27,7 +28,7 @@ public class SpawnSettingsTemplate implements ObjectTemplate { MobSpawnSettings.Builder builder = new MobSpawnSettings.Builder(); for(SpawnTypeConfig spawn : spawns) { MobCategory group = spawn.getGroup(); - for (SpawnerData entry : spawn.getEntry()) { + for(SpawnerData entry : spawn.getEntry()) { builder.addSpawn(group, entry); } } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java index a98956405..c1574ae4e 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/SpawnTypeConfig.java @@ -3,10 +3,11 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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; +import java.util.List; + public class SpawnTypeConfig implements ObjectTemplate { @Value("group") diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java index fd4db759a..d367fd94b 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/config/VanillaBiomeProperties.java @@ -3,10 +3,6 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.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.Collections; -import java.util.List; -import java.util.Map; - import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.Music; import net.minecraft.sounds.SoundEvent; @@ -18,6 +14,11 @@ 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 java.util.Collections; +import java.util.List; +import java.util.Map; + import com.dfsek.terra.api.properties.Properties; diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java index 32530f8c6..0fa926a11 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/BiomeUtil.java @@ -1,10 +1,12 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.util; -import com.dfsek.terra.bukkit.nms.v1_19_R1.Reflection; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; - +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.npc.VillagerType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,27 +15,24 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import net.minecraft.core.Holder; -import net.minecraft.core.Registry; -import net.minecraft.data.BuiltinRegistries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.entity.npc.VillagerType; + import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.bukkit.nms.v1_19_R1.Reflection; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; + public class BiomeUtil { - private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); - public static final Map, Map> TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>(); - public static final Map, List> TERRA_BIOME_TAG_MAP = new HashMap<>(); + private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); protected static ResourceKey registerBiome(ResourceLocation identifier, - net.minecraft.world.level.biome.Biome biome) { + net.minecraft.world.level.biome.Biome biome) { BuiltinRegistries.register(BuiltinRegistries.BIOME, MinecraftUtil.registerKey(identifier) .location(), @@ -52,22 +51,22 @@ public class BiomeUtil { * @param pack The ConfigPack this biome belongs to. */ public static void registerBiome(Biome biome, ConfigPack pack, - com.dfsek.terra.api.registry.key.RegistryKey id) { + com.dfsek.terra.api.registry.key.RegistryKey id) { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - + net.minecraft.world.level.biome.Biome minecraftBiome = MinecraftUtil.createBiome(vanillaBiomeProperties); - + ResourceLocation identifier = new ResourceLocation("terra", MinecraftUtil.createBiomeID(pack, id)); - + biome.setPlatformBiome(new ProtoPlatformBiome(identifier, registerBiome(identifier, minecraftBiome))); - + Map villagerMap = Reflection.VILLAGER_TYPE.getByBiome(); - + villagerMap.put(ResourceKey.create(Registry.BIOME_REGISTRY, identifier), Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); - + TERRA_BIOME_FERTILIZABLE_MAP.put(Holder.direct(minecraftBiome), vanillaBiomeProperties.getFertilizables()); - + for(ResourceLocation tag : vanillaBiomeProperties.getTags()) { TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.create(Registry.BIOME_REGISTRY, tag), new ArrayList<>()).add(identifier); } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java index 1b830202f..b7da83766 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftAdapter.java @@ -17,11 +17,12 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.util; -import com.dfsek.terra.api.util.vector.Vector3; -import com.dfsek.terra.api.world.info.WorldProperties; import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelHeightAccessor; +import com.dfsek.terra.api.util.vector.Vector3; +import com.dfsek.terra.api.world.info.WorldProperties; + public final class MinecraftAdapter { diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java index f6f8db471..d68b19980 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/MinecraftUtil.java @@ -1,13 +1,5 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.util; -import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Locale; -import java.util.Objects; -import java.util.Optional; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.Registry; @@ -21,11 +13,19 @@ import net.minecraft.world.level.biome.BiomeSpecialEffects; import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; import net.minecraft.world.level.block.entity.SignBlockEntity; import net.minecraft.world.level.block.entity.SpawnerBlockEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Locale; +import java.util.Objects; +import java.util.Optional; + import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.block.entity.Container; import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.Sign; import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties; public final class MinecraftUtil { @@ -110,7 +110,7 @@ public final class MinecraftUtil { builder.temperatureAdjustment(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); builder.mobSpawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); - + return builder .specialEffects(effects.build()) .generationSettings(generationSettings.build()) diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java index 669791c71..198785abd 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/util/TagUtil.java @@ -36,7 +36,7 @@ public final class TagUtil { logger.info("Doing data-driven biome tag garbage...."); logger.info("who let this data drive?"); Map, List>> collect = tagsToMutableMap(registry); - + BiomeUtil.TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { collect.getOrDefault(tag, new ArrayList<>()) .addAll(biomeList.stream() @@ -46,10 +46,10 @@ public final class TagUtil { .map(Holder::direct) .toList()); }); - + registry.resetTags(); registry.bindTags(ImmutableMap.copyOf(collect)); - + if(logger.isDebugEnabled()) { registry.holders() .map(e -> e.key().location() + ": " + 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 03d7e179c..aae4a9aac 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 @@ -85,7 +85,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(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) diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java index 6d8d9d704..ee5174dff 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/MusicSoundTemplate.java @@ -3,12 +3,11 @@ 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 com.dfsek.terra.api.util.Range; - import net.minecraft.sound.MusicSound; import net.minecraft.sound.SoundEvent; +import com.dfsek.terra.api.util.Range; + public class MusicSoundTemplate implements ObjectTemplate { @Value("sound") diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java index a0cfa92b2..cf69073bd 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/SpawnEntryTemplate.java @@ -3,12 +3,11 @@ 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 com.dfsek.terra.api.util.Range; - import net.minecraft.entity.EntityType; import net.minecraft.world.biome.SpawnSettings.SpawnEntry; +import com.dfsek.terra.api.util.Range; + public class SpawnEntryTemplate implements ObjectTemplate { @Value("type") 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..eebf51948 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,7 +28,7 @@ public class SpawnSettingsTemplate implements ObjectTemplate { SpawnSettings.Builder builder = new SpawnSettings.Builder(); for(SpawnTypeConfig spawn : spawns) { SpawnGroup group = spawn.getGroup(); - for (SpawnEntry entry : spawn.getEntry()) { + for(SpawnEntry entry : spawn.getEntry()) { builder.spawn(group, entry); } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java index f28c27a62..939cc3577 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java @@ -62,7 +62,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { } public void terra$setDelay(int delay) { - + } public int terra$getMinSpawnDelay() { @@ -70,7 +70,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { } public void terra$setMinSpawnDelay(int delay) { - + } public int terra$getMaxSpawnDelay() { @@ -78,7 +78,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { } public void terra$setMaxSpawnDelay(int delay) { - + } public int terra$getSpawnCount() { @@ -86,7 +86,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { } public void terra$setSpawnCount(int spawnCount) { - + } public int terra$getMaxNearbyEntities() { @@ -94,7 +94,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { } public void terra$setMaxNearbyEntities(int maxNearbyEntities) { - + } public int terra$getRequiredPlayerRange() { @@ -102,7 +102,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { } public void terra$setRequiredPlayerRange(int requiredPlayerRange) { - + } public int terra$getSpawnRange() { @@ -110,7 +110,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { } public void terra$setSpawnRange(int spawnRange) { - + } public void terra$applyState(String state) { 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 e6a3546fe..4e13d6eec 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 @@ -26,13 +26,11 @@ import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; public class BiomeUtil { - private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); - public static final Map, Map> TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>(); - public static final Map, List> TERRA_BIOME_TAG_MAP = new HashMap<>(); + private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class); public static void registerBiomes() { logger.info("Registering biomes..."); @@ -65,20 +63,20 @@ public class BiomeUtil { protected static void registerBiome(Biome biome, ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey id) { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(vanillaBiomeProperties); - + Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); - + biome.setPlatformBiome(new ProtoPlatformBiome(identifier, registerBiome(identifier, minecraftBiome))); - + Map villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap(); - + villagerMap.put(RegistryKey.of(Registry.BIOME_KEY, identifier), Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS)); - + TERRA_BIOME_FERTILIZABLE_MAP.put(RegistryEntry.of(minecraftBiome), vanillaBiomeProperties.getFertilizables()); - + for(Identifier tag : vanillaBiomeProperties.getTags()) { TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.of(Registry.BIOME_KEY, tag), new ArrayList<>()).add(identifier); } 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 00be6a437..941f85b2c 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 @@ -110,7 +110,7 @@ public final class MinecraftUtil { builder.temperatureModifier(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier())); builder.spawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings())); - + return builder .effects(effects.build()) .generationSettings(generationSettings.build()) 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 e9c6151c5..f30168b65 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 @@ -55,7 +55,7 @@ public final class TagUtil { logger.info("Doing data-driven biome tag garbage...."); logger.info("who let this data drive?"); Map, List>> collect = tagsToMutableMap(registry); - + BiomeUtil.TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> { collect.getOrDefault(tag, new ArrayList<>()) .addAll(biomeList.stream() @@ -65,10 +65,10 @@ public final class TagUtil { .map(RegistryEntry::of) .toList()); }); - + registry.clearTags(); registry.populateTags(ImmutableMap.copyOf(collect)); - + if(logger.isDebugEnabled()) { registry.streamEntries() .map(e -> e.registryKey().getValue() + ": " + diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java index 4350f31c0..3f53bfdfb 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/LifecycleEntryPoint.java @@ -1,34 +1,30 @@ package com.dfsek.terra.lifecycle; import cloud.commandframework.execution.CommandExecutionCoordinator; - import cloud.commandframework.fabric.FabricServerCommandManager; - -import com.dfsek.terra.api.command.CommandSender; -import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; - -import com.dfsek.terra.mod.MinecraftAddon; - import net.minecraft.server.command.ServerCommandSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.dfsek.terra.api.command.CommandSender; +import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; + public class LifecycleEntryPoint { private static final Logger logger = LoggerFactory.getLogger(LifecycleEntryPoint.class); protected static void initialize(String modName, LifecyclePlatform platform) { logger.info("Initializing Terra {} mod...", modName); - + FabricServerCommandManager manager = new FabricServerCommandManager<>( CommandExecutionCoordinator.simpleCoordinator(), serverCommandSource -> (CommandSender) serverCommandSource, commandSender -> (ServerCommandSource) commandSender ); - - + + manager.brigadierManager().setNativeNumberSuggestions(false); - + platform.getEventManager().callEvent(new CommandRegistrationEvent(manager)); } } 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 d28ad4634..87b67aa01 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 @@ -80,9 +80,9 @@ public abstract class LifecyclePlatform extends ModPlatform { LOGGER.warn("Failed to parse Minecraft version", e); } } - + addons.addAll(getPlatformMods()); - + return addons; } 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 b5a611fd1..d5b66ee1e 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 @@ -9,7 +9,7 @@ import com.dfsek.terra.mod.util.BiomeUtil; public final class LifecycleUtil { private LifecycleUtil() { - + } public static void initialize() { diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/AwfulQuiltHacks.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/AwfulQuiltHacks.java index 6dbcbaff4..e702a5e4c 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/AwfulQuiltHacks.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/AwfulQuiltHacks.java @@ -23,12 +23,12 @@ public final class AwfulQuiltHacks { } catch(ReflectiveOperationException e) { throw new RuntimeException("Failed to load Classloader fields", e); } - + ADD_URL_METHOD = tempAddUrlMethod; } - + private AwfulQuiltHacks() { } - + /** * Hackily load the package which a mixin may exist within. *

diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltAddon.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltAddon.java index f0767fdcf..6c3419a26 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltAddon.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltAddon.java @@ -5,11 +5,11 @@ import com.dfsek.terra.mod.ModPlatform; public class QuiltAddon extends MinecraftAddon { - + public QuiltAddon(ModPlatform modPlatform) { super(modPlatform); } - + @Override public String getID() { return "terra-quilt";