From 5c064eab2b2847eb09064e31cd4b88cd6f64e1c3 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Thu, 13 Oct 2011 23:54:52 -0500 Subject: [PATCH] Add support for 'compass-mode' - handle 1.9 change of proper north --- src/main/java/org/dynmap/DynmapPlugin.java | 21 +++++++++++++------ src/main/java/org/dynmap/MapManager.java | 5 +++++ src/main/java/org/dynmap/flat/FlatMap.java | 6 +++++- .../org/dynmap/hdmap/IsoHDPerspective.java | 9 +++++++- .../dynmap/kzedmap/DefaultTileRenderer.java | 6 +++++- src/main/resources/configuration.txt | 5 +++++ 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/dynmap/DynmapPlugin.java b/src/main/java/org/dynmap/DynmapPlugin.java index b53b4725..6146f5b1 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -1,10 +1,7 @@ package org.dynmap; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Constructor; @@ -18,7 +15,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.block.Block; @@ -40,7 +36,6 @@ import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.block.LeavesDecayEvent; -import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityListener; import org.bukkit.event.player.PlayerChatEvent; @@ -54,7 +49,6 @@ import org.bukkit.event.world.ChunkPopulateEvent; import org.bukkit.event.world.SpawnChangeEvent; import org.bukkit.event.world.WorldListener; import org.bukkit.event.world.WorldLoadEvent; -import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -86,6 +80,13 @@ public class DynmapPlugin extends JavaPlugin { boolean swampshading = false; boolean waterbiomeshading = false; boolean fencejoin = false; + public CompassMode compassmode = CompassMode.PRE19; + + public enum CompassMode { + PRE19, /* Default for 1.8 and earlier (east is Z+) */ + NEWROSE, /* Use same map orientation, fix rose */ + NEWNORTH /* Use new map orientation */ + }; /* Flag to let code know that we're doing reload - make sure we don't double-register event handlers */ public boolean is_reload = false; @@ -258,6 +259,14 @@ public class DynmapPlugin extends JavaPlugin { waterbiomeshading = configuration.getBoolean("waterbiomeshaded", !getServer().getVersion().contains("(MC: 1.8")); /* Default fence-to-block-join off for 1.8, on after */ fencejoin = configuration.getBoolean("fence-to-block-join", !getServer().getVersion().contains("(MC: 1.8")); + /* Default compassmode to pre19, to newrose after */ + String cmode = configuration.getString("compass-mode", getServer().getVersion().contains("(MC: 1.8")?"pre19":"newrose"); + if(cmode.equals("newnorth")) + compassmode = CompassMode.NEWNORTH; + else if(cmode.equals("newrose")) + compassmode = CompassMode.NEWROSE; + else + compassmode = CompassMode.PRE19; loadDebuggers(); diff --git a/src/main/java/org/dynmap/MapManager.java b/src/main/java/org/dynmap/MapManager.java index 3942fadb..47468e3d 100644 --- a/src/main/java/org/dynmap/MapManager.java +++ b/src/main/java/org/dynmap/MapManager.java @@ -24,6 +24,7 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.command.CommandSender; +import org.dynmap.DynmapPlugin.CompassMode; import org.dynmap.DynmapWorld.AutoGenerateOption; import org.dynmap.debug.Debug; import org.dynmap.hdmap.HDMapManager; @@ -1166,6 +1167,10 @@ public class MapManager { public boolean getFenceJoin() { return plug_in.fencejoin; } + + public CompassMode getCompassMode() { + return plug_in.compassmode; + } public boolean getHideOres() { return hideores; diff --git a/src/main/java/org/dynmap/flat/FlatMap.java b/src/main/java/org/dynmap/flat/FlatMap.java index ce39e3ce..4573eef5 100644 --- a/src/main/java/org/dynmap/flat/FlatMap.java +++ b/src/main/java/org/dynmap/flat/FlatMap.java @@ -17,6 +17,7 @@ import org.dynmap.Color; import org.dynmap.ColorScheme; import org.dynmap.ConfigurationNode; import org.dynmap.DynmapChunk; +import org.dynmap.DynmapPlugin.CompassMode; import org.dynmap.MapManager; import org.dynmap.TileHashManager; import org.dynmap.MapTile; @@ -602,7 +603,10 @@ public class FlatMap extends MapType { s(o, "bigmap", this.isBigWorldMap(world)); s(o, "mapzoomin", c.getInteger("mapzoomin", 3)); s(o, "mapzoomout", world.getExtraZoomOutLevels()); - s(o, "compassview", "S"); /* Always from south */ + if(MapManager.mapman.getCompassMode() != CompassMode.PRE19) + s(o, "compassview", "E"); /* Always from east */ + else + s(o, "compassview", "S"); /* Always from south */ s(o, "image-format", ImageFormat.FORMAT_PNG.getFileExt()); a(worldObject, "maps", o); } diff --git a/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java b/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java index 327a112a..7211038b 100644 --- a/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java +++ b/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java @@ -18,6 +18,7 @@ import org.dynmap.Client; import org.dynmap.Color; import org.dynmap.ConfigurationNode; import org.dynmap.DynmapChunk; +import org.dynmap.DynmapPlugin.CompassMode; import org.dynmap.Log; import org.dynmap.MapManager; import org.dynmap.MapTile; @@ -737,6 +738,10 @@ public class IsoHDPerspective implements HDPerspective { return; } azimuth = configuration.getDouble("azimuth", 135.0); /* Get azimuth (default to classic kzed POV */ + /* Fix azimuth so that we respect new north, if that is requested (newnorth = oldeast) */ + if(MapManager.mapman.getCompassMode() == CompassMode.NEWNORTH) { + azimuth = (azimuth + 90.0); if(azimuth >= 360.0) azimuth = azimuth - 360.0; + } inclination = configuration.getDouble("inclination", 60.0); if(inclination > MAX_INCLINATION) inclination = MAX_INCLINATION; if(inclination < MIN_INCLINATION) inclination = MIN_INCLINATION; @@ -1239,7 +1244,9 @@ public class IsoHDPerspective implements HDPerspective { s(mapObject, "scale", scale); s(mapObject, "worldtomap", world_to_map.toJSON()); s(mapObject, "maptoworld", map_to_world.toJSON()); - int dir = ((360 + (int)(22.5+azimuth)) / 45) % 8;; + int dir = ((360 + (int)(22.5+azimuth)) / 45) % 8; + if(MapManager.mapman.getCompassMode() != CompassMode.PRE19) + dir = (dir + 6) % 8; s(mapObject, "compassview", directions[dir]); } diff --git a/src/main/java/org/dynmap/kzedmap/DefaultTileRenderer.java b/src/main/java/org/dynmap/kzedmap/DefaultTileRenderer.java index 8e948302..0c3c161d 100644 --- a/src/main/java/org/dynmap/kzedmap/DefaultTileRenderer.java +++ b/src/main/java/org/dynmap/kzedmap/DefaultTileRenderer.java @@ -18,6 +18,7 @@ import org.dynmap.ColorScheme; import org.dynmap.ConfigurationNode; import org.dynmap.DynmapWorld; import org.dynmap.MapManager; +import org.dynmap.DynmapPlugin.CompassMode; import org.dynmap.MapType.ImageFormat; import org.dynmap.TileHashManager; import org.dynmap.debug.Debug; @@ -589,7 +590,10 @@ public class DefaultTileRenderer implements MapTileRenderer { s(o, "bigmap", map.isBigWorldMap(world)); s(o, "mapzoomin", c.getInteger("mapzoomin", 2)); s(o, "mapzoomout", world.getExtraZoomOutLevels()+1); - s(o, "compassview", "SE"); /* Always from southeast */ + if(MapManager.mapman.getCompassMode() != CompassMode.PRE19) + s(o, "compassview", "NE"); /* Always from northeast */ + else + s(o, "compassview", "SE"); /* Always from southeast */ s(o, "image-format", ImageFormat.FORMAT_PNG.getFileExt()); a(worldObject, "maps", o); } diff --git a/src/main/resources/configuration.txt b/src/main/resources/configuration.txt index 55781294..1f445c53 100644 --- a/src/main/resources/configuration.txt +++ b/src/main/resources/configuration.txt @@ -266,6 +266,11 @@ enabletilehash: true # Control updating of player faces, once loaded (if faces are being managed by other apps or manually) #refreshskins: false +# Control behavior for new (1.9+) compass orientation (sunrise moved 90 degrees: east is now what used to be south) +# default is 'pre19' for 1.8 server (existing orientation), 'newrose' for 1.9+ (preserve maps, rotate rose) +# 'newnorth' is used to rotate maps and rose (requires fullrender of any HDMap map - same as 'newrose' for FlatMap or KzedMap) +#compass-mode: newnorth + render-triggers: #- chunkloaded #- playermove