package net.aufdemrand.denizen.utilities.maps; import net.aufdemrand.denizen.objects.dPlayer; import net.aufdemrand.denizencore.utilities.debugging.dB; import org.bukkit.entity.Player; import org.bukkit.map.MapCanvas; import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; import java.util.*; public class DenizenMapRenderer extends MapRenderer { private final List<MapObject> mapObjects = new ArrayList<MapObject>(); private final List<MapRenderer> oldMapRenderers; private final boolean autoUpdate; private boolean active; public DenizenMapRenderer(List<MapRenderer> oldMapRenderers, boolean autoUpdate) { super(true); this.oldMapRenderers = oldMapRenderers; this.autoUpdate = autoUpdate; this.active = true; } public void addObject(MapObject object) { if (active) { mapObjects.add(object); } else { throw new IllegalStateException("DenizenMapRenderer is not active"); } } public List<MapRenderer> getOldRenderers() { return oldMapRenderers; } public void deactivate() { if (!active) { throw new IllegalStateException("Already deactivated"); } this.active = false; mapObjects.clear(); oldMapRenderers.clear(); } public boolean isActive() { return active; } public Map<String, Object> getSaveData() { if (active) { Map<String, Object> data = new HashMap<String, Object>(); Map<String, Object> objects = new HashMap<String, Object>(); for (int i = 0; i < mapObjects.size(); i++) { Map<String, Object> objectData = mapObjects.get(i).getSaveData(); objects.put(String.valueOf(i), objectData); } data.put("objects", objects); data.put("auto update", autoUpdate); return data; } throw new IllegalStateException("DenizenMapRenderer is not active"); } @Override public void render(MapView mapView, MapCanvas mapCanvas, Player player) { if (active) { try { UUID uuid = player.getUniqueId(); dPlayer p = dPlayer.mirrorBukkitPlayer(player); for (MapObject object : mapObjects) { if (autoUpdate) { object.update(p, uuid); } if (object.isVisibleTo(p, uuid)) { object.render(mapView, mapCanvas, p, uuid); } } } catch (Exception e) { dB.echoError(e); mapView.removeRenderer(this); } } else { mapView.removeRenderer(this); } } }