From 25fcd5e8bbb3cc64adda1e6970e53ae3a9279e60 Mon Sep 17 00:00:00 2001 From: Johannes Dewender Date: Tue, 27 Mar 2012 01:44:00 +0200 Subject: [PATCH 1/3] generate player POI out of players dat files The new ids are called "Player" and "PlayerSpawn". EntityId is the name of the player. Everything from the player dat is available in the poi filters. The Player position is the position on last logout. --- genPOI.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/genPOI.py b/genPOI.py index 1caad76..28664f2 100755 --- a/genPOI.py +++ b/genPOI.py @@ -39,6 +39,34 @@ def handleSigns(rset, outputdir, render, rname): rset._pois['TileEntities'] += data['TileEntities'] rset._pois['Entities'] += data['Entities'] +def handlePlayers(rset, render, worldpath): + if not hasattr(rset, "_pois"): + rset._pois = dict(TileEntities=[], Entities=[]) + dimension = {'overworld': 0, + 'nether': -1, + 'end': 1, + 'default': 0}[render['dimension']] + playerdir = os.path.join(worldpath, "players") + rset._pois['Players'] = [] + for playerfile in os.listdir(playerdir): + data = nbt.load(os.path.join(playerdir, playerfile))[1] + playername = playerfile.split(".")[0] + if data['Dimension'] == dimension: + # Position at last logout + data['id'] = "Player" + data['EntityId'] = playername + data['x'] = int(data['Pos'][0]) + data['y'] = int(data['Pos'][1]) + data['z'] = int(data['Pos'][2]) + rset._pois['Players'].append(data) + if "SpawnX" in data and dimension == 0: + # Spawn position (bed or main spawn) + spawn = {"id": "PlayerSpawn", + "EntityId": playername, + "x": data['SpawnX'], + "y": data['SpawnY'], + "z": data['SpawnZ']} + rset._pois['Players'].append(spawn) def main(): helptext = """genPOI @@ -102,6 +130,7 @@ def main(): markers[rname] = [dict(groupName=name, displayName=f.__doc__),] handleSigns(rset, os.path.join(destdir, rname), render, rname) + handlePlayers(rset, render, worldpath) logging.info("Done scanning regions") logging.info("Writing out javascript files") @@ -113,6 +142,9 @@ def main(): for poi in rset._pois['TileEntities']: if flter(poi): markerSetDict[name]['raw'].append(poi) + for poi in rset._pois['Players']: + if flter(poi): + markerSetDict[name]['raw'].append(poi) #print markerSetDict with open(os.path.join(destdir, "markersDB.js"), "w") as output: From 779b38f2a3897fe4f1fa44d5cd88de4a3a39ef65 Mon Sep 17 00:00:00 2001 From: Johannes Dewender Date: Tue, 27 Mar 2012 02:27:46 +0200 Subject: [PATCH 2/3] use avatars for player markers Avatars are taken from scripts at overviewer.org Do we need caching here? --- overviewer_core/data/js_src/views.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/overviewer_core/data/js_src/views.js b/overviewer_core/data/js_src/views.js index 323c1fc..1e8e5a5 100644 --- a/overviewer_core/data/js_src/views.js +++ b/overviewer_core/data/js_src/views.js @@ -302,7 +302,6 @@ overviewer.views.SignControlView = Backbone.View.extend({ }}); } - iconURL = overviewerConfig.CONST.image.signMarker; //dataRoot['markers'] = []; // for (i in dataRoot) { @@ -310,6 +309,14 @@ overviewer.views.SignControlView = Backbone.View.extend({ if (!markersDB[groupName].created) { for (j in markersDB[groupName].raw) { var entity = markersDB[groupName].raw[j]; + if (entity['id'] == 'Player') { + iconURL = "http://overviewer.org/avatar/" + + entity['EntityId']; + } else if (entity['id'] == 'Sign') { + iconURL = overviewerConfig.CONST.image.signMarker; + } else { + iconURL = overviewerConfig.CONST.image.defaultMarker; + } var marker = new google.maps.Marker({ 'position': overviewer.util.fromWorldToLatLng(entity.x, entity.y, entity.z, overviewer.mapView.options.currentTileSet), @@ -318,9 +325,7 @@ overviewer.views.SignControlView = Backbone.View.extend({ 'icon': iconURL, 'visible': false }); - if (entity['id'] == 'Sign') { - overviewer.util.createMarkerInfoWindow(marker); - } + overviewer.util.createMarkerInfoWindow(marker); jQuery.extend(entity, {markerObj: marker}); } markersDB[groupName].created = true; From 122eaee37d92dfefe3ff82024af3e72b3e5c4bcc Mon Sep 17 00:00:00 2001 From: Johannes Dewender Date: Tue, 27 Mar 2012 02:58:56 +0200 Subject: [PATCH 3/3] add bed marker icon from faithful pack Taken from the Faithful 32 texture pack: http://www.minecraftforum.net/viewtopic.php?f=25&t=77442 --- overviewer_core/assetmanager.py | 1 + overviewer_core/data/js_src/views.js | 2 ++ overviewer_core/data/web_assets/bed.png | Bin 0 -> 631 bytes 3 files changed, 3 insertions(+) create mode 100644 overviewer_core/data/web_assets/bed.png diff --git a/overviewer_core/assetmanager.py b/overviewer_core/assetmanager.py index 6407c1d..983f1e3 100644 --- a/overviewer_core/assetmanager.py +++ b/overviewer_core/assetmanager.py @@ -87,6 +87,7 @@ directory. dump['CONST']['image'] = { 'defaultMarker': 'signpost.png', 'signMarker': 'signpost_icon.png', + 'bedMarker': 'bed.png', 'compass': 'compass_upper-left.png', 'spawnMarker': 'http://google-maps-icons.googlecode.com/files/home.png', 'queryMarker': 'http://google-maps-icons.googlecode.com/files/regroup.png' diff --git a/overviewer_core/data/js_src/views.js b/overviewer_core/data/js_src/views.js index 1e8e5a5..6b46e72 100644 --- a/overviewer_core/data/js_src/views.js +++ b/overviewer_core/data/js_src/views.js @@ -312,6 +312,8 @@ overviewer.views.SignControlView = Backbone.View.extend({ if (entity['id'] == 'Player') { iconURL = "http://overviewer.org/avatar/" + entity['EntityId']; + } else if (entity['id'] == 'PlayerSpawn') { + iconURL = overviewerConfig.CONST.image.bedMarker; } else if (entity['id'] == 'Sign') { iconURL = overviewerConfig.CONST.image.signMarker; } else { diff --git a/overviewer_core/data/web_assets/bed.png b/overviewer_core/data/web_assets/bed.png new file mode 100644 index 0000000000000000000000000000000000000000..3645ac0c798e2e81af06c3a255dc5ae8077f5a97 GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U|>t~ zc6VX;4}uH!E}zW6z`$AH5n0T@z_$T}8U0TGwPRplU@!6Xb!ET9EX|;<)7Z;o!@$7! z-P6S}B;xSh>Av1fjuOZJ3pcvV&=>HCThrX3AQB~iV6*#QA-Qt<7WMUYoXvX0r3?L> z+SnBrIp+tkaPJj*^zvnZagW*SbL+gD_<48^zj|+eevh%zA){no@4l}q{$JRZJM&W6 z?z8`V9U8K?N_j1vl=FG2!lKqL)(NSRPb~O$uKT?_Vw&scy7PzpoMsy`H6+>fpMITv zMTVUr<^9!+tx@w13r0Awt`-bC6yeYyyivkz`?i#7qp49Ihr$nVuW4I(B*TR1d5zbh z-~%i&tw&~w+X!|irdLNFn!Iv~&aR5;+NocY?D*r>dL=BFdm*hSHoTExr;=>0&Y(; zVfXd*{Y`F8*PNTI?=ohaX_@@)z0)zPm#Z`K*6aI=7x1`Gv7NVDnCq}#`GHmK)k`LK zaOIT9g!6yrXo!)0TxDsr;bW~sit86Et%3#R2QU8XD-)0IZ10@dkjET3lSkri*VU&x gMH;8p$<{Of+`KE@O(At10|Nttr>mdKI;Vst0Pryl3;+NC literal 0 HcmV?d00001