mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-11-28 21:25:46 +01:00
Add support for using signs to define markers
This commit is contained in:
parent
7d2d0b4d87
commit
25f7dbb312
@ -15,7 +15,7 @@ public class MarkersComponent extends ClientComponent {
|
|||||||
api = MarkerAPIImpl.initializeMarkerAPI(plugin);
|
api = MarkerAPIImpl.initializeMarkerAPI(plugin);
|
||||||
plugin.registerMarkerAPI(api);
|
plugin.registerMarkerAPI(api);
|
||||||
/* If configuration has enabled sign support, prime it too */
|
/* If configuration has enabled sign support, prime it too */
|
||||||
if(configuration.getBoolean("enablesigns", true)) {
|
if(configuration.getBoolean("enablesigns", false)) {
|
||||||
signmgr = MarkerSignManager.initializeSignManager(plugin);
|
signmgr = MarkerSignManager.initializeSignManager(plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,8 @@ package org.dynmap.markers;
|
|||||||
public interface MarkerIcon {
|
public interface MarkerIcon {
|
||||||
/** Default marker icon - always exists */
|
/** Default marker icon - always exists */
|
||||||
public static final String DEFAULT = "default";
|
public static final String DEFAULT = "default";
|
||||||
|
/** Default sign marker icon - always exists */
|
||||||
|
public static final String SIGN = "sign";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get ID of the marker icon (unique among marker icons)
|
* Get ID of the marker icon (unique among marker icons)
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
package org.dynmap.markers.impl;
|
package org.dynmap.markers.impl;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockListener;
|
import org.bukkit.event.block.BlockListener;
|
||||||
@ -10,27 +15,94 @@ import org.bukkit.event.block.SignChangeEvent;
|
|||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.dynmap.DynmapPlugin;
|
import org.dynmap.DynmapPlugin;
|
||||||
import org.dynmap.Log;
|
import org.dynmap.Log;
|
||||||
|
import org.dynmap.MapManager;
|
||||||
|
import org.dynmap.markers.Marker;
|
||||||
|
import org.dynmap.markers.MarkerIcon;
|
||||||
|
import org.dynmap.markers.MarkerSet;
|
||||||
|
|
||||||
public class MarkerSignManager {
|
public class MarkerSignManager {
|
||||||
|
|
||||||
private static MarkerSignManager mgr = null;
|
private static MarkerSignManager mgr = null;
|
||||||
|
private static DynmapPlugin plugin = null;
|
||||||
|
|
||||||
private static class SignListener extends BlockListener {
|
private static class SignListener extends BlockListener {
|
||||||
@Override
|
@Override
|
||||||
public void onSignChange(SignChangeEvent evt) {
|
public void onSignChange(SignChangeEvent evt) {
|
||||||
if(evt.isCancelled() || (mgr == null))
|
if(evt.isCancelled() || (mgr == null))
|
||||||
return;
|
return;
|
||||||
Log.info("onSignChange: '" + evt.getLine(0) + "','" + evt.getLine(1) + "','" + evt.getLine(2) + "','" + evt.getLine(3) + "'");
|
if(!evt.getLine(0).equalsIgnoreCase("[dynmap]")) { /* If not dynmap sign, quit */
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public void onBlockPlace(BlockPlaceEvent evt) {
|
|
||||||
if(evt.isCancelled() || (mgr == null))
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
Player p = evt.getPlayer();
|
||||||
|
/* If allowed to do marker signs */
|
||||||
|
if((p == null) || ((plugin != null) && (plugin.checkPlayerPermission(p, "marker.sign")))) {
|
||||||
|
Location loc = evt.getBlock().getLocation();
|
||||||
|
String id = getSignMarkerID(loc); /* Get marker ID */
|
||||||
|
String set = MarkerSet.DEFAULT;
|
||||||
|
String icon = MarkerIcon.SIGN;
|
||||||
|
String label = "";
|
||||||
|
evt.setLine(0, ""); /* Blank out [dynmap] */
|
||||||
|
for(int i = 1; i < 4; i++) { /* Check other lines for icon: or set: */
|
||||||
|
String v = ChatColor.stripColor(evt.getLine(i));
|
||||||
|
if(v.startsWith("icon:")) { /* icon: */
|
||||||
|
icon = v.substring(5);
|
||||||
|
evt.setLine(i, "");
|
||||||
|
}
|
||||||
|
else if(v.startsWith("set:")) { /* set: */
|
||||||
|
set = v.substring(4);
|
||||||
|
evt.setLine(i, "");
|
||||||
|
}
|
||||||
|
else if(label.length() == 0) {
|
||||||
|
label = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Get the set and see if the marker is already defined */
|
||||||
|
MarkerSet ms = MarkerAPIImpl.api.getMarkerSet(set);
|
||||||
|
if(ms == null) {
|
||||||
|
if(p != null) p.sendMessage("Bad marker set - [dynmap] sign invalid");
|
||||||
|
evt.setLine(0, ChatColor.RED + "<Bad Marker Set>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MarkerIcon mi = MarkerAPIImpl.api.getMarkerIcon(icon); /* Get icon */
|
||||||
|
if(mi == null) {
|
||||||
|
if(p != null) p.sendMessage("Bad marker icon - [dynmap] sign invalid");
|
||||||
|
evt.setLine(0, ChatColor.RED + "<Bad Marker Icon>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Marker marker = ms.findMarker(id);
|
||||||
|
/* If exists, update it */
|
||||||
|
if(marker != null) {
|
||||||
|
marker.setLabel(label);
|
||||||
|
marker.setMarkerIcon(mi);
|
||||||
|
}
|
||||||
|
else { /* Make new marker */
|
||||||
|
marker = ms.createMarker(id, label, loc.getWorld().getName(), loc.getX() + 0.5, loc.getY() + 0.5, loc.getZ() + 0.5,
|
||||||
|
mi, true);
|
||||||
|
if(marker == null) {
|
||||||
|
if(p != null) p.sendMessage("Bad marker - [dynmap] sign invalid");
|
||||||
|
evt.setLine(0, ChatColor.RED + "<Bad Marker>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void onBlockBreak(BlockBreakEvent evt) {
|
public void onBlockBreak(BlockBreakEvent evt) {
|
||||||
if(evt.isCancelled() || (mgr == null))
|
if(evt.isCancelled() || (mgr == null))
|
||||||
return;
|
return;
|
||||||
|
Block blk = evt.getBlock();
|
||||||
|
Material m = blk.getType();
|
||||||
|
if((m == Material.SIGN) || (m == Material.SIGN_POST) || (m == Material.WALL_SIGN)) { /* If sign */
|
||||||
|
Location loc = blk.getLocation();
|
||||||
|
String id = getSignMarkerID(loc); /* Marker sign? */
|
||||||
|
Set<MarkerSet> sets = MarkerAPIImpl.api.getMarkerSets();
|
||||||
|
for(MarkerSet ms : sets) {
|
||||||
|
Marker marker = ms.findMarker(id); /* See if in this set */
|
||||||
|
if(marker != null) {
|
||||||
|
marker.deleteMarker();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private static SignListener sl = null; /* Do once - /dynmap reload doesn't reset listeners */
|
private static SignListener sl = null; /* Do once - /dynmap reload doesn't reset listeners */
|
||||||
@ -40,10 +112,10 @@ public class MarkerSignManager {
|
|||||||
if(sl == null) {
|
if(sl == null) {
|
||||||
sl = new SignListener();
|
sl = new SignListener();
|
||||||
PluginManager pm = plugin.getServer().getPluginManager();
|
PluginManager pm = plugin.getServer().getPluginManager();
|
||||||
pm.registerEvent(Event.Type.BLOCK_PLACE, sl, Event.Priority.Low, plugin);
|
pm.registerEvent(Event.Type.BLOCK_BREAK, sl, Event.Priority.Monitor, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_BREAK, sl, Event.Priority.Low, plugin);
|
|
||||||
pm.registerEvent(Event.Type.SIGN_CHANGE, sl, Event.Priority.Low, plugin);
|
pm.registerEvent(Event.Type.SIGN_CHANGE, sl, Event.Priority.Low, plugin);
|
||||||
}
|
}
|
||||||
|
MarkerSignManager.plugin = plugin;
|
||||||
return mgr;
|
return mgr;
|
||||||
}
|
}
|
||||||
public static void terminateSignManager(DynmapPlugin plugin) {
|
public static void terminateSignManager(DynmapPlugin plugin) {
|
||||||
|
@ -45,6 +45,8 @@ components:
|
|||||||
type: markers
|
type: markers
|
||||||
# If set, shows labels all the time (default is only on hover)
|
# If set, shows labels all the time (default is only on hover)
|
||||||
#showlabel: true
|
#showlabel: true
|
||||||
|
# If set, enables support for using signs for markers
|
||||||
|
#enablesigns: true
|
||||||
|
|
||||||
- class: org.dynmap.ClientComponent
|
- class: org.dynmap.ClientComponent
|
||||||
type: chat
|
type: chat
|
||||||
|
@ -58,6 +58,7 @@ permissions:
|
|||||||
dynmap.marker.delete: true
|
dynmap.marker.delete: true
|
||||||
dynmap.marker.list: true
|
dynmap.marker.list: true
|
||||||
dynmap.marker.icons: true
|
dynmap.marker.icons: true
|
||||||
|
dynmap.marker.sign: true
|
||||||
dynmap.render:
|
dynmap.render:
|
||||||
description: Allows /dynmap render command
|
description: Allows /dynmap render command
|
||||||
default: true
|
default: true
|
||||||
@ -107,4 +108,7 @@ permissions:
|
|||||||
description: Allows /dmarker list
|
description: Allows /dmarker list
|
||||||
dynmap.marker.icons:
|
dynmap.marker.icons:
|
||||||
description: Allows /dmarker icons
|
description: Allows /dmarker icons
|
||||||
|
dynmap.marker.sign:
|
||||||
|
description: Allows creation of markers using signs
|
||||||
|
default: op
|
||||||
|
|
Loading…
Reference in New Issue
Block a user