diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java index 162c04010..ac124ff50 100644 --- a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java @@ -3,27 +3,38 @@ package com.dfsek.terra.sponge; import com.dfsek.tectonic.loading.TypeRegistry; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addons.TerraAddon; +import com.dfsek.terra.api.addons.annotations.Addon; +import com.dfsek.terra.api.addons.annotations.Author; +import com.dfsek.terra.api.addons.annotations.Version; +import com.dfsek.terra.api.event.EventListener; import com.dfsek.terra.api.event.EventManager; import com.dfsek.terra.api.event.TerraEventManager; +import com.dfsek.terra.api.event.annotations.Global; +import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; +import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.handle.ItemHandle; import com.dfsek.terra.api.platform.handle.WorldHandle; +import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.LockedRegistry; import com.dfsek.terra.api.util.logging.DebugLogger; +import com.dfsek.terra.config.GenericLoaders; import com.dfsek.terra.config.PluginConfig; import com.dfsek.terra.config.lang.Language; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.profiler.Profiler; +import com.dfsek.terra.profiler.ProfilerImpl; +import com.dfsek.terra.registry.exception.DuplicateEntryException; import com.dfsek.terra.registry.master.AddonRegistry; import com.dfsek.terra.registry.master.ConfigRegistry; -import com.dfsek.terra.sponge.world.SpongeWorldHandle; +import com.dfsek.terra.sponge.handle.SpongeItemHandle; +import com.dfsek.terra.sponge.handle.SpongeWorldHandle; +import com.dfsek.terra.sponge.world.SpongeTree; import com.dfsek.terra.world.TerraWorld; import com.google.inject.Inject; -import org.apache.logging.log4j.Logger; import org.spongepowered.api.Server; import org.spongepowered.api.Sponge; -import org.spongepowered.api.config.ConfigDir; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.lifecycle.StartedEngineEvent; import org.spongepowered.plugin.PluginContainer; @@ -32,25 +43,31 @@ import org.spongepowered.plugin.jvm.Plugin; import java.io.File; import java.io.IOException; -import java.nio.file.Path; @Plugin("terra") public class TerraSpongePlugin implements TerraPlugin { private final ConfigRegistry configRegistry = new ConfigRegistry(); private final CheckedRegistry packCheckedRegistry = new CheckedRegistry<>(configRegistry); private final PluginConfig config = new PluginConfig(); - private final AddonRegistry addonRegistry = new AddonRegistry(this); - private final LockedRegistry addonLockedRegistry = new LockedRegistry<>(addonRegistry); - - private final SpongeWorldHandle spongeWorldHandle = new SpongeWorldHandle(); - private final EventManager eventManager = new TerraEventManager(this); + private final AddonRegistry addonRegistry; + private final LockedRegistry addonLockedRegistry; + + private final PluginContainer plugin; + private final GenericLoaders loaders = new GenericLoaders(this); + + private final WorldHandle worldHandle = new SpongeWorldHandle(); + + Profiler profiler = new ProfilerImpl(); + @Inject public TerraSpongePlugin(PluginContainer plugin) { this.plugin = plugin; + this.addonRegistry = new AddonRegistry(new SpongeAddon(this), this); + this.addonLockedRegistry = new LockedRegistry<>(addonRegistry); } @@ -64,12 +81,13 @@ public class TerraSpongePlugin implements TerraPlugin { @Override public void register(TypeRegistry registry) { - + loaders.register(registry); + registry.registerLoader(BlockData.class, (t, o, l) -> worldHandle.createBlockData((String) o)); } @Override public WorldHandle getWorldHandle() { - return spongeWorldHandle; + return worldHandle; } @Override @@ -123,7 +141,7 @@ public class TerraSpongePlugin implements TerraPlugin { @Override public ItemHandle getItemHandle() { - return null; + return new SpongeItemHandle(); } @Override @@ -138,7 +156,7 @@ public class TerraSpongePlugin implements TerraPlugin { @Override public DebugLogger getDebugLogger() { - return null; + return new DebugLogger(logger()); } @Override @@ -148,6 +166,55 @@ public class TerraSpongePlugin implements TerraPlugin { @Override public Profiler getProfiler() { - return null; + return profiler; + } + + @Addon("Terra-Sponge") + @Author("Terra") + @Version("1.0.0") + private static final class SpongeAddon extends TerraAddon implements EventListener { + private final TerraPlugin main; + + private SpongeAddon(TerraPlugin main) { + this.main = main; + } + + @Override + public void initialize() { + main.getEventManager().registerListener(this, this); + } + + @Global + public void onPackLoad(ConfigPackPreLoadEvent event) { + CheckedRegistry treeRegistry = event.getPack().getTreeRegistry(); + + injectTree(treeRegistry, "BROWN_MUSHROOM", new SpongeTree()); + injectTree(treeRegistry, "RED_MUSHROOM", new SpongeTree()); + injectTree(treeRegistry, "JUNGLE", new SpongeTree()); + injectTree(treeRegistry, "JUNGLE_COCOA", new SpongeTree()); + injectTree(treeRegistry, "LARGE_OAK", new SpongeTree()); + injectTree(treeRegistry, "LARGE_SPRUCE", new SpongeTree()); + injectTree(treeRegistry, "SMALL_JUNGLE", new SpongeTree()); + injectTree(treeRegistry, "SWAMP_OAK", new SpongeTree()); + injectTree(treeRegistry, "TALL_BIRCH", new SpongeTree()); + injectTree(treeRegistry, "ACACIA", new SpongeTree()); + injectTree(treeRegistry, "BIRCH", new SpongeTree()); + injectTree(treeRegistry, "DARK_OAK", new SpongeTree()); + injectTree(treeRegistry, "OAK", new SpongeTree()); + injectTree(treeRegistry, "CHORUS_PLANT", new SpongeTree()); + injectTree(treeRegistry, "SPRUCE", new SpongeTree()); + injectTree(treeRegistry, "JUNGLE_BUSH", new SpongeTree()); + injectTree(treeRegistry, "MEGA_SPRUCE", new SpongeTree()); + injectTree(treeRegistry, "CRIMSON_FUNGUS", new SpongeTree()); + injectTree(treeRegistry, "WARPED_FUNGUS", new SpongeTree()); + } + + private void injectTree(CheckedRegistry registry, String id, Tree tree) { + try { + registry.add(id, tree); + } catch(DuplicateEntryException e) { + e.printStackTrace(); + } + } } } diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/handle/SpongeItemHandle.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/handle/SpongeItemHandle.java new file mode 100644 index 000000000..0dcb29105 --- /dev/null +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/handle/SpongeItemHandle.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.sponge.handle; + +import com.dfsek.terra.api.platform.handle.ItemHandle; +import com.dfsek.terra.api.platform.inventory.Item; +import com.dfsek.terra.api.platform.inventory.item.Enchantment; + +import java.util.Set; + +public class SpongeItemHandle implements ItemHandle { + @Override + public Item createItem(String data) { + return null; + } + + @Override + public Enchantment getEnchantment(String id) { + return null; + } + + @Override + public Set getEnchantments() { + return null; + } +} diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeWorldHandle.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/handle/SpongeWorldHandle.java similarity index 93% rename from platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeWorldHandle.java rename to platforms/sponge/src/main/java/com/dfsek/terra/sponge/handle/SpongeWorldHandle.java index 11a375d31..86682b8b2 100644 --- a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeWorldHandle.java +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/handle/SpongeWorldHandle.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.sponge.world; +package com.dfsek.terra.sponge.handle; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.entity.EntityType; diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeTree.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeTree.java new file mode 100644 index 000000000..ada23dea1 --- /dev/null +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/world/SpongeTree.java @@ -0,0 +1,19 @@ +package com.dfsek.terra.sponge.world; + +import com.dfsek.terra.api.math.vector.Location; +import com.dfsek.terra.api.platform.world.Tree; +import com.dfsek.terra.api.util.collections.MaterialSet; + +import java.util.Random; + +public class SpongeTree implements Tree { + @Override + public boolean plant(Location l, Random r) { + return false; + } + + @Override + public MaterialSet getSpawnable() { + return MaterialSet.empty(); + } +}