package com.gmail.zahusek.tinyprotocolapi.api.tab; import java.util.HashMap; import java.util.UUID; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import com.gmail.zahusek.tinyprotocolapi.TinyProtocol; import com.gmail.zahusek.tinyprotocolapi.TinyProtocolAPI; import com.gmail.zahusek.tinyprotocolapi.api.Preference; import com.gmail.zahusek.tinyprotocolapi.api.SettingAPI; public abstract class TabAPI { static final Class<? extends Plugin> parent = TinyProtocolAPI.class; static final HashMap<UUID, TabHolder> holder = new HashMap<>(); static final TinyProtocol manager = TinyProtocolAPI.getTinyProtocol(); static final HashMap<Class<?>, Preference> priorities = new HashMap<>(); protected static TabHolder holder(Player a) { UUID b = a.getUniqueId(); if(!holder.containsKey(b)) holder.put(b, new TabHolder()); return holder.get(b); } public static void refresh(Class<? extends Plugin> plugin, Player player, Preference priority, SettingAPI<TabModify> api) { if(plugin == null) throw new IllegalArgumentException("Class of plugin cannot be null !"); if(player == null) throw new IllegalArgumentException("Player cannot be null !"); if(priority == null) throw new IllegalArgumentException("Preference cannot be null !"); if(api == null) throw new IllegalArgumentException("TabModify cannot be null !"); TabHolder hold = holder(player); if(hold.priority.compareTo(priority) < 0) return; if (!hold.plugin.isAssignableFrom(plugin)) { } api.call(hold); manager.sendAbstractPacket(player, hold.update()); hold.takeOver(plugin, priority); } public static void refresh(Class<? extends Plugin> plugin, Player player, SettingAPI<TabModify> modify) { Preference priority = priorities.getOrDefault(plugin, Preference.LOW); refresh(plugin, player, priority, modify); } public static void remove(Class<? extends Plugin> plugin, Player player) { if(plugin == null) throw new IllegalArgumentException("Class of plugin cannot be null !"); if(player == null) throw new IllegalArgumentException("Player cannot be null !"); final TabHolder hold = holder(player); Preference priority = priorities.getOrDefault(plugin, Preference.LOW); if(hold.plugin.isAssignableFrom(parent) || hold.plugin.isAssignableFrom(plugin) || hold.priority.compareTo(priority) < 0) manager.sendAbstractPacket(player, hold.remove()); } public static void setDefaultPreference(Class<? extends Plugin> plugin, Preference priority) { if(plugin == null) throw new IllegalArgumentException("Class of plugin cannot be null !"); if(priority == null) throw new IllegalArgumentException("Preference cannot be null !"); priorities.put(plugin, priority); } public static boolean hasAPI(Player player) { if(player == null) throw new IllegalArgumentException("Player cannot be null !"); return holder(player).exist; } }