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

package com.hypixel.hytale.builtin.instances.command;

import com.hypixel.hytale.server.core.command.system.basecommands.AbstractCommandCollection;
import com.hypixel.hytale.server.core.entity.entities.player.pages.CustomUIPage;
import com.hypixel.hytale.builtin.instances.page.InstanceListPage;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Store;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.command.system.CommandContext;
import com.hypixel.hytale.server.core.command.system.AbstractCommand;
import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;

public class InstancesCommand extends AbstractPlayerCommand
{
    public InstancesCommand() {
        super("instances", "server.commands.instances.desc");
        this.addAliases("instance", "inst");
        this.addSubCommand(new InstancesEditCommand());
        this.addSubCommand(new InstanceSpawnCommand());
        this.addSubCommand(new InstanceExitCommand());
        this.addSubCommand(new InstanceMigrateCommand());
    }
    
    @Override
    protected void execute(@Nonnull final CommandContext context, @Nonnull final Store<EntityStore> store, @Nonnull final Ref<EntityStore> ref, @Nonnull final PlayerRef playerRef, @Nonnull final World world) {
        final Player playerComponent = store.getComponent(ref, Player.getComponentType());
        assert playerComponent != null;
        playerComponent.getPageManager().openCustomPage(ref, store, new InstanceListPage(playerRef));
    }
    
    public static class InstancesEditCommand extends AbstractCommandCollection
    {
        public InstancesEditCommand() {
            super("edit", "server.commands.instances.edit.desc");
            this.addAliases("modify");
            this.addSubCommand(new InstanceEditNewCommand());
            this.addSubCommand(new InstanceEditCopyCommand());
            this.addSubCommand(new InstanceEditLoadCommand());
            this.addSubCommand(new InstanceEditListCommand());
        }
    }
}
