From 8751346693c513f8baa8240a1870335c8dc6dfc5 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 23 Jul 2021 16:06:34 -0700 Subject: [PATCH 01/21] fix gradle property enabled deprecation warning --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9e1a4bedc..414f3eb38 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,8 +23,8 @@ allprojects { failFast = true maxParallelForks = (Runtime.getRuntime().availableProcessors() - 1).takeIf { it > 0 } ?: 1 - reports.html.isEnabled = false - reports.junitXml.isEnabled = false + reports.html.required.set(false) + reports.junitXml.required.set(false) } } From 27903730715776a5b2adf912948b9eea7626b7d8 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 23 Jul 2021 18:02:10 -0700 Subject: [PATCH 02/21] JavaPluginConvention -> JavaPluginExtension --- buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt index 90873b003..4872a5543 100644 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt @@ -2,7 +2,7 @@ package com.dfsek.terra import org.gradle.api.JavaVersion import org.gradle.api.Project -import org.gradle.api.plugins.JavaPluginConvention +import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.tasks.bundling.Jar import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.javadoc.Javadoc @@ -15,7 +15,7 @@ fun Project.configureCompilation() { apply(plugin = "java-library") apply(plugin = "idea") - configure { + configure { sourceCompatibility = JavaVersion.VERSION_16 targetCompatibility = JavaVersion.VERSION_16 } From 7f3a7645bd8c95f213840f499298d3ec9d652fb8 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 23 Jul 2021 18:08:42 -0700 Subject: [PATCH 03/21] BasePluginConvention -> BasePluginExtension --- .../main/kotlin/com/dfsek/terra/DistributionConfig.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt index 1fc127c39..2bd60d666 100644 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt @@ -3,11 +3,11 @@ package com.dfsek.terra import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.gradle.api.DefaultTask import org.gradle.api.Project -import org.gradle.api.plugins.BasePluginConvention +import org.gradle.api.plugins.BasePluginExtension import org.gradle.jvm.tasks.Jar import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.getPlugin import org.gradle.kotlin.dsl.named import org.yaml.snakeyaml.DumperOptions import org.yaml.snakeyaml.Yaml @@ -126,7 +126,10 @@ fun Project.configureDistribution() { relocate("org.json", "com.dfsek.terra.lib.json") relocate("org.yaml", "com.dfsek.terra.lib.yaml") } - convention.getPlugin().archivesBaseName = project.name + + configure { + archivesName.set(project.name) + } tasks.named("build") { dependsOn(tasks["shadowJar"]) From e8ee7bc64f0fb5bc75b837f477645a2ebfa7595d Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 19:42:03 -0700 Subject: [PATCH 04/21] create AbstractTerraPlugin --- .../platform/PlatformInitializationEvent.java | 9 ++ .../com/dfsek/terra/AbstractTerraPlugin.java | 151 ++++++++++++++++++ .../java/com/dfsek/terra/InternalAddon.java | 33 ++++ .../terra/registry/master/AddonRegistry.java | 6 +- .../dfsek/terra/fabric/TerraFabricPlugin.java | 13 +- .../fabric/event/GameInitializationEvent.java | 9 -- .../client/MinecraftClientMixin.java | 4 +- .../lifecycle/server/ServerMainMixin.java | 4 +- 8 files changed, 203 insertions(+), 26 deletions(-) create mode 100644 common/api/src/main/java/com/dfsek/terra/api/event/events/platform/PlatformInitializationEvent.java create mode 100644 common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java create mode 100644 common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/event/GameInitializationEvent.java diff --git a/common/api/src/main/java/com/dfsek/terra/api/event/events/platform/PlatformInitializationEvent.java b/common/api/src/main/java/com/dfsek/terra/api/event/events/platform/PlatformInitializationEvent.java new file mode 100644 index 000000000..8f472e439 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/event/events/platform/PlatformInitializationEvent.java @@ -0,0 +1,9 @@ +package com.dfsek.terra.api.event.events.platform; + +import com.dfsek.terra.api.event.events.Event; + +/** + * Called when the platform is initialized. + */ +public class PlatformInitializationEvent implements Event { +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java new file mode 100644 index 000000000..241214cf9 --- /dev/null +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -0,0 +1,151 @@ +package com.dfsek.terra; + +import com.dfsek.tectonic.loading.TypeRegistry; +import com.dfsek.terra.api.Logger; +import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.command.CommandManager; +import com.dfsek.terra.api.command.exception.MalformedCommandException; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.config.PluginConfig; +import com.dfsek.terra.api.event.EventManager; +import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.profiler.Profiler; +import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.registry.Registry; +import com.dfsek.terra.api.util.generic.Construct; +import com.dfsek.terra.api.util.generic.Lazy; +import com.dfsek.terra.commands.CommandUtil; +import com.dfsek.terra.commands.TerraCommandManager; +import com.dfsek.terra.config.GenericLoaders; +import com.dfsek.terra.config.PluginConfigImpl; +import com.dfsek.terra.config.lang.LangUtil; +import com.dfsek.terra.event.EventManagerImpl; +import com.dfsek.terra.profiler.ProfilerImpl; +import com.dfsek.terra.registry.CheckedRegistryImpl; +import com.dfsek.terra.registry.master.AddonRegistry; +import com.dfsek.terra.registry.master.ConfigRegistry; +import com.dfsek.terra.util.logging.DebugLogger; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Optional; + +/** + * Skeleton implementation of {@link TerraPlugin} + */ +public abstract class AbstractTerraPlugin implements TerraPlugin { + private final Lazy debugLogger = Lazy.of(() -> new DebugLogger(logger())); + private final EventManager eventManager = new EventManagerImpl(this); + + private final ConfigRegistry configRegistry = new ConfigRegistry(); + + private final CheckedRegistry checkedConfigRegistry = new CheckedRegistryImpl<>(configRegistry); + + private final Profiler profiler = new ProfilerImpl(); + + private final GenericLoaders loaders = new GenericLoaders(this); + + private final PluginConfigImpl config = new PluginConfigImpl(); + + private final CommandManager manager = new TerraCommandManager(this); + + private final AddonRegistry addonRegistry = Construct.construct(() -> { + Optional addon = getPlatformAddon(); + AddonRegistry registry = addon.map(terraAddon -> new AddonRegistry(terraAddon, this)).orElseGet(() -> new AddonRegistry(this)); + InternalAddon internalAddon = new InternalAddon(this); + registry.register(internalAddon); + return registry; + }); + + + public AbstractTerraPlugin() { + logger().info("Initializing Terra..."); + + config.load(this); // load config.yml + + LangUtil.load(config.getLanguage(), this); // load language + + debugLogger.value().setDebug(config.isDebugLogging()); // enable debug logger if applicable + + if(config.isDebugProfiler()) { // if debug.profiler is enabled, start profiling + profiler.start(); + } + + if(!addonRegistry.loadAll(getClass().getClassLoader())) { // load all addons + throw new IllegalStateException("Failed to load addons. Please correct addon installations to continue."); + } + logger().info("Loaded addons."); + + try { + CommandUtil.registerAll(manager); + } catch(MalformedCommandException e) { + e.printStackTrace(); // TODO do something here even though this should literally never happen + } + + eventManager + .getHandler(FunctionalEventHandler.class); + /**/ + + + logger().info("Finished initialization."); + } + + protected Optional getPlatformAddon() { + return Optional.empty(); + } + + @Override + public PluginConfig getTerraConfig() { + return config; + } + + @Override + public CheckedRegistry getConfigRegistry() { + return checkedConfigRegistry; + } + + @Override + public Registry getAddons() { + return addonRegistry; + } + + public ConfigRegistry getRawConfigRegistry() { + return configRegistry; + } + + @Override + public void saveDefaultConfig() { + try(InputStream stream = getClass().getResourceAsStream("/config.yml")) { + File configFile = new File(getDataFolder(), "config.yml"); + if(!configFile.exists()) { + FileUtils.copyInputStreamToFile(stream, configFile); + } + } catch(IOException e) { + e.printStackTrace(); + } + } + + @Override + public Logger getDebugLogger() { + return debugLogger.value(); + } + + @Override + public EventManager getEventManager() { + return eventManager; + } + + @Override + public Profiler getProfiler() { + return profiler; + } + + @Override + public void register(TypeRegistry registry) { + loaders.register(registry); + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java b/common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java new file mode 100644 index 000000000..2e70023a0 --- /dev/null +++ b/common/implementation/src/main/java/com/dfsek/terra/InternalAddon.java @@ -0,0 +1,33 @@ +package com.dfsek.terra; + +import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.annotations.Addon; +import com.dfsek.terra.api.addon.annotations.Author; +import com.dfsek.terra.api.addon.annotations.Version; +import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; + +@Addon("terra") +@Author("Terra") +@Version("1.0.0") +public class InternalAddon extends TerraAddon { + private final AbstractTerraPlugin main; + + public InternalAddon(AbstractTerraPlugin main) { + this.main = main; + } + + @Override + public void initialize() { + main.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, PlatformInitializationEvent.class) + .then(event -> { + main.logger().info("Loading config packs..."); + main.getRawConfigRegistry().loadAll(main); + main.logger().info("Loaded packs."); + }) + .global(); + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java index 1965c5792..93553c396 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java @@ -27,7 +27,7 @@ public class AddonRegistry extends OpenRegistryImpl { public AddonRegistry(TerraAddon addon, TerraPlugin main) { this.main = main; - register(addon.getName(), addon); + register(addon); } @Override @@ -38,6 +38,10 @@ public class AddonRegistry extends OpenRegistryImpl { return super.register(identifier, addon); } + public boolean register(TerraAddon addon) { + return register(addon.getName(), addon); + } + @Override public void clear() { throw new UnsupportedOperationException(); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 34c660f89..e44f1a81d 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -36,7 +36,7 @@ import com.dfsek.terra.event.EventManagerImpl; import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; import com.dfsek.terra.fabric.event.BiomeRegistrationEvent; -import com.dfsek.terra.fabric.event.GameInitializationEvent; +import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.generation.PopulatorFeature; import com.dfsek.terra.fabric.generation.TerraBiomeSource; @@ -315,17 +315,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { logger.info("Biomes registered."); }) .global(); - - eventManager - .getHandler(FunctionalEventHandler.class) - .register(this, GameInitializationEvent.class) - .then(event -> { - TerraFabricPlugin main = TerraFabricPlugin.getInstance(); - main.logger().info("Loading config packs..."); - configRegistry.loadAll(TerraFabricPlugin.this); - logger.info("Loaded packs."); - }) - .global(); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/event/GameInitializationEvent.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/event/GameInitializationEvent.java deleted file mode 100644 index 1a2ca827f..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/event/GameInitializationEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.dfsek.terra.fabric.event; - -import com.dfsek.terra.api.event.events.Event; - -/** - * Called when the game is initialized and packs should be registered. - */ -public class GameInitializationEvent implements Event { -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java index bfd0852ee..81519a9ef 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java @@ -1,7 +1,7 @@ package com.dfsek.terra.fabric.mixin.lifecycle.client; import com.dfsek.terra.fabric.TerraFabricPlugin; -import com.dfsek.terra.fabric.event.GameInitializationEvent; +import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.fabric.generation.TerraGeneratorType; import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor; import net.minecraft.client.MinecraftClient; @@ -19,7 +19,7 @@ public class MinecraftClientMixin { target = "Lnet/minecraft/client/util/WindowProvider;createWindow(Lnet/minecraft/client/WindowSettings;Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/client/util/Window;", // sorta arbitrary position, after mod init, before window opens shift = At.Shift.BEFORE)) public void injectConstructor(RunArgs args, CallbackInfo callbackInfo) { - TerraFabricPlugin.getInstance().getEventManager().callEvent(new GameInitializationEvent()); + TerraFabricPlugin.getInstance().getEventManager().callEvent(new PlatformInitializationEvent()); TerraFabricPlugin.getInstance().getConfigRegistry().forEach(pack -> { final GeneratorType generatorType = new TerraGeneratorType(pack); //noinspection ConstantConditions diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java index b32f2e591..1af7a455d 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java @@ -1,7 +1,7 @@ package com.dfsek.terra.fabric.mixin.lifecycle.server; import com.dfsek.terra.fabric.TerraFabricPlugin; -import com.dfsek.terra.fabric.event.GameInitializationEvent; +import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import net.minecraft.server.Main; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -12,6 +12,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class ServerMainMixin { @Inject(method = "main([Ljava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/registry/DynamicRegistryManager;create()Lnet/minecraft/util/registry/DynamicRegistryManager$Impl;")) private static void injectConstructor(String[] args, CallbackInfo ci) { - TerraFabricPlugin.getInstance().getEventManager().callEvent(new GameInitializationEvent()); // Load during MinecraftServer construction, after other mods have registered blocks and stuff + TerraFabricPlugin.getInstance().getEventManager().callEvent(new PlatformInitializationEvent()); // Load during MinecraftServer construction, after other mods have registered blocks and stuff } } From 5bd70da0bc8292dbd4e2923f54c43e6b4343f4da Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 19:43:50 -0700 Subject: [PATCH 05/21] add getLanguage to AbstractTerraPlugin --- .../src/main/java/com/dfsek/terra/AbstractTerraPlugin.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index 241214cf9..ba53171f1 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -11,6 +11,7 @@ import com.dfsek.terra.api.config.PluginConfig; import com.dfsek.terra.api.event.EventManager; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.profiler.Profiler; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; @@ -148,4 +149,9 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { public void register(TypeRegistry registry) { loaders.register(registry); } + + @Override + public Language getLanguage() { + return LangUtil.getLanguage(); + } } From 34868680c1d2aa988d5b84c57212f9b6ed82c742 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 19:47:40 -0700 Subject: [PATCH 06/21] Fabric TerraPluginImpl --- .../dfsek/terra/fabric/TerraPluginImpl.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java new file mode 100644 index 000000000..9038f2fd5 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -0,0 +1,73 @@ +package com.dfsek.terra.fabric; + +import com.dfsek.terra.AbstractTerraPlugin; +import com.dfsek.terra.api.Logger; +import com.dfsek.terra.api.handle.ItemHandle; +import com.dfsek.terra.api.handle.WorldHandle; +import com.dfsek.terra.api.lang.Language; +import com.dfsek.terra.api.util.generic.Lazy; +import com.dfsek.terra.config.lang.LangUtil; +import com.dfsek.terra.fabric.handle.FabricItemHandle; +import com.dfsek.terra.fabric.handle.FabricWorldHandle; +import net.fabricmc.loader.api.FabricLoader; +import org.apache.logging.log4j.LogManager; + +import java.io.File; + +public class TerraPluginImpl extends AbstractTerraPlugin { + private final org.apache.logging.log4j.Logger log4jLogger = LogManager.getLogger(); + + private final Logger logger = new Logger() { + @Override + public void info(String message) { + log4jLogger.info(message); + } + + @Override + public void warning(String message) { + log4jLogger.warn(message); + } + + @Override + public void severe(String message) { + log4jLogger.error(message); + } + }; + + private final ItemHandle itemHandle = new FabricItemHandle(); + private final WorldHandle worldHandle = new FabricWorldHandle(); + private final Lazy dataFolder = Lazy.of(() -> new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra")); + + @Override + public WorldHandle getWorldHandle() { + return worldHandle; + } + + @Override + public Logger logger() { + return logger; + } + + @Override + public File getDataFolder() { + return dataFolder.value(); + } + + @Override + public boolean reload() { + getTerraConfig().load(this); + LangUtil.load(getTerraConfig().getLanguage(), this); // Load language. + boolean succeed = getRawConfigRegistry().loadAll(this); + return succeed; + } + + @Override + public ItemHandle getItemHandle() { + return itemHandle; + } + + @Override + public String platformName() { + return "Fabric"; + } +} From e882be2ba4eb580b586924f43bf7067cd5548099 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 19:49:59 -0700 Subject: [PATCH 07/21] create FabricEntryPoint --- .../dfsek/terra/fabric/FabricEntryPoint.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java 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 new file mode 100644 index 000000000..bae905fee --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -0,0 +1,38 @@ +package com.dfsek.terra.fabric; + +import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; +import com.dfsek.terra.fabric.generation.PopulatorFeature; +import com.dfsek.terra.fabric.generation.TerraBiomeSource; +import net.fabricmc.api.ModInitializer; +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.world.gen.decorator.Decorator; +import net.minecraft.world.gen.decorator.NopeDecoratorConfig; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import net.minecraft.world.gen.feature.FeatureConfig; + +public class FabricEntryPoint implements ModInitializer { + private static final TerraPluginImpl TERRA_PLUGIN = new TerraPluginImpl(); + + public static final PopulatorFeature POPULATOR_FEATURE = new PopulatorFeature(DefaultFeatureConfig.CODEC); + public static final ConfiguredFeature POPULATOR_CONFIGURED_FEATURE = POPULATOR_FEATURE.configure(FeatureConfig.DEFAULT).decorate(Decorator.NOPE.configure(NopeDecoratorConfig.INSTANCE)); + + + @Override + public void onInitialize() { + // register the things + Registry.register(Registry.FEATURE, new Identifier("terra", "populator"), POPULATOR_FEATURE); + RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_KEY, new Identifier("terra", "populator")); + Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE); + + Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC); + Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), TerraBiomeSource.CODEC); + } + + public static TerraPluginImpl getTerraPlugin() { + return TERRA_PLUGIN; + } +} From af4af84a48c0a791a88624adaf3ebfbc540130de Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 19:51:06 -0700 Subject: [PATCH 08/21] register Fabric-specific loaders in TerraPluginImpl --- .../dfsek/terra/fabric/TerraPluginImpl.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java index 9038f2fd5..311c8b3dc 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -1,7 +1,10 @@ package com.dfsek.terra.fabric; +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.terra.AbstractTerraPlugin; import com.dfsek.terra.api.Logger; +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.lang.Language; @@ -9,7 +12,10 @@ import com.dfsek.terra.api.util.generic.Lazy; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.fabric.handle.FabricItemHandle; import com.dfsek.terra.fabric.handle.FabricWorldHandle; +import com.dfsek.terra.fabric.util.ProtoBiome; import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BuiltinRegistries; import org.apache.logging.log4j.LogManager; import java.io.File; @@ -70,4 +76,22 @@ public class TerraPluginImpl extends AbstractTerraPlugin { public String platformName() { return "Fabric"; } + + @Override + public void register(TypeRegistry registry) { + super.register(registry); + registry + .registerLoader(com.dfsek.terra.api.world.biome.Biome.class, (t, o, l) -> parseBiome((String) o)) + .registerLoader(Identifier.class, (t, o, l) -> { + Identifier identifier = Identifier.tryParse((String) o); + if(identifier == null) throw new LoadException("Invalid identifier: " + o); + return identifier; + }); + } + + private ProtoBiome parseBiome(String id) throws LoadException { + Identifier identifier = Identifier.tryParse(id); + if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier); // failure. + return new ProtoBiome(identifier); + } } From 68f82fef02923cf4ef16d087910634fecc8c9c02 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 19:56:54 -0700 Subject: [PATCH 09/21] use TerraPluginImpl over TerraFabricPlugin --- .../main/java/com/dfsek/terra/AbstractTerraPlugin.java | 4 ++++ .../fabric/generation/FabricChunkGeneratorWrapper.java | 3 ++- .../dfsek/terra/fabric/generation/TerraBiomeSource.java | 3 ++- .../terra/fabric/generation/TerraGeneratorType.java | 3 ++- .../dfsek/terra/fabric/mixin/CommandManagerMixin.java | 3 ++- .../com/dfsek/terra/fabric/mixin/ServerWorldMixin.java | 3 ++- .../mixin/implementations/ConfiguredFeatureMixin.java | 9 +++++---- .../block/state/MobSpawnerBlockEntityMixin.java | 3 ++- .../mixin/lifecycle/client/MinecraftClientMixin.java | 5 +++-- .../mixin/lifecycle/server/GeneratorOptionsMixin.java | 4 +++- .../fabric/mixin/lifecycle/server/ServerMainMixin.java | 3 ++- .../java/com/dfsek/terra/fabric/util/FabricUtil.java | 2 +- 12 files changed, 30 insertions(+), 15 deletions(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index ba53171f1..0c56cf6cf 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -130,6 +130,10 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { } } + public CommandManager getManager() { + return manager; + } + @Override public Logger getDebugLogger() { return debugLogger.value(); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index ff3061c02..55ac5cc1f 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -6,6 +6,7 @@ import com.dfsek.terra.api.world.generator.ChunkData; import com.dfsek.terra.api.world.generator.Chunkified; import com.dfsek.terra.api.world.generator.GeneratorWrapper; import com.dfsek.terra.api.world.generator.ChunkGenerator; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.block.FabricBlockState; import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; @@ -44,7 +45,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C config -> config.group( Codec.STRING.fieldOf("pack") .forGetter(ConfigPack::getID) - ).apply(config, config.stable(TerraFabricPlugin.getInstance().getConfigRegistry()::get))); + ).apply(config, config.stable(FabricEntryPoint.getTerraPlugin().getConfigRegistry()::get))); public static final Codec CODEC = RecordCodecBuilder.create( instance -> instance.group( diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java index 81fe4f503..6c8b68f86 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java @@ -3,6 +3,7 @@ package com.dfsek.terra.fabric.generation; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.util.FabricUtil; import com.mojang.serialization.Codec; @@ -19,7 +20,7 @@ import java.util.stream.Collectors; public class TerraBiomeSource extends BiomeSource { public static final Codec PACK_CODEC = (RecordCodecBuilder.create(config -> config.group( Codec.STRING.fieldOf("pack").forGetter(ConfigPack::getID) - ).apply(config, config.stable(TerraFabricPlugin.getInstance().getConfigRegistry()::get)))); + ).apply(config, config.stable(FabricEntryPoint.getTerraPlugin().getConfigRegistry()::get)))); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( RegistryLookupCodec.of(Registry.BIOME_KEY).forGetter(source -> source.biomeRegistry), Codec.LONG.fieldOf("seed").stable().forGetter(source -> source.seed), diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java index 6c845c089..ba8335d18 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java @@ -1,6 +1,7 @@ package com.dfsek.terra.fabric.generation; import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.event.BiomeRegistrationEvent; import net.fabricmc.api.EnvType; @@ -25,7 +26,7 @@ public class TerraGeneratorType extends GeneratorType { @Override public GeneratorOptions createDefaultOptions(DynamicRegistryManager.Impl registryManager, long seed, boolean generateStructures, boolean bonusChest) { GeneratorOptions options = super.createDefaultOptions(registryManager, seed, generateStructures, bonusChest); - TerraFabricPlugin.getInstance().getEventManager().callEvent(new BiomeRegistrationEvent(registryManager)); // register biomes + FabricEntryPoint.getTerraPlugin().getEventManager().callEvent(new BiomeRegistrationEvent(registryManager)); // register biomes return options; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java index dc21f4cc1..6e45e06e3 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java @@ -3,6 +3,7 @@ package com.dfsek.terra.fabric.mixin; import com.dfsek.terra.api.command.exception.CommandException; import com.dfsek.terra.api.entity.CommandSender; import com.dfsek.terra.api.entity.Entity; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.StringArgumentType; @@ -33,7 +34,7 @@ public abstract class CommandManagerMixin { @Inject(method = "", at = @At(value = "INVOKE", target = "Lcom/mojang/brigadier/CommandDispatcher;findAmbiguities(Lcom/mojang/brigadier/AmbiguityConsumer;)V", remap = false)) private void injectTerraCommands(CommandManager.RegistrationEnvironment environment, CallbackInfo ci) { - com.dfsek.terra.api.command.CommandManager manager = TerraFabricPlugin.getInstance().getManager(); + com.dfsek.terra.api.command.CommandManager manager = FabricEntryPoint.getTerraPlugin().getManager(); int max = manager.getMaxArgumentDepth(); RequiredArgumentBuilder arg = argument("arg" + (max - 1), StringArgumentType.word()); for(int i = 0; i < max; i++) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java index 33e41839a..fedfae67e 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java @@ -1,5 +1,6 @@ package com.dfsek.terra.fabric.mixin; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import net.minecraft.server.MinecraftServer; @@ -26,7 +27,7 @@ public abstract class ServerWorldMixin { public void injectConstructor(MinecraftServer server, Executor workerExecutor, LevelStorage.Session session, ServerWorldProperties properties, RegistryKey registryKey, DimensionType dimensionType, WorldGenerationProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo ci) { if(chunkGenerator instanceof FabricChunkGeneratorWrapper) { ((FabricChunkGeneratorWrapper) chunkGenerator).setWorld((ServerWorld) (Object) this); - TerraFabricPlugin.getInstance().logger().info("Registered world " + this); + FabricEntryPoint.getTerraPlugin().logger().info("Registered world " + this); } } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java index 38090e1cb..ed1eac405 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java @@ -6,6 +6,7 @@ import com.dfsek.terra.api.util.collection.MaterialSet; import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.world.Tree; import com.dfsek.terra.api.world.World; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.BuiltinRegistries; @@ -32,7 +33,7 @@ public abstract class ConfiguredFeatureMixin { @SuppressWarnings({"ConstantConditions", "try"}) public boolean terra$plant(Vector3 l, World world, Random r) { String id = BuiltinRegistries.CONFIGURED_FEATURE.getId((ConfiguredFeature) (Object) this).toString(); - try(ProfileFrame ignore = TerraFabricPlugin.getInstance().getProfiler().profile("fabric_tree:" + id.toLowerCase(Locale.ROOT))) { + try(ProfileFrame ignore = FabricEntryPoint.getTerraPlugin().getProfiler().profile("fabric_tree:" + id.toLowerCase(Locale.ROOT))) { StructureWorldAccess fabricWorldAccess = ((StructureWorldAccess) world); ChunkGenerator generatorWrapper = ((ServerWorldAccess) world).toServerWorld().getChunkManager().getChunkGenerator(); return generate(fabricWorldAccess, generatorWrapper, r, new BlockPos(l.getBlockX(), l.getBlockY(), l.getBlockZ())); @@ -40,8 +41,8 @@ public abstract class ConfiguredFeatureMixin { } public Set terra$getSpawnable() { - return MaterialSet.get(TerraFabricPlugin.getInstance().getWorldHandle().createBlockData("minecraft:grass_block"), - TerraFabricPlugin.getInstance().getWorldHandle().createBlockData("minecraft:podzol"), - TerraFabricPlugin.getInstance().getWorldHandle().createBlockData("minecraft:mycelium")); + return MaterialSet.get(FabricEntryPoint.getTerraPlugin().getWorldHandle().createBlockData("minecraft:grass_block"), + FabricEntryPoint.getTerraPlugin().getWorldHandle().createBlockData("minecraft:podzol"), + FabricEntryPoint.getTerraPlugin().getWorldHandle().createBlockData("minecraft:mycelium")); } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java index 83983067f..c843e2ee5 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java @@ -3,6 +3,7 @@ package com.dfsek.terra.fabric.mixin.implementations.block.state; import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.SerialState; import com.dfsek.terra.api.entity.EntityType; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.mixin.access.MobSpawnerLogicAccessor; import net.minecraft.block.BlockState; @@ -96,7 +97,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { SerialState.parse(state).forEach((k, v) -> { switch(k) { case "type": - terra$setSpawnedType(TerraFabricPlugin.getInstance().getWorldHandle().getEntity(v)); + terra$setSpawnedType(FabricEntryPoint.getTerraPlugin().getWorldHandle().getEntity(v)); return; case "delay": terra$setDelay(Integer.parseInt(v)); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java index 81519a9ef..d1c50aa21 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java @@ -1,5 +1,6 @@ package com.dfsek.terra.fabric.mixin.lifecycle.client; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.fabric.generation.TerraGeneratorType; @@ -19,8 +20,8 @@ public class MinecraftClientMixin { target = "Lnet/minecraft/client/util/WindowProvider;createWindow(Lnet/minecraft/client/WindowSettings;Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/client/util/Window;", // sorta arbitrary position, after mod init, before window opens shift = At.Shift.BEFORE)) public void injectConstructor(RunArgs args, CallbackInfo callbackInfo) { - TerraFabricPlugin.getInstance().getEventManager().callEvent(new PlatformInitializationEvent()); - TerraFabricPlugin.getInstance().getConfigRegistry().forEach(pack -> { + FabricEntryPoint.getTerraPlugin().getEventManager().callEvent(new PlatformInitializationEvent()); + FabricEntryPoint.getTerraPlugin().getConfigRegistry().forEach(pack -> { final GeneratorType generatorType = new TerraGeneratorType(pack); //noinspection ConstantConditions ((GeneratorTypeAccessor) generatorType).setTranslationKey(new LiteralText("Terra:" + pack.getID())); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java index 05c9a3d06..6a0ca014a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java @@ -1,7 +1,9 @@ package com.dfsek.terra.fabric.mixin.lifecycle.server; import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.TerraPluginImpl; import com.dfsek.terra.fabric.event.BiomeRegistrationEvent; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.generation.TerraBiomeSource; @@ -30,7 +32,7 @@ public abstract class GeneratorOptionsMixin { return; } - TerraFabricPlugin main = TerraFabricPlugin.getInstance(); + TerraPluginImpl main = FabricEntryPoint.getTerraPlugin(); String prop = properties.get("level-type").toString().trim(); if(prop.startsWith("Terra")) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java index 1af7a455d..69911894e 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java @@ -1,5 +1,6 @@ package com.dfsek.terra.fabric.mixin.lifecycle.server; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import net.minecraft.server.Main; @@ -12,6 +13,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class ServerMainMixin { @Inject(method = "main([Ljava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/registry/DynamicRegistryManager;create()Lnet/minecraft/util/registry/DynamicRegistryManager$Impl;")) private static void injectConstructor(String[] args, CallbackInfo ci) { - TerraFabricPlugin.getInstance().getEventManager().callEvent(new PlatformInitializationEvent()); // Load during MinecraftServer construction, after other mods have registered blocks and stuff + FabricEntryPoint.getTerraPlugin().getEventManager().callEvent(new PlatformInitializationEvent()); // Load during MinecraftServer construction, after other mods have registered blocks and stuff } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java index 574e4ab50..f3adf5e83 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java @@ -47,7 +47,7 @@ public final class FabricUtil { // BiomeTemplate template = biome.getTemplate(); Map colors = new HashMap<>(); // template.getColors(); - TerraFabricPlugin.FabricAddon fabricAddon = TerraFabricPlugin.getInstance().getFabricAddon(); + //TerraFabricPlugin.FabricAddon fabricAddon = TerraFabricPlugin.getInstance().getFabricAddon(); Registry biomeRegistry = registryManager.get(Registry.BIOME_KEY); Biome vanilla = ((ProtoBiome) (new ArrayList<>(biome.getVanillaBiomes().getContents()).get(0))).get(biomeRegistry); From b19b85fd609d6a9c70d534ddb6907d33884db212 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:02:30 -0700 Subject: [PATCH 10/21] move FabricAddon to upper level --- .../com/dfsek/terra/fabric/FabricAddon.java | 109 ++++++++++++++++++ .../dfsek/terra/fabric/TerraFabricPlugin.java | 96 +-------------- 2 files changed, 110 insertions(+), 95 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java new file mode 100644 index 000000000..5cfb010a5 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java @@ -0,0 +1,109 @@ +package com.dfsek.terra.fabric; + +import com.dfsek.tectonic.exception.ConfigException; +import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.annotations.Addon; +import com.dfsek.terra.api.addon.annotations.Author; +import com.dfsek.terra.api.addon.annotations.Version; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; +import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.event.functional.FunctionalEventHandler; +import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.registry.exception.DuplicateEntryException; +import com.dfsek.terra.api.util.generic.pair.Pair; +import com.dfsek.terra.api.world.Tree; +import com.dfsek.terra.api.world.biome.TerraBiome; +import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; +import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; +import com.dfsek.terra.fabric.event.BiomeRegistrationEvent; +import com.dfsek.terra.fabric.util.FabricUtil; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.ConfiguredFeature; + +import java.util.HashMap; +import java.util.Map; + +@Addon("Terra-Fabric") +@Author("Terra") +@Version("1.0.0") +public final class FabricAddon extends TerraAddon { + private final TerraPluginImpl terraFabricPlugin; + private final Map> templates = new HashMap<>(); + + public FabricAddon(TerraPluginImpl terraFabricPlugin) { + this.terraFabricPlugin = terraFabricPlugin; + } + + @Override + public void initialize() { + terraFabricPlugin.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPreLoadEvent.class) + .then(event -> { + PreLoadCompatibilityOptions template = new PreLoadCompatibilityOptions(); + try { + event.loadTemplate(template); + } catch(ConfigException e) { + e.printStackTrace(); + } + + if(template.doRegistryInjection()) { + BuiltinRegistries.CONFIGURED_FEATURE.getEntries().forEach(entry -> { + if(!template.getExcludedRegistryFeatures().contains(entry.getKey().getValue())) { + try { + event.getPack().getCheckedRegistry(Tree.class).register(entry.getKey().getValue().toString(), (Tree) entry.getValue()); + terraFabricPlugin.getDebugLogger().info("Injected ConfiguredFeature " + entry.getKey().getValue() + " as Tree."); + } catch(DuplicateEntryException ignored) { + } + } + }); + } + templates.put(event.getPack(), Pair.of(template, null)); + }) + .global(); + + terraFabricPlugin.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPostLoadEvent.class) + .then(event -> { + PostLoadCompatibilityOptions template = new PostLoadCompatibilityOptions(); + + try { + event.loadTemplate(template); + } catch(ConfigException e) { + e.printStackTrace(); + } + + templates.get(event.getPack()).setRight(template); + }) + .priority(100) + .global(); + + terraFabricPlugin.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, BiomeRegistrationEvent.class) + .then(event -> { + terraFabricPlugin.logger().info("Registering biomes..."); + Registry biomeRegistry = event.getRegistryManager().get(Registry.BIOME_KEY); + terraFabricPlugin.getConfigRegistry().forEach(pack -> pack.getCheckedRegistry(TerraBiome.class).forEach((id, biome) -> FabricUtil.registerOrOverwrite(biomeRegistry, Registry.BIOME_KEY, new Identifier("terra", FabricUtil.createBiomeID(pack, id)), FabricUtil.createBiome(biome, pack, event.getRegistryManager())))); // Register all Terra biomes. + terraFabricPlugin.logger().info("Biomes registered."); + }) + .global(); + } + + + private void injectTree(CheckedRegistry registry, String id, ConfiguredFeature tree) { + try { + registry.register(id, (Tree) tree); + } catch(DuplicateEntryException ignore) { + } + } + + public Map> getTemplates() { + return templates; + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index e44f1a81d..406c8ae5e 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -1,48 +1,32 @@ package com.dfsek.terra.fabric; -import com.dfsek.tectonic.exception.ConfigException; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addon.TerraAddon; -import com.dfsek.terra.api.addon.annotations.Addon; -import com.dfsek.terra.api.addon.annotations.Author; -import com.dfsek.terra.api.addon.annotations.Version; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.command.CommandManager; import com.dfsek.terra.api.command.exception.MalformedCommandException; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.PluginConfig; import com.dfsek.terra.api.event.EventManager; -import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; -import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; -import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.profiler.Profiler; import com.dfsek.terra.api.registry.CheckedRegistry; -import com.dfsek.terra.api.registry.exception.DuplicateEntryException; -import com.dfsek.terra.api.util.generic.pair.Pair; -import com.dfsek.terra.api.world.Tree; -import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.commands.TerraCommandManager; import com.dfsek.terra.config.GenericLoaders; import com.dfsek.terra.config.PluginConfigImpl; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.event.EventManagerImpl; -import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; -import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.fabric.event.BiomeRegistrationEvent; -import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.generation.PopulatorFeature; import com.dfsek.terra.fabric.generation.TerraBiomeSource; import com.dfsek.terra.fabric.handle.FabricItemHandle; import com.dfsek.terra.fabric.handle.FabricWorldHandle; -import com.dfsek.terra.fabric.util.FabricUtil; import com.dfsek.terra.fabric.util.ProtoBiome; import com.dfsek.terra.profiler.ProfilerImpl; import com.dfsek.terra.registry.CheckedRegistryImpl; @@ -56,7 +40,6 @@ 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.world.biome.Biome; import net.minecraft.world.gen.decorator.Decorator; import net.minecraft.world.gen.decorator.NopeDecoratorConfig; import net.minecraft.world.gen.feature.ConfiguredFeature; @@ -68,8 +51,6 @@ import org.apache.logging.log4j.LogManager; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; public class TerraFabricPlugin implements TerraPlugin, ModInitializer { @@ -101,7 +82,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { private final WorldHandle worldHandle = new FabricWorldHandle(); private final ConfigRegistry configRegistry = new ConfigRegistry(); private final CheckedRegistry checkedRegistry = new CheckedRegistryImpl<>(configRegistry); - private final FabricAddon fabricAddon = new FabricAddon(); + private final FabricAddon fabricAddon = new FabricAddon(this); private final AddonRegistry addonRegistry = new AddonRegistry(fabricAddon, this); private final com.dfsek.terra.api.registry.Registry addonLockedRegistry = new LockedRegistryImpl<>(addonRegistry); private final PluginConfig config = new PluginConfigImpl(); @@ -254,79 +235,4 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { return profiler; } - @Addon("Terra-Fabric") - @Author("Terra") - @Version("1.0.0") - public final class FabricAddon extends TerraAddon { - private final Map> templates = new HashMap<>(); - - @Override - public void initialize() { - eventManager - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPreLoadEvent.class) - .then(event -> { - PreLoadCompatibilityOptions template = new PreLoadCompatibilityOptions(); - try { - event.loadTemplate(template); - } catch(ConfigException e) { - e.printStackTrace(); - } - - if(template.doRegistryInjection()) { - BuiltinRegistries.CONFIGURED_FEATURE.getEntries().forEach(entry -> { - if(!template.getExcludedRegistryFeatures().contains(entry.getKey().getValue())) { - try { - event.getPack().getCheckedRegistry(Tree.class).register(entry.getKey().getValue().toString(), (Tree) entry.getValue()); - debugLogger.info("Injected ConfiguredFeature " + entry.getKey().getValue() + " as Tree."); - } catch(DuplicateEntryException ignored) { - } - } - }); - } - templates.put(event.getPack(), Pair.of(template, null)); - }) - .global(); - - eventManager - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPostLoadEvent.class) - .then(event -> { - PostLoadCompatibilityOptions template = new PostLoadCompatibilityOptions(); - - try { - event.loadTemplate(template); - } catch(ConfigException e) { - e.printStackTrace(); - } - - templates.get(event.getPack()).setRight(template); - }) - .priority(100) - .global(); - - eventManager - .getHandler(FunctionalEventHandler.class) - .register(this, BiomeRegistrationEvent.class) - .then(event -> { - logger.info("Registering biomes..."); - Registry biomeRegistry = event.getRegistryManager().get(Registry.BIOME_KEY); - configRegistry.forEach(pack -> pack.getCheckedRegistry(TerraBiome.class).forEach((id, biome) -> FabricUtil.registerOrOverwrite(biomeRegistry, Registry.BIOME_KEY, new Identifier("terra", FabricUtil.createBiomeID(pack, id)), FabricUtil.createBiome(biome, pack, event.getRegistryManager())))); // Register all Terra biomes. - logger.info("Biomes registered."); - }) - .global(); - } - - - private void injectTree(CheckedRegistry registry, String id, ConfiguredFeature tree) { - try { - registry.register(id, (Tree) tree); - } catch(DuplicateEntryException ignore) { - } - } - - public Map> getTemplates() { - return templates; - } - } } From 4ec1ab7c16df970f54119b1a8b57eda227b1dd22 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:03:52 -0700 Subject: [PATCH 11/21] remove references to TerraFabricPlugin --- .../src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java index f3adf5e83..e31bd6cea 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java @@ -6,7 +6,9 @@ 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.api.world.biome.TerraBiome; +import com.dfsek.terra.fabric.FabricEntryPoint; import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.TerraPluginImpl; import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor; import com.mojang.serialization.Lifecycle; import net.minecraft.block.entity.LootableContainerBlockEntity; @@ -56,7 +58,7 @@ public final class FabricUtil { generationSettings.surfaceBuilder(vanilla.getGenerationSettings().getSurfaceBuilder()); // It needs a surfacebuilder, even though we dont use it. - generationSettings.feature(GenerationStep.Feature.VEGETAL_DECORATION, TerraFabricPlugin.POPULATOR_CONFIGURED_FEATURE); + generationSettings.feature(GenerationStep.Feature.VEGETAL_DECORATION, FabricEntryPoint.POPULATOR_CONFIGURED_FEATURE); if(pack.vanillaCaves()) { for(GenerationStep.Carver carver : GenerationStep.Carver.values()) { From 5cafd4999abe2547d01c7e49cc329a4cbc84ff28 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:04:25 -0700 Subject: [PATCH 12/21] use FabricEntryPoint as entry point --- platforms/fabric/src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/fabric/src/main/resources/fabric.mod.json b/platforms/fabric/src/main/resources/fabric.mod.json index cdc7b0742..5b9f4e48e 100644 --- a/platforms/fabric/src/main/resources/fabric.mod.json +++ b/platforms/fabric/src/main/resources/fabric.mod.json @@ -17,7 +17,7 @@ "environment": "*", "entrypoints": { "main": [ - "com.dfsek.terra.fabric.TerraFabricPlugin" + "com.dfsek.terra.fabric.FabricEntryPoint" ] }, "mixins": [ From 41d3e2f6b00b841fa75486f2c36cb1ffa178d84d Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:05:10 -0700 Subject: [PATCH 13/21] delete TerraFabricPlugin --- .../dfsek/terra/fabric/TerraFabricPlugin.java | 238 ------------------ .../FabricChunkGeneratorWrapper.java | 1 - .../fabric/generation/TerraBiomeSource.java | 1 - .../fabric/generation/TerraGeneratorType.java | 1 - .../fabric/mixin/CommandManagerMixin.java | 1 - .../terra/fabric/mixin/ServerWorldMixin.java | 1 - .../ConfiguredFeatureMixin.java | 2 - .../state/MobSpawnerBlockEntityMixin.java | 1 - .../client/MinecraftClientMixin.java | 1 - .../server/GeneratorOptionsMixin.java | 1 - .../lifecycle/server/ServerMainMixin.java | 1 - .../dfsek/terra/fabric/util/FabricUtil.java | 2 - 12 files changed, 251 deletions(-) delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java deleted file mode 100644 index 406c8ae5e..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ /dev/null @@ -1,238 +0,0 @@ -package com.dfsek.terra.fabric; - -import com.dfsek.tectonic.exception.LoadException; -import com.dfsek.tectonic.loading.TypeRegistry; -import com.dfsek.terra.api.Logger; -import com.dfsek.terra.api.TerraPlugin; -import com.dfsek.terra.api.addon.TerraAddon; -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.command.CommandManager; -import com.dfsek.terra.api.command.exception.MalformedCommandException; -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.config.PluginConfig; -import com.dfsek.terra.api.event.EventManager; -import com.dfsek.terra.api.handle.ItemHandle; -import com.dfsek.terra.api.handle.WorldHandle; -import com.dfsek.terra.api.lang.Language; -import com.dfsek.terra.api.profiler.Profiler; -import com.dfsek.terra.api.registry.CheckedRegistry; -import com.dfsek.terra.commands.CommandUtil; -import com.dfsek.terra.commands.TerraCommandManager; -import com.dfsek.terra.config.GenericLoaders; -import com.dfsek.terra.config.PluginConfigImpl; -import com.dfsek.terra.config.lang.LangUtil; -import com.dfsek.terra.event.EventManagerImpl; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; -import com.dfsek.terra.fabric.generation.PopulatorFeature; -import com.dfsek.terra.fabric.generation.TerraBiomeSource; -import com.dfsek.terra.fabric.handle.FabricItemHandle; -import com.dfsek.terra.fabric.handle.FabricWorldHandle; -import com.dfsek.terra.fabric.util.ProtoBiome; -import com.dfsek.terra.profiler.ProfilerImpl; -import com.dfsek.terra.registry.CheckedRegistryImpl; -import com.dfsek.terra.registry.LockedRegistryImpl; -import com.dfsek.terra.registry.master.AddonRegistry; -import com.dfsek.terra.registry.master.ConfigRegistry; -import com.dfsek.terra.util.logging.DebugLogger; -import net.fabricmc.api.ModInitializer; -import net.fabricmc.loader.api.FabricLoader; -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.world.gen.decorator.Decorator; -import net.minecraft.world.gen.decorator.NopeDecoratorConfig; -import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.DefaultFeatureConfig; -import net.minecraft.world.gen.feature.FeatureConfig; -import org.apache.commons.io.FileUtils; -import org.apache.logging.log4j.LogManager; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; - - -public class TerraFabricPlugin implements TerraPlugin, ModInitializer { - public static final PopulatorFeature POPULATOR_FEATURE = new PopulatorFeature(DefaultFeatureConfig.CODEC); - public static final ConfiguredFeature POPULATOR_CONFIGURED_FEATURE = POPULATOR_FEATURE.configure(FeatureConfig.DEFAULT).decorate(Decorator.NOPE.configure(NopeDecoratorConfig.INSTANCE)); - private static TerraFabricPlugin instance; - private final org.apache.logging.log4j.Logger log4jLogger = LogManager.getLogger(); - private final EventManager eventManager = new EventManagerImpl(this); - private final GenericLoaders genericLoaders = new GenericLoaders(this); - private final Profiler profiler = new ProfilerImpl(); - private final Logger logger = new Logger() { - @Override - public void info(String message) { - log4jLogger.info(message); - } - - @Override - public void warning(String message) { - log4jLogger.warn(message); - } - - @Override - public void severe(String message) { - log4jLogger.error(message); - } - }; - private final DebugLogger debugLogger = new DebugLogger(logger); - private final ItemHandle itemHandle = new FabricItemHandle(); - private final WorldHandle worldHandle = new FabricWorldHandle(); - private final ConfigRegistry configRegistry = new ConfigRegistry(); - private final CheckedRegistry checkedRegistry = new CheckedRegistryImpl<>(configRegistry); - private final FabricAddon fabricAddon = new FabricAddon(this); - private final AddonRegistry addonRegistry = new AddonRegistry(fabricAddon, this); - private final com.dfsek.terra.api.registry.Registry addonLockedRegistry = new LockedRegistryImpl<>(addonRegistry); - private final PluginConfig config = new PluginConfigImpl(); - private final CommandManager manager = new TerraCommandManager(this); - private File dataFolder; - - public static TerraFabricPlugin getInstance() { - return instance; - } - - private ProtoBiome parseBiome(String id) throws LoadException { - Identifier identifier = Identifier.tryParse(id); - if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier); // failure. - return new ProtoBiome(identifier); - } - - public CommandManager getManager() { - return manager; - } - - @Override - public WorldHandle getWorldHandle() { - return worldHandle; - } - - @Override - public Logger logger() { - return logger; - } - - @Override - public PluginConfig getTerraConfig() { - return config; - } - - @Override - public File getDataFolder() { - return dataFolder; - } - - @Override - public Language getLanguage() { - return LangUtil.getLanguage(); - } - - public FabricAddon getFabricAddon() { - return fabricAddon; - } - - @Override - public CheckedRegistry getConfigRegistry() { - return checkedRegistry; - } - - @Override - public com.dfsek.terra.api.registry.Registry getAddons() { - return addonLockedRegistry; - } - - @Override - public boolean reload() { - config.load(this); - LangUtil.load(config.getLanguage(), this); // Load language. - boolean succeed = configRegistry.loadAll(this); - return succeed; - } - - @Override - public ItemHandle getItemHandle() { - return itemHandle; - } - - @Override - public void saveDefaultConfig() { - try(InputStream stream = getClass().getResourceAsStream("/config.yml")) { - File configFile = new File(getDataFolder(), "config.yml"); - if(!configFile.exists()) FileUtils.copyInputStreamToFile(stream, configFile); - } catch(IOException e) { - e.printStackTrace(); - } - } - - @Override - public String platformName() { - return "Fabric"; - } - - @Override - public Logger getDebugLogger() { - return debugLogger; - } - - @SuppressWarnings("unchecked") - @Override - public void register(TypeRegistry registry) { - genericLoaders.register(registry); - registry - .registerLoader(BlockState.class, (t, o, l) -> worldHandle.createBlockData((String) o)) - .registerLoader(com.dfsek.terra.api.world.biome.Biome.class, (t, o, l) -> parseBiome((String) o)) - .registerLoader(Identifier.class, (t, o, l) -> { - Identifier identifier = Identifier.tryParse((String) o); - if(identifier == null) throw new LoadException("Invalid identifier: " + o); - return identifier; - }); - } - - @Override - public void onInitialize() { - instance = this; - - this.dataFolder = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"); - saveDefaultConfig(); - config.load(this); - LangUtil.load(config.getLanguage(), this); - logger.info("Initializing Terra..."); - - debugLogger.setDebug(config.isDebugLogging()); - if(config.isDebugProfiler()) profiler.start(); - - if(!addonRegistry.loadAll(getClass().getClassLoader())) { - throw new IllegalStateException("Failed to load addons. Please correct addon installations to continue."); - } - logger.info("Loaded addons."); - - - Registry.register(Registry.FEATURE, new Identifier("terra", "populator"), POPULATOR_FEATURE); - RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_KEY, new Identifier("terra", "populator")); - Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE); - - Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC); - Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), TerraBiomeSource.CODEC); - - try { - CommandUtil.registerAll(manager); - } catch(MalformedCommandException e) { - e.printStackTrace(); // TODO do something here even though this should literally never happen - } - - logger.info("Finished initialization."); - } - - - @Override - public EventManager getEventManager() { - return eventManager; - } - - @Override - public Profiler getProfiler() { - return profiler; - } - -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index 55ac5cc1f..2c84efe8d 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -7,7 +7,6 @@ import com.dfsek.terra.api.world.generator.Chunkified; import com.dfsek.terra.api.world.generator.GeneratorWrapper; import com.dfsek.terra.api.world.generator.ChunkGenerator; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.block.FabricBlockState; import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor; import com.dfsek.terra.util.FastRandom; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java index 6c8b68f86..823b10928 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java @@ -4,7 +4,6 @@ import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.util.FabricUtil; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java index ba8335d18..bc9ff7497 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java @@ -2,7 +2,6 @@ package com.dfsek.terra.fabric.generation; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.event.BiomeRegistrationEvent; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java index 6e45e06e3..80cff60fd 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/CommandManagerMixin.java @@ -4,7 +4,6 @@ import com.dfsek.terra.api.command.exception.CommandException; import com.dfsek.terra.api.entity.CommandSender; import com.dfsek.terra.api.entity.Entity; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.RequiredArgumentBuilder; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java index fedfae67e..8616bd890 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/ServerWorldMixin.java @@ -1,7 +1,6 @@ package com.dfsek.terra.fabric.mixin; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import net.minecraft.server.MinecraftServer; import net.minecraft.server.WorldGenerationProgressListener; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java index ed1eac405..dcbb2cc84 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ConfiguredFeatureMixin.java @@ -7,12 +7,10 @@ import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.world.Tree; import com.dfsek.terra.api.world.World; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.StructureWorldAccess; -import net.minecraft.world.WorldAccess; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.feature.ConfiguredFeature; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java index c843e2ee5..d5015f600 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java @@ -4,7 +4,6 @@ import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.SerialState; import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.mixin.access.MobSpawnerLogicAccessor; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java index d1c50aa21..e979808f1 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java @@ -1,7 +1,6 @@ package com.dfsek.terra.fabric.mixin.lifecycle.client; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.fabric.generation.TerraGeneratorType; import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java index 6a0ca014a..a3429a676 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/GeneratorOptionsMixin.java @@ -2,7 +2,6 @@ package com.dfsek.terra.fabric.mixin.lifecycle.server; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.TerraPluginImpl; import com.dfsek.terra.fabric.event.BiomeRegistrationEvent; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java index 69911894e..f75e62710 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java @@ -1,7 +1,6 @@ package com.dfsek.terra.fabric.mixin.lifecycle.server; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import net.minecraft.server.Main; import org.spongepowered.asm.mixin.Mixin; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java index e31bd6cea..1604b0c38 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java @@ -7,8 +7,6 @@ import com.dfsek.terra.api.block.entity.Sign; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.TerraFabricPlugin; -import com.dfsek.terra.fabric.TerraPluginImpl; import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor; import com.mojang.serialization.Lifecycle; import net.minecraft.block.entity.LootableContainerBlockEntity; From cb876d12f9ae520dec3017522bcef220c021601c Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:06:14 -0700 Subject: [PATCH 14/21] use FabricAddon in TerraPluginImpl --- .../main/java/com/dfsek/terra/fabric/TerraPluginImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java index 311c8b3dc..b95e52329 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -4,6 +4,7 @@ import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.terra.AbstractTerraPlugin; import com.dfsek.terra.api.Logger; +import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; @@ -19,6 +20,7 @@ import net.minecraft.util.registry.BuiltinRegistries; import org.apache.logging.log4j.LogManager; import java.io.File; +import java.util.Optional; public class TerraPluginImpl extends AbstractTerraPlugin { private final org.apache.logging.log4j.Logger log4jLogger = LogManager.getLogger(); @@ -49,6 +51,11 @@ public class TerraPluginImpl extends AbstractTerraPlugin { return worldHandle; } + @Override + protected Optional getPlatformAddon() { + return Optional.of(new FabricAddon(this)); + } + @Override public Logger logger() { return logger; From 22aa03cd51226a40fdbd709fd983efb1edfe055a Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:06:39 -0700 Subject: [PATCH 15/21] update FabricAddon ID --- .../src/main/java/com/dfsek/terra/fabric/FabricAddon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java index 5cfb010a5..c7df50dc6 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java @@ -27,7 +27,7 @@ import net.minecraft.world.gen.feature.ConfiguredFeature; import java.util.HashMap; import java.util.Map; -@Addon("Terra-Fabric") +@Addon("terra-fabric") @Author("Terra") @Version("1.0.0") public final class FabricAddon extends TerraAddon { From 074528003bfa0672491b0406cca0921488fe1185 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:11:04 -0700 Subject: [PATCH 16/21] clean up addon registry initialization --- .../java/com/dfsek/terra/AbstractTerraPlugin.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index 0c56cf6cf..492cb3095 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -54,13 +54,7 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { private final CommandManager manager = new TerraCommandManager(this); - private final AddonRegistry addonRegistry = Construct.construct(() -> { - Optional addon = getPlatformAddon(); - AddonRegistry registry = addon.map(terraAddon -> new AddonRegistry(terraAddon, this)).orElseGet(() -> new AddonRegistry(this)); - InternalAddon internalAddon = new InternalAddon(this); - registry.register(internalAddon); - return registry; - }); + private final AddonRegistry addonRegistry; public AbstractTerraPlugin() { @@ -76,6 +70,9 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { profiler.start(); } + addonRegistry = getPlatformAddon().map(terraAddon -> new AddonRegistry(terraAddon, this)).orElseGet(() -> new AddonRegistry(this)); + addonRegistry.register(new InternalAddon(this)); + if(!addonRegistry.loadAll(getClass().getClassLoader())) { // load all addons throw new IllegalStateException("Failed to load addons. Please correct addon installations to continue."); } From f73366fcb3fc9483b7c582c36ef3a50ee1ec6f9a Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:14:19 -0700 Subject: [PATCH 17/21] Lazy#of -> Lazy#lazy --- .../terra/api/block/state/properties/base/EnumProperty.java | 2 +- .../src/main/java/com/dfsek/terra/api/util/generic/Lazy.java | 2 +- .../src/main/java/com/dfsek/terra/AbstractTerraPlugin.java | 4 +--- .../java/com/dfsek/terra/registry/RegistryFactoryImpl.java | 3 +-- .../src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java | 4 +--- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/common/api/src/main/java/com/dfsek/terra/api/block/state/properties/base/EnumProperty.java b/common/api/src/main/java/com/dfsek/terra/api/block/state/properties/base/EnumProperty.java index 7e658a259..777405d43 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/block/state/properties/base/EnumProperty.java +++ b/common/api/src/main/java/com/dfsek/terra/api/block/state/properties/base/EnumProperty.java @@ -9,7 +9,7 @@ import java.util.Collection; public interface EnumProperty> extends Property { static > EnumProperty of(String name, Class clazz) { return new EnumProperty() { - private final Lazy> constants = Lazy.of(() -> Arrays.asList(clazz.getEnumConstants())); + private final Lazy> constants = Lazy.lazy(() -> Arrays.asList(clazz.getEnumConstants())); @Override public Class getType() { diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/generic/Lazy.java b/common/api/src/main/java/com/dfsek/terra/api/util/generic/Lazy.java index e35376662..ffe186d5e 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/generic/Lazy.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/generic/Lazy.java @@ -11,7 +11,7 @@ public final class Lazy { this.valueSupplier = valueSupplier; } - public static Lazy of(Supplier valueSupplier) { + public static Lazy lazy(Supplier valueSupplier) { return new Lazy<>(valueSupplier); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index 492cb3095..d0ad3467f 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -9,13 +9,11 @@ import com.dfsek.terra.api.command.exception.MalformedCommandException; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.PluginConfig; import com.dfsek.terra.api.event.EventManager; -import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.profiler.Profiler; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; -import com.dfsek.terra.api.util.generic.Construct; import com.dfsek.terra.api.util.generic.Lazy; import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.commands.TerraCommandManager; @@ -39,7 +37,7 @@ import java.util.Optional; * Skeleton implementation of {@link TerraPlugin} */ public abstract class AbstractTerraPlugin implements TerraPlugin { - private final Lazy debugLogger = Lazy.of(() -> new DebugLogger(logger())); + private final Lazy debugLogger = Lazy.lazy(() -> new DebugLogger(logger())); private final EventManager eventManager = new EventManagerImpl(this); private final ConfigRegistry configRegistry = new ConfigRegistry(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/RegistryFactoryImpl.java b/common/implementation/src/main/java/com/dfsek/terra/registry/RegistryFactoryImpl.java index dab4171e2..52b701972 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/RegistryFactoryImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/RegistryFactoryImpl.java @@ -8,7 +8,6 @@ import com.dfsek.terra.api.registry.meta.RegistryFactory; import com.dfsek.terra.api.util.generic.Lazy; import java.lang.reflect.AnnotatedType; -import java.lang.reflect.Type; import java.util.function.Function; public class RegistryFactoryImpl implements RegistryFactory { @@ -20,7 +19,7 @@ public class RegistryFactoryImpl implements RegistryFactory { @Override public OpenRegistry create(Function, TypeLoader> loader) { return new OpenRegistryImpl<>() { - private final Lazy> loaderCache = Lazy.of(() -> loader.apply(this)); + private final Lazy> loaderCache = Lazy.lazy(() -> loader.apply(this)); @Override public T load(AnnotatedType type, Object o, ConfigLoader configLoader) throws LoadException { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java index b95e52329..e0365c6e7 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -5,10 +5,8 @@ import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.terra.AbstractTerraPlugin; import com.dfsek.terra.api.Logger; import com.dfsek.terra.api.addon.TerraAddon; -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.lang.Language; import com.dfsek.terra.api.util.generic.Lazy; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.fabric.handle.FabricItemHandle; @@ -44,7 +42,7 @@ public class TerraPluginImpl extends AbstractTerraPlugin { private final ItemHandle itemHandle = new FabricItemHandle(); private final WorldHandle worldHandle = new FabricWorldHandle(); - private final Lazy dataFolder = Lazy.of(() -> new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra")); + private final Lazy dataFolder = Lazy.lazy(() -> new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra")); @Override public WorldHandle getWorldHandle() { From 7f09ee4af34252fe2e09d354c4fa1526f40e6bc0 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 24 Jul 2021 20:50:01 -0700 Subject: [PATCH 18/21] cleanup AbstractTerraPlugin --- .../src/main/java/com/dfsek/terra/AbstractTerraPlugin.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index d0ad3467f..9edc82ae9 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -82,10 +82,6 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { e.printStackTrace(); // TODO do something here even though this should literally never happen } - eventManager - .getHandler(FunctionalEventHandler.class); - /**/ - logger().info("Finished initialization."); } From 19d4673afedd58041ce6b4f39fc50f1bed582f8c Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 25 Jul 2021 22:33:18 -0700 Subject: [PATCH 19/21] fix logger issue --- .../com/dfsek/terra/AbstractTerraPlugin.java | 11 ++++++ .../dfsek/terra/fabric/TerraPluginImpl.java | 39 +++++++++---------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index 9edc82ae9..80aaca966 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -54,8 +54,12 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { private final AddonRegistry addonRegistry; + private final Logger logger; + public AbstractTerraPlugin() { + this.logger = createLogger(); + System.out.println(logger); logger().info("Initializing Terra..."); config.load(this); // load config.yml @@ -90,6 +94,8 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { return Optional.empty(); } + protected abstract Logger createLogger(); + @Override public PluginConfig getTerraConfig() { return config; @@ -149,4 +155,9 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { public Language getLanguage() { return LangUtil.getLanguage(); } + + @Override + public Logger logger() { + return logger; + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java index e0365c6e7..c0b6c3ed4 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -21,24 +21,6 @@ import java.io.File; import java.util.Optional; public class TerraPluginImpl extends AbstractTerraPlugin { - private final org.apache.logging.log4j.Logger log4jLogger = LogManager.getLogger(); - - private final Logger logger = new Logger() { - @Override - public void info(String message) { - log4jLogger.info(message); - } - - @Override - public void warning(String message) { - log4jLogger.warn(message); - } - - @Override - public void severe(String message) { - log4jLogger.error(message); - } - }; private final ItemHandle itemHandle = new FabricItemHandle(); private final WorldHandle worldHandle = new FabricWorldHandle(); @@ -55,10 +37,27 @@ public class TerraPluginImpl extends AbstractTerraPlugin { } @Override - public Logger logger() { - return logger; + protected Logger createLogger() { + final org.apache.logging.log4j.Logger log4jLogger = LogManager.getLogger(); + return new Logger() { + @Override + public void info(String message) { + log4jLogger.info(message); + } + + @Override + public void warning(String message) { + log4jLogger.warn(message); + } + + @Override + public void severe(String message) { + log4jLogger.error(message); + } + }; } + @Override public File getDataFolder() { return dataFolder.value(); From c13494ca0381f5ccdd9194fadcf5971debae5ade Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 25 Jul 2021 22:42:53 -0700 Subject: [PATCH 20/21] implement AbstractTerraPlugin#load --- .../com/dfsek/terra/AbstractTerraPlugin.java | 18 +++++++++++++++--- .../dfsek/terra/fabric/TerraPluginImpl.java | 4 ++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index 80aaca966..813b36baf 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -9,12 +9,12 @@ import com.dfsek.terra.api.command.exception.MalformedCommandException; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.PluginConfig; import com.dfsek.terra.api.event.EventManager; -import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.lang.Language; import com.dfsek.terra.api.profiler.Profiler; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.util.generic.Lazy; +import com.dfsek.terra.api.util.mutable.MutableBoolean; import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.commands.TerraCommandManager; import com.dfsek.terra.config.GenericLoaders; @@ -35,6 +35,8 @@ import java.util.Optional; /** * Skeleton implementation of {@link TerraPlugin} + * + * Implementations must invoke {@link #load()} in their constructors. */ public abstract class AbstractTerraPlugin implements TerraPlugin { private final Lazy debugLogger = Lazy.lazy(() -> new DebugLogger(logger())); @@ -56,12 +58,23 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { private final Logger logger; + private static final MutableBoolean LOADED = new MutableBoolean(false); + public AbstractTerraPlugin() { this.logger = createLogger(); - System.out.println(logger); + addonRegistry = getPlatformAddon().map(terraAddon -> new AddonRegistry(terraAddon, this)).orElseGet(() -> new AddonRegistry(this)); + } + + protected void load() { + if(LOADED.get()) { + throw new IllegalStateException("Someone tried to initialize Terra, but Terra has already initialized. This is most likely due to a broken platform implementation, or a misbehaving mod."); + } + LOADED.set(true); + logger().info("Initializing Terra..."); + saveDefaultConfig(); config.load(this); // load config.yml LangUtil.load(config.getLanguage(), this); // load language @@ -72,7 +85,6 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { profiler.start(); } - addonRegistry = getPlatformAddon().map(terraAddon -> new AddonRegistry(terraAddon, this)).orElseGet(() -> new AddonRegistry(this)); addonRegistry.register(new InternalAddon(this)); if(!addonRegistry.loadAll(getClass().getClassLoader())) { // load all addons diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java index c0b6c3ed4..0521c7edb 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraPluginImpl.java @@ -36,6 +36,10 @@ public class TerraPluginImpl extends AbstractTerraPlugin { return Optional.of(new FabricAddon(this)); } + public TerraPluginImpl() { + load(); + } + @Override protected Logger createLogger() { final org.apache.logging.log4j.Logger log4jLogger = LogManager.getLogger(); From 6da8c72593cd6da5eb38ee2a529b7cd7fdcb5d82 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 25 Jul 2021 22:43:36 -0700 Subject: [PATCH 21/21] remove TerraPlugin#saveDefaultConfig --- .../java/com/dfsek/terra/api/TerraPlugin.java | 2 -- .../com/dfsek/terra/AbstractTerraPlugin.java | 22 ++++++++----------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java b/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java index 698556227..9d2eba55a 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java +++ b/common/api/src/main/java/com/dfsek/terra/api/TerraPlugin.java @@ -36,8 +36,6 @@ public interface TerraPlugin extends LoaderRegistrar { ItemHandle getItemHandle(); - void saveDefaultConfig(); - String platformName(); Logger getDebugLogger(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java index 813b36baf..5bbc04b88 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractTerraPlugin.java @@ -74,7 +74,15 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { logger().info("Initializing Terra..."); - saveDefaultConfig(); + try(InputStream stream = getClass().getResourceAsStream("/config.yml")) { + File configFile = new File(getDataFolder(), "config.yml"); + if(!configFile.exists()) { + FileUtils.copyInputStreamToFile(stream, configFile); + } + } catch(IOException e) { + e.printStackTrace(); + } + config.load(this); // load config.yml LangUtil.load(config.getLanguage(), this); // load language @@ -127,18 +135,6 @@ public abstract class AbstractTerraPlugin implements TerraPlugin { return configRegistry; } - @Override - public void saveDefaultConfig() { - try(InputStream stream = getClass().getResourceAsStream("/config.yml")) { - File configFile = new File(getDataFolder(), "config.yml"); - if(!configFile.exists()) { - FileUtils.copyInputStreamToFile(stream, configFile); - } - } catch(IOException e) { - e.printStackTrace(); - } - } - public CommandManager getManager() { return manager; }