44import java .util .Collections ;
55import java .util .HashMap ;
66import java .util .Map ;
7+ import java .util .Set ;
78import java .util .UUID ;
89
9- import org .bstats .Metrics ;
10+ import org .bstats .bukkit . Metrics ;
1011import org .bukkit .Bukkit ;
1112import org .bukkit .entity .Player ;
13+ import org .bukkit .plugin .Plugin ;
1214import org .bukkit .plugin .java .JavaPlugin ;
1315
1416import com .xxmicloxx .NoteBlockAPI .songplayer .SongPlayer ;
1517
1618public class NoteBlockAPI extends JavaPlugin {
1719
18- public static NoteBlockAPI plugin ;
20+ private static NoteBlockAPI plugin ;
1921
2022 private Map <UUID , ArrayList <SongPlayer >> playingSongs =
2123 Collections .synchronizedMap (new HashMap <UUID , ArrayList <SongPlayer >>());
2224 private Map <UUID , Byte > playerVolume = Collections .synchronizedMap (new HashMap <UUID , Byte >());
2325
2426 private boolean disabling = false ;
27+
28+ private HashMap <Plugin , Boolean > dependentPlugins = new HashMap <>();
2529
2630 /**
2731 * Returns true if a Player is currently receiving a song
@@ -80,7 +84,26 @@ public static void setSongPlayersByPlayer(Player player, ArrayList<SongPlayer> s
8084 @ Override
8185 public void onEnable () {
8286 plugin = this ;
83- new Metrics (this );
87+
88+ for (Plugin pl : getServer ().getPluginManager ().getPlugins ()){
89+ if (pl .getDescription ().getDepend ().contains ("NoteBlockAPI" ) || pl .getDescription ().getSoftDepend ().contains ("NoteBlockAPI" )){
90+ dependentPlugins .put (pl , false );
91+ }
92+ }
93+
94+ Metrics metrics = new Metrics (this );
95+
96+ metrics .addCustomChart (new Metrics .DrilldownPie ("deprecated" , () -> {
97+ Map <String , Map <String , Integer >> map = new HashMap <>();
98+ for (Plugin pl : dependentPlugins .keySet ()){
99+ String deprecated = dependentPlugins .get (pl ) ? "yes" : "no" ;
100+ Map <String , Integer > entry = new HashMap <>();
101+ entry .put (pl .getDescription ().getFullName (), 1 );
102+ map .put (deprecated , entry );
103+ }
104+ return map ;
105+ }));
106+
84107 new NoteBlockPlayerMain ().onEnable ();
85108 }
86109
@@ -103,4 +126,46 @@ public boolean isDisabling() {
103126 return disabling ;
104127 }
105128
129+ public static NoteBlockAPI getAPI (){
130+ return plugin ;
131+ }
132+
133+ protected void handleDeprecated (StackTraceElement [] ste ){
134+ int pom = 1 ;
135+ String clazz = ste [pom ].getClassName ();
136+ while (clazz .startsWith ("com.xxmicloxx.NoteBlockAPI" )){
137+ pom ++;
138+ clazz = ste [pom ].getClassName ();
139+ }
140+ String [] packageParts = clazz .split ("\\ ." );
141+ ArrayList <Plugin > plugins = new ArrayList <Plugin >();
142+ plugins .addAll (dependentPlugins .keySet ());
143+
144+ ArrayList <Plugin > notResult = new ArrayList <Plugin >();
145+ parts :
146+ for (int i = 0 ; i < packageParts .length - 1 ; i ++){
147+
148+ for (Plugin pl : plugins ){
149+ if (notResult .contains (pl )){ continue ;}
150+ if (plugins .size () - notResult .size () == 1 ){
151+ break parts ;
152+ }
153+ String [] plParts = pl .getDescription ().getMain ().split ("\\ ." );
154+ if (!packageParts [i ].equalsIgnoreCase (plParts [i ])){
155+ notResult .add (pl );
156+ continue ;
157+ }
158+ }
159+ plugins .removeAll (notResult );
160+ notResult .clear ();
161+ }
162+
163+ plugins .removeAll (notResult );
164+ notResult .clear ();
165+ if (plugins .size () == 1 ){
166+ Bukkit .getLogger ().info (plugins .get (0 ).getName ());
167+ dependentPlugins .put (plugins .get (0 ), true );
168+ }
169+ }
170+
106171}
0 commit comments