Fix for disappearing sign-markers on 1.14 (Issue #2533)
This commit is contained in:
parent
fadfe1ba09
commit
8fc95bfc96
9 changed files with 127 additions and 9 deletions
|
|
@ -178,6 +178,17 @@ public abstract class DynmapServerInterface {
|
|||
* @return block ID, or -1 if chunk at given coordinate isn't loaded
|
||||
*/
|
||||
public abstract int getBlockIDAt(String wname, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Checks if a sign is at a given coordinate in a given world (if chunk is loaded)
|
||||
* @param wname - world name
|
||||
* @param x - X coordinate
|
||||
* @param y - Y coordinate
|
||||
* @param z - Z coordinate
|
||||
* @return 1 if a sign is at the location, 0 if it's not, -1 if the chunk isn't loaded
|
||||
*/
|
||||
public abstract int isSignAt(String wname, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Get current TPS for server (20.0 is nominal)
|
||||
* @return ticks per second
|
||||
|
|
|
|||
|
|
@ -20,9 +20,6 @@ public class MarkerSignManager {
|
|||
private static DynmapCore plugin = null;
|
||||
private static String defSignSet = null;
|
||||
|
||||
private static final int SIGNPOST_ID = 63;
|
||||
private static final int WALLSIGN_ID = 68;
|
||||
|
||||
private static class SignRec {
|
||||
String wname;
|
||||
int x, y, z;
|
||||
|
|
@ -33,10 +30,12 @@ public class MarkerSignManager {
|
|||
@Override
|
||||
public void signChangeEvent(int blkid, String wname, int x, int y, int z, String[] lines, DynmapPlayer p) {
|
||||
if(mgr == null)
|
||||
return;
|
||||
return;
|
||||
|
||||
if(!lines[0].equalsIgnoreCase("[dynmap]")) { /* If not dynmap sign, quit */
|
||||
return;
|
||||
}
|
||||
|
||||
/* If allowed to do marker signs */
|
||||
if((p == null) || ((plugin != null) && (plugin.checkPlayerPermission(p, "marker.sign")))) {
|
||||
String id = getSignMarkerID(wname, x, y, z); /* Get marker ID */
|
||||
|
|
@ -143,17 +142,15 @@ public class MarkerSignManager {
|
|||
for(Iterator<Entry<String, SignRec>> iter = sign_cache.entrySet().iterator(); iter.hasNext(); ) {
|
||||
Entry<String, SignRec> ent = iter.next();
|
||||
SignRec r = ent.getValue();
|
||||
/* If deleted marker, remote */
|
||||
/* If deleted marker, remove */
|
||||
if(r.m.getMarkerSet() == null) {
|
||||
iter.remove();
|
||||
}
|
||||
else {
|
||||
/* Get block ID */
|
||||
int blkid = plugin.getServer().getBlockIDAt(r.wname, r.x, r.y, r.z);
|
||||
if((blkid >= 0) && (blkid != WALLSIGN_ID) && (blkid != SIGNPOST_ID)) {
|
||||
if(plugin.getServer().isSignAt(r.wname, r.x, r.y, r.z) == 0) {
|
||||
r.m.deleteMarker();
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
plugin.getServer().scheduleServerTask(sl, 60*20);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue