001package com.ericlam.mc.eld;
002
003import com.ericlam.mc.eld.event.PluginDisableEvent;
004import com.ericlam.mc.eld.event.PluginEnableEvent;
005import net.md_5.bungee.api.plugin.Plugin;
006
007import java.io.File;
008import java.io.IOException;
009import java.nio.file.Files;
010
011/**
012 * 用於主類繼承
013 */
014public abstract class ELDBungeePlugin extends Plugin implements ELDPlugin {
015
016    @Override
017    public final void onLoad() {
018        final var provider = ELDependenci.getApi().register(this, this::bindServices);
019        this.manageProvider((BungeeManageProvider) provider);
020    }
021
022
023    @Override
024    public final void onEnable() {
025        getLogger().info("Enabling plugin " + this.getName());
026        getLogger().info("This plugin is hooking the lifecycle of ELDependenci framework.");
027        getProxy().getPluginManager().callEvent(new PluginEnableEvent(this));
028    }
029
030    @Override
031    public final void onDisable() {
032        getLogger().info("Disabling plugin " + this.getName());
033        getProxy().getPluginManager().callEvent(new PluginDisableEvent(this));
034    }
035
036    /**
037     * 用於生命週期之前的操作
038     *
039     * @param provider 管理器提供
040     */
041    protected abstract void manageProvider(BungeeManageProvider provider);
042
043
044    @Override
045    public void saveResource(String path) {
046        if (!getDataFolder().exists() && getDataFolder().mkdirs()) {
047            getLogger().info("Created Plugin Folder for " + getName());
048        }
049        var target = new File(getDataFolder(), path);
050        var ins = this.getResourceAsStream(path);
051        try {
052            Files.copy(ins, target.toPath());
053        } catch (IOException e) {
054            throw new IllegalStateException("Cannot copy file: " + path, e);
055        }
056    }
057
058    @Override
059    public String getName() {
060        return this.getDescription().getName();
061    }
062}