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}