// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.core.modules.time;

import com.hypixel.hytale.component.ComponentRegistryProxy;
import com.hypixel.hytale.component.system.ISystem;
import com.hypixel.hytale.server.core.command.system.AbstractCommand;
import com.hypixel.hytale.server.core.modules.time.commands.TimeCommand;
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.ResourceType;
import javax.annotation.Nonnull;
import com.hypixel.hytale.common.plugin.PluginManifest;
import com.hypixel.hytale.server.core.plugin.JavaPlugin;

public class TimeModule extends JavaPlugin
{
    @Nonnull
    public static final PluginManifest MANIFEST;
    private static TimeModule instance;
    private ResourceType<EntityStore, WorldTimeResource> worldTimeResourceType;
    private ResourceType<EntityStore, TimeResource> timeResourceType;
    
    public static TimeModule get() {
        return TimeModule.instance;
    }
    
    public TimeModule(@Nonnull final JavaPluginInit init) {
        super(init);
        TimeModule.instance = this;
    }
    
    @Override
    protected void setup() {
        final ComponentRegistryProxy<EntityStore> entityStoreRegistry = this.getEntityStoreRegistry();
        this.getCommandRegistry().registerCommand(new TimeCommand());
        this.worldTimeResourceType = entityStoreRegistry.registerResource(WorldTimeResource.class, WorldTimeResource::new);
        entityStoreRegistry.registerSystem(new WorldTimeSystems.Init(this.worldTimeResourceType));
        entityStoreRegistry.registerSystem(new WorldTimeSystems.Ticking(this.worldTimeResourceType));
        this.timeResourceType = entityStoreRegistry.registerResource(TimeResource.class, "Time", TimeResource.CODEC);
        entityStoreRegistry.registerSystem(new TimeSystem(this.timeResourceType));
        entityStoreRegistry.registerSystem(new TimePacketSystem(this.worldTimeResourceType));
    }
    
    @Nonnull
    public ResourceType<EntityStore, WorldTimeResource> getWorldTimeResourceType() {
        return this.worldTimeResourceType;
    }
    
    @Nonnull
    public ResourceType<EntityStore, TimeResource> getTimeResourceType() {
        return this.timeResourceType;
    }
    
    static {
        MANIFEST = PluginManifest.corePlugin(TimeModule.class).build();
    }
}
