package net.aufdemrand.denizen.utilities.maps;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizencore.objects.aH;
import org.bukkit.map.MapCanvas;
import org.bukkit.map.MapView;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class MapCursor extends MapObject {
protected String directionTag;
protected String typeTag;
protected Map<UUID, org.bukkit.map.MapCursor> cursors = new HashMap<UUID, org.bukkit.map.MapCursor>();
public MapCursor(String xTag, String yTag, String visibilityTag, boolean debug, String directionTag, String typeTag) {
super(xTag, yTag, visibilityTag, debug);
this.directionTag = directionTag;
this.typeTag = typeTag;
}
public byte getDirection(dPlayer player) {
return yawToDirection(aH.getDoubleFrom(tag(directionTag, player)));
}
public org.bukkit.map.MapCursor.Type getType(dPlayer player) {
return org.bukkit.map.MapCursor.Type.valueOf(tag(typeTag, player).toUpperCase());
}
private byte yawToDirection(double yaw) {
return (byte) (Math.floor((yaw / 22.5) + 0.5) % 16);
}
@Override
public void update(dPlayer player, UUID uuid) {
super.update(player, uuid);
if (cursors.containsKey(uuid)) {
org.bukkit.map.MapCursor cursor = cursors.get(uuid);
cursor.setX((byte) getX(player, uuid));
cursor.setY((byte) getY(player, uuid));
cursor.setVisible(isVisibleTo(player, uuid));
cursor.setDirection(getDirection(player));
cursor.setType(getType(player));
}
}
@Override
public Map<String, Object> getSaveData() {
Map<String, Object> data = super.getSaveData();
data.put("type", "CURSOR");
data.put("direction", directionTag);
data.put("cursor", typeTag);
return data;
}
@Override
public void render(MapView mapView, MapCanvas mapCanvas, dPlayer player, UUID uuid) {
if (!cursors.containsKey(uuid)) {
org.bukkit.map.MapCursor cursor = new org.bukkit.map.MapCursor((byte) getX(player, uuid),
(byte) getY(player, uuid), getDirection(player), getType(player).getValue(),
isVisibleTo(player, uuid));
mapCanvas.getCursors().addCursor(cursor);
cursors.put(uuid, cursor);
}
}
}