package me.desht.scrollingmenusign.views; import com.dsh105.holoapi.HoloAPI; import me.desht.scrollingmenusign.SMSMenu; import me.desht.scrollingmenusign.views.action.ViewUpdateAction; import me.desht.scrollingmenusign.views.hologram.HoloPopup; import org.bukkit.entity.Player; import java.util.HashMap; import java.util.Map; import java.util.Observable; import java.util.UUID; public class SMSPrivateHoloView extends SMSScrollableView implements PoppableView { public static final String LINES = "lines"; public static final String AUTOPOPDOWN = "autopopdown"; private final Map<UUID, HoloPopup> holograms = new HashMap<UUID, HoloPopup>(); public SMSPrivateHoloView(String name, SMSMenu menu) { super(name, menu); registerAttribute(LINES, 4, "Number of lines visible in the hologram (including title)"); registerAttribute(AUTOPOPDOWN, true, "Auto-popdown after item click?"); } @Override public void showGUI(Player player) { if (!holograms.containsKey(player.getUniqueId())) { HoloPopup h = new HoloPopup(player, this); h.popup(); holograms.put(player.getUniqueId(), h); } } @Override public void hideGUI(Player player) { HoloPopup popup = holograms.get(player.getUniqueId()); if (popup != null) { popup.popdown(); holograms.remove(player.getUniqueId()); } } @Override public void toggleGUI(Player player) { if (hasActiveGUI(player)) { hideGUI(player); } else { showGUI(player); } player.closeInventory(); } @Override public boolean hasActiveGUI(Player player) { return holograms.containsKey(player.getUniqueId()); } @Override public SMSPopup getActiveGUI(Player player) { return holograms.get(player.getUniqueId()); } @Override public void update(Observable obj, Object arg1) { ViewUpdateAction vu = ViewUpdateAction.getAction(arg1); if (vu.getSender() instanceof Player) { HoloPopup h = holograms.get(((Player) vu.getSender()).getUniqueId()); if (h != null) { h.repaint(); } } else { for (HoloPopup h : holograms.values()) { h.repaint(); } } } @Override public String getType() { return "private-holo"; } @Override public void onDeleted(boolean temporary) { for (HoloPopup holoPopup : holograms.values()) { HoloAPI.getManager().stopTracking(holoPopup.getHologram()); } } @Override public void clearPlayerForView(Player player) { hideGUI(player); } @Override public String toString() { String s = holograms.size() == 1 ? "" : "s"; return "private-holo: " + holograms.size() + " active popup" + s; } }