Compare commits

..

2 Commits

Author SHA1 Message Date
mikeprimm bf2ea7d1e3 Fix zoom so that markers are placed properly 2011-05-14 12:34:36 +02:00
FrozenCow e25c9a82b3 Changed version to 0.16.1 2011-05-14 12:33:03 +02:00
146 changed files with 7510 additions and 3350 deletions
+51
View File
@@ -0,0 +1,51 @@
<project name="dynmap" default="dist" basedir=".">
<property name="bukkit.jar" location="C:\Users\Bob\Desktop\minecraft_server\bukkit-0.0.1-SNAPSHOT.jar"/>
<property name="minecraft" location="C:\Users\Bob\Desktop\minecraft_server"/>
<property name="plugins" location="${minecraft}/plugins/"/>
<property name="http_root" location="/srv/http/dynmap/"/>
<property name="pluginname" value="dynmap"/>
<property name="src" location="src"/>
<property name="bin" location="bin"/>
<property name="dist" location="dist"/>
<target name="init">
<mkdir dir="${bin}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}/main/java" destdir="${bin}" classpath="${bukkit.jar}" debug="on" includeantruntime="false" />
</target>
<target name="dist" depends="compile">
<mkdir dir="${dist}"/>
<jar jarfile="${dist}/${pluginname}.jar">
<fileset dir="${bin}"/>
<fileset file="${src}/main/resources/plugin.yml"/>
<zipfileset file="${src}/main/resources/colors.txt"/>
</jar>
</target>
<target name="deploy" depends="dist">
<copy file="${dist}/${pluginname}.jar" todir="${plugins}"/>
<copy todir="${http_root}">
<fileset dir="web"/>
</copy>
</target>
<target name="release" depends="dist">
<delete file="${pluginname}.zip"/>
<zip destfile="${pluginname}.zip">
<zipfileset dir="." includes="README.md" fullpath="readme.txt"/>
<zipfileset dir="." includes="build.xml"/>
<zipfileset dir="${dist}" includes="*.jar"/>
<zipfileset dir="${src}" includes="*.java" prefix="src/"/>
<zipfileset dir="${web}" includes="**" prefix="web/"/>
</zip>
</target>
<target name="clean">
<delete dir="${bin}"/>
<delete dir="${dist}"/>
</target>
</project>
+6
View File
@@ -0,0 +1,6 @@
<project name="dynmap_parameters" basedir=".">
<property name="bukkit.jar" location="../../bukkit.jar"/>
<property name="minecraft" location="../../"/>
<property name="plugins" location="${minecraft}/plugins/"/>
<property name="http_root" location="/srv/http/dynmap/"/>
</project>
+191
View File
@@ -0,0 +1,191 @@
Stone
1 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
Grass
2 117 176 73 255 93 140 58 255 58 88 36 255 46 70 29 255
Dirt
3 134 96 67 255 107 76 53 255 67 48 33 255 53 38 26 255
Cobblestone
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Wooden Plank
5 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
Sappling
6 120 120 120 0 96 96 96 0 60 60 60 0 48 48 48 0
Bedrock
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
Water
8 38 92 255 51 30 73 204 51 19 46 127 51 15 36 102 51
Stationary Water
9 38 92 255 51 30 73 204 51 19 46 127 51 15 36 102 51
Lava
10 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
Stationary Lava
11 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
Sand
12 218 210 158 255 174 168 126 255 109 105 79 255 87 84 63 255
Gravel
13 136 126 126 255 108 100 100 255 68 63 63 255 54 50 50 255
Gold Ore
14 143 140 125 255 114 112 100 255 71 70 62 255 57 56 50 255
Iron Ore
15 136 130 127 255 108 104 101 255 68 65 63 255 54 52 50 255
Coal Ore
16 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Wood
17 102 81 51 255 81 64 40 255 51 40 25 255 40 32 20 255
Leaves
18 60 192 41 100 48 153 32 100 30 96 20 100 24 76 16 100
Sponge
19 193 193 65 255 174 174 47 255 97 97 5 255 76 76 20 255
Glass
20 255 255 255 64 204 204 204 64 127 127 127 64 102 102 102 64
Lapis Lazuli Ore
21 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
Lapis Lazuli Block
22 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
Dispenser
23 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Sandstone
24 218 210 158 255 174 168 126 255 109 105 79 255 87 84 63 255
Note Block
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Aqua Green Cloth
26 43 192 117 255 38 168 101 255 34 150 90 255 29 130 78 255
Cyan Cloth
27 43 192 192 255 36 185 185 255 29 130 130 255 22 99 99 255
Blue Cloth
28 0 0 255 255 0 0 204 255 0 0 127 255 0 0 102 255
Purple Cloth
29 101 101 188 255 95 95 175 255 86 86 160 255 78 78 145 255
Indigo Cloth
30 113 41 186 255 99 38 165 255 85 32 142 255 72 27 119 255
Violet Cloth
31 156 65 198 255 132 55 168 255 112 47 142 255 84 35 107 255
Magenta Cloth
32 187 42 187 255 160 36 160 255 135 31 135 255 112 25 112 255
Pink Cloth
33 192 43 117 255 168 38 103 255 142 32 87 255 127 29 78 255
Black Cloth
34 0 0 0 255 0 0 0 255 0 0 0 255 0 0 0 255
Wool
35 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
35:0 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
35:1 204 111 48 255 162 89 38 255 102 56 24 255 81 44 19 255
35:2 166 66 175 255 133 53 140 255 83 33 87 255 66 26 69 255
35:3 91 121 185 255 73 96 147 255 46 61 92 255 36 48 73 255
35:4 170 158 24 255 135 126 19 255 85 79 12 255 67 62 10 255
35:5 51 165 42 255 41 131 33 255 26 82 21 255 20 65 17 255
35:6 190 115 135 255 151 92 108 255 95 57 67 255 75 46 53 255
35:7 58 58 58 255 47 47 47 255 29 29 29 255 23 23 23 255
35:8 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255
35:9 34 102 131 255 27 81 104 255 17 51 65 255 13 40 52 255
35:10 113 47 171 255 90 37 136 255 57 24 85 255 45 19 68 255
35:11 34 44 134 255 27 35 107 255 17 22 67 255 13 18 53 255
35:12 75 44 24 255 60 35 19 255 37 22 12 255 30 18 10 255
35:13 49 67 21 255 39 53 17 255 24 34 10 255 19 27 8 255
35:14 143 39 36 255 114 31 28 255 71 20 18 255 57 16 14 255
35:15 24 20 20 255 19 16 16 255 12 10 10 255 9 8 8 255
Gray Cloth
36 125 125 125 255 114 114 114 255 104 104 104 255 86 86 86 255
Yellow Flower
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
Red Rose
38 255 0 0 255 204 0 0 255 127 0 0 255 102 0 0 255
Brown Mushroom
39 204 153 120 32 145 109 85 32 114 86 67 32 73 64 58 32
Red Mushroom
40 255 43 43 32 196 29 38 32 186 105 109 32 124 64 64 32
Gold Block
41 232 245 46 255 185 196 36 255 116 122 23 255 92 98 18 255
Iron Block
42 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
Double Stone Slab
43 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
Stone Slab
44 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
Brick
45 170 86 62 255 136 68 49 255 85 43 31 255 68 34 24 255
TNT
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
Bookshelf
54 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
Moss Stone
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Obsidian
49 26 11 43 255 20 8 34 255 13 5 21 255 10 4 17 255
Torch
50 159 127 80 255 98 88 20 0 245 220 50 255 196 176 40 0
Fire
51 255 170 30 200 204 136 24 200 127 85 15 200 102 68 12 200
Monster Spawner
52 0 150 110 196 0 150 130 196 0 150 110 196 0 150 130 196
Wooden Stair
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
Chest
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Diamond Ore
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
Diamond Block
57 45 166 152 255 36 132 121 255 22 83 76 255 18 66 60 255
Workbench
58 114 88 56 255 91 70 44 255 57 44 28 255 45 35 22 255
Crops
59 146 192 0 255 116 153 0 255 73 96 0 255 58 76 0 255
Farmland
60 95 58 30 255 76 46 24 255 47 29 15 255 38 23 12 255
Furnace
61 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Burning Furnace
62 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Sign Post
63 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
Wooden Door
64 136 109 67 255 108 87 53 255 68 54 33 255 54 43 26 255
Ladder
65 181 140 64 32 144 112 51 32 90 70 32 32 72 56 25 32
Minecart Tracks
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
Cobblestone Stairs
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Iron Door
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
Redstone Ore
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
Glowing Redstone Ore
74 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
Redstone Torch off
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
Redstone Torch on
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
Snow
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
Ice
79 83 113 163 51 66 90 130 51 41 56 81 51 33 45 65 51
Snow Block
80 250 250 250 255 200 200 200 255 125 125 125 255 100 100 100 255
Cactus
81 25 120 25 255 20 96 20 255 12 60 12 255 10 48 10 255
Clay
82 151 157 169 255 120 125 135 255 75 78 84 255 60 62 67 255
Sugar Cane
83 193 234 150 255 154 187 120 255 96 117 75 255 77 93 60 255
Jukebox
84 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Fence
85 127 98 49 96 95 72 33 96 48 34 9 96 32 21 21 96
Pumpkin
86 255 115 0 200 204 92 0 200 126 57 0 200 102 46 0 200
Netherrack
87 166 89 89 255 141 80 62 255 135 15 15 255 96 6 6 255
Soulsand
88 133 109 94 255 121 97 82 255 90 70 57 255 79 59 46 255
Glowstone
89 249 212 156 255 255 188 94 255 192 143 70 255 122 91 44 255
Portal
90 140 0 196 128 120 0 196 128 140 0 196 128 120 0 196 128
Jack-o-lantern
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
Cake Block
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
+191
View File
@@ -0,0 +1,191 @@
Stone
1 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
Grass
2 60 113 17 255 50 94 14 255 42 79 12 255 50 94 14 255
Dirt
3 134 96 67 255 107 76 53 255 67 48 33 255 53 38 26 255
Cobblestone
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Wooden Plank
5 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
Sappling
6 120 120 120 0 96 96 96 0 60 60 60 0 48 48 48 0
Bedrock
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
Water
8 38 92 255 51 30 73 204 51 19 46 127 51 15 36 102 51
Stationary Water
9 38 92 255 51 30 73 204 51 19 46 127 51 15 36 102 51
Lava
10 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
Stationary Lava
11 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
Sand
12 218 210 158 255 174 168 126 255 109 105 79 255 87 84 63 255
Gravel
13 136 126 126 255 108 100 100 255 68 63 63 255 54 50 50 255
Gold Ore
14 143 140 125 255 114 112 100 255 71 70 62 255 57 56 50 255
Iron Ore
15 136 130 127 255 108 104 101 255 68 65 63 255 54 52 50 255
Coal Ore
16 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Wood
17 102 81 51 255 81 64 40 255 51 40 25 255 40 32 20 255
Leaves
18 27 69 37 180 22 57 31 180 19 48 25 180 22 57 31 180
Sponge
19 193 193 65 255 174 174 47 255 97 97 5 255 76 76 20 255
Glass
20 255 255 255 64 204 204 204 64 127 127 127 64 102 102 102 64
Lapis Lazuli Ore
21 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
Lapis Lazuli Block
22 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
Dispenser
23 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Sandstone
24 192 178 110 255 160 148 92 255 134 124 77 255 160 148 92 255
Note Block
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Aqua Green Cloth
26 43 192 117 255 38 168 101 255 34 150 90 255 29 130 78 255
Cyan Cloth
27 43 192 192 255 36 185 185 255 29 130 130 255 22 99 99 255
Blue Cloth
28 0 0 255 255 0 0 204 255 0 0 127 255 0 0 102 255
Purple Cloth
29 101 101 188 255 95 95 175 255 86 86 160 255 78 78 145 255
Indigo Cloth
30 113 41 186 255 99 38 165 255 85 32 142 255 72 27 119 255
Violet Cloth
31 156 65 198 255 132 55 168 255 112 47 142 255 84 35 107 255
Magenta Cloth
32 187 42 187 255 160 36 160 255 135 31 135 255 112 25 112 255
Pink Cloth
33 192 43 117 255 168 38 103 255 142 32 87 255 127 29 78 255
Black Cloth
34 0 0 0 255 0 0 0 255 0 0 0 255 0 0 0 255
Wool
35 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
35:0 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
35:1 227 128 52 255 224 126 51 255 187 105 42 255 224 126 51 255
35:2 185 76 188 255 183 75 186 255 153 63 155 255 183 75 186 255
35:3 102 139 199 255 100 137 196 255 84 114 164 255 100 137 196 255
35:4 189 181 26 255 187 178 26 255 156 149 22 255 187 178 26 255
35:5 57 189 45 255 56 186 44 255 47 156 37 255 56 186 44 255
35:6 211 132 145 255 209 130 143 255 174 109 120 255 209 130 143 255
35:7 65 67 63 255 64 66 62 255 54 55 52 255 64 66 62 255
35:8 154 166 156 255 152 163 154 255 127 137 128 255 152 163 154 255
35:9 38 117 141 255 37 115 139 255 31 96 116 255 37 115 139 255
35:10 126 54 184 255 124 53 181 255 104 44 151 255 124 53 181 255
35:11 38 51 144 255 37 50 143 255 31 42 119 255 37 50 143 255
35:12 83 51 26 255 82 50 26 255 69 42 22 255 82 50 26 255
35:13 54 77 22 255 54 76 22 255 45 63 19 255 54 76 22 255
35:14 159 45 38 255 157 44 38 255 131 37 32 255 157 44 38 255
35:15 26 23 22 255 26 23 21 255 22 19 18 255 26 23 21 255
Gray Cloth
36 125 125 125 255 114 114 114 255 104 104 104 255 86 86 86 255
Yellow Flower
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
Red Rose
38 255 0 0 255 204 0 0 255 127 0 0 255 102 0 0 255
Brown Mushroom
39 204 153 120 32 145 109 85 32 114 86 67 32 73 64 58 32
Red Mushroom
40 255 43 43 32 196 29 38 32 186 105 109 32 124 64 64 32
Gold Block
41 232 245 46 255 185 196 36 255 116 122 23 255 92 98 18 255
Iron Block
42 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
Double Stone Slab
43 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
Stone Slab
44 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
Brick
45 170 86 62 255 136 68 49 255 85 43 31 255 68 34 24 255
TNT
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
Bookshelf
54 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
Moss Stone
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Obsidian
49 26 11 43 255 20 8 34 255 13 5 21 255 10 4 17 255
Torch
50 159 127 80 255 98 88 20 0 245 220 50 255 196 176 40 0
Fire
51 255 170 30 200 204 136 24 200 127 85 15 200 102 68 12 200
Monster Spawner
52 0 150 110 196 0 150 130 196 0 150 110 196 0 150 130 196
Wooden Stair
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
Chest
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Diamond Ore
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
Diamond Block
57 45 166 152 255 36 132 121 255 22 83 76 255 18 66 60 255
Workbench
58 114 88 56 255 91 70 44 255 57 44 28 255 45 35 22 255
Crops
59 146 192 0 255 116 153 0 255 73 96 0 255 58 76 0 255
Farmland
60 95 58 30 255 76 46 24 255 47 29 15 255 38 23 12 255
Furnace
61 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Burning Furnace
62 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Sign Post
63 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
Wooden Door
64 136 109 67 255 108 87 53 255 68 54 33 255 54 43 26 255
Ladder
65 181 140 64 32 144 112 51 32 90 70 32 32 72 56 25 32
Minecart Tracks
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
Cobblestone Stairs
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Iron Door
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
Redstone Ore
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
Glowing Redstone Ore
74 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
Redstone Torch off
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
Redstone Torch on
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
Snow
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
Ice
79 83 113 163 51 66 90 130 51 41 56 81 51 33 45 65 51
Snow Block
80 250 250 250 255 200 200 200 255 125 125 125 255 100 100 100 255
Cactus
81 25 120 25 255 20 96 20 255 12 60 12 255 10 48 10 255
Clay
82 151 157 169 255 120 125 135 255 75 78 84 255 60 62 67 255
Sugar Cane
83 193 234 150 255 154 187 120 255 96 117 75 255 77 93 60 255
Jukebox
84 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Fence
85 127 98 49 96 95 72 33 96 48 34 9 96 32 21 21 96
Pumpkin
86 255 115 0 200 204 92 0 200 126 57 0 200 102 46 0 200
Netherrack
87 166 89 89 255 141 80 62 255 135 15 15 255 96 6 6 255
Soulsand
88 133 109 94 255 121 97 82 255 90 70 57 255 79 59 46 255
Glowstone
89 249 212 156 255 255 188 94 255 192 143 70 255 122 91 44 255
Portal
90 140 0 196 128 120 0 196 128 140 0 196 128 120 0 196 128
Jack-o-lantern
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
Cake Block
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
+191
View File
@@ -0,0 +1,191 @@
Stone
1 119 104 84 255 104 95 80 255 96 87 72 255 77 68 53 255
Grass
2 75 156 43 255 56 117 32 255 35 104 10 255 32 82 0 255
Dirt
3 134 96 67 255 107 76 53 255 67 48 33 255 68 49 33 255
Cobblestone
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Wooden Plank
5 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
Sappling
6 120 120 120 0 96 96 96 0 60 60 60 0 48 48 48 0
Bedrock
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
Water
8 21 88 125 80 7 70 117 80 6 68 115 80 5 53 90 80
Stationary Water
9 21 88 125 80 7 70 117 80 6 68 115 80 5 53 90 80
Lava
10 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
Stationary Lava
11 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
Sand
12 214 182 111 255 203 171 100 255 186 154 83 255 173 141 70 255
Gravel
13 136 126 126 255 108 100 100 255 68 63 63 255 54 50 50 255
Gold Ore
14 143 140 125 255 114 112 100 255 71 70 62 255 57 56 50 255
Iron Ore
15 136 130 127 255 108 104 101 255 68 65 63 255 54 52 50 255
Coal Ore
16 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Wood
17 102 81 51 255 81 64 40 255 51 40 25 255 40 32 20 255
Leaves
18 23 68 6 100 12 56 0 100 6 52 0 100 0 42 0 100
Sponge
19 193 193 65 255 174 174 47 255 97 97 5 255 76 76 20 255
Glass
20 255 255 255 64 204 204 204 64 127 127 127 64 102 102 102 64
Lapis Lazuli Ore
21 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
Lapis Lazuli Block
22 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
Dispenser
23 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Sandstone
24 214 182 111 255 203 171 100 255 186 154 83 255 173 141 70 255
Note Block
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Aqua Green Cloth
26 43 192 117 255 38 168 101 255 34 150 90 255 29 130 78 255
Cyan Cloth
27 43 192 192 255 36 185 185 255 29 130 130 255 22 99 99 255
Blue Cloth
28 0 0 255 255 0 0 204 255 0 0 127 255 0 0 102 255
Purple Cloth
29 101 101 188 255 95 95 175 255 86 86 160 255 78 78 145 255
Indigo Cloth
30 113 41 186 255 99 38 165 255 85 32 142 255 72 27 119 255
Violet Cloth
31 156 65 198 255 132 55 168 255 112 47 142 255 84 35 107 255
Magenta Cloth
32 187 42 187 255 160 36 160 255 135 31 135 255 112 25 112 255
Pink Cloth
33 192 43 117 255 168 38 103 255 142 32 87 255 127 29 78 255
Black Cloth
34 0 0 0 255 0 0 0 255 0 0 0 255 0 0 0 255
Wool
35 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
35:0 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
35:1 204 111 48 255 162 89 38 255 102 56 24 255 81 44 19 255
35:2 166 66 175 255 133 53 140 255 83 33 87 255 66 26 69 255
35:3 91 121 185 255 73 96 147 255 46 61 92 255 36 48 73 255
35:4 170 158 24 255 135 126 19 255 85 79 12 255 67 62 10 255
35:5 51 165 42 255 41 131 33 255 26 82 21 255 20 65 17 255
35:6 190 115 135 255 151 92 108 255 95 57 67 255 75 46 53 255
35:7 58 58 58 255 47 47 47 255 29 29 29 255 23 23 23 255
35:8 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255
35:9 34 102 131 255 27 81 104 255 17 51 65 255 13 40 52 255
35:10 113 47 171 255 90 37 136 255 57 24 85 255 45 19 68 255
35:11 34 44 134 255 27 35 107 255 17 22 67 255 13 18 53 255
35:12 75 44 24 255 60 35 19 255 37 22 12 255 30 18 10 255
35:13 49 67 21 255 39 53 17 255 24 34 10 255 19 27 8 255
35:14 143 39 36 255 114 31 28 255 71 20 18 255 57 16 14 255
35:15 24 20 20 255 19 16 16 255 12 10 10 255 9 8 8 255
Gray Cloth
36 125 125 125 255 114 114 114 255 104 104 104 255 86 86 86 255
Yellow Flower
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
Red Rose
38 255 0 0 255 204 0 0 255 127 0 0 255 102 0 0 255
Brown Mushroom
39 204 153 120 32 145 109 85 32 114 86 67 32 73 64 58 32
Red Mushroom
40 255 43 43 32 196 29 38 32 186 105 109 32 124 64 64 32
Gold Block
41 232 245 46 255 185 196 36 255 116 122 23 255 92 98 18 255
Iron Block
42 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
Double Stone Slab
43 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
Stone Slab
44 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
Brick
45 170 86 62 255 136 68 49 255 85 43 31 255 68 34 24 255
TNT
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
Bookshelf
54 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
Moss Stone
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Obsidian
49 26 11 43 255 20 8 34 255 13 5 21 255 10 4 17 255
Torch
50 159 127 80 255 98 88 20 0 245 220 50 255 196 176 40 0
Fire
51 255 170 30 200 204 136 24 200 127 85 15 200 102 68 12 200
Monster Spawner
52 0 150 110 196 0 150 130 196 0 150 110 196 0 150 130 196
Wooden Stair
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
Chest
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Diamond Ore
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
Diamond Block
57 45 166 152 255 36 132 121 255 22 83 76 255 18 66 60 255
Workbench
58 114 88 56 255 91 70 44 255 57 44 28 255 45 35 22 255
Crops
59 146 192 0 255 116 153 0 255 73 96 0 255 58 76 0 255
Farmland
60 95 58 30 255 76 46 24 255 47 29 15 255 38 23 12 255
Furnace
61 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Burning Furnace
62 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
Sign Post
63 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
Wooden Door
64 136 109 67 255 108 87 53 255 68 54 33 255 54 43 26 255
Ladder
65 181 140 64 32 144 112 51 32 90 70 32 32 72 56 25 32
Minecart Tracks
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
Cobblestone Stairs
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
Iron Door
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
Redstone Ore
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
Glowing Redstone Ore
74 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
Redstone Torch off
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
Redstone Torch on
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
Snow
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
Ice
79 83 113 163 51 66 90 130 51 41 56 81 51 33 45 65 51
Snow Block
80 250 250 250 255 200 200 200 255 125 125 125 255 100 100 100 255
Cactus
81 25 120 25 255 20 96 20 255 12 60 12 255 10 48 10 255
Clay
82 151 157 169 255 120 125 135 255 75 78 84 255 60 62 67 255
Sugar Cane
83 193 234 150 255 154 187 120 255 96 117 75 255 77 93 60 255
Jukebox
84 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
Fence
85 127 98 49 96 95 72 33 96 48 34 9 96 32 21 21 96
Pumpkin
86 255 115 0 200 204 92 0 200 126 57 0 200 102 46 0 200
Netherrack
87 166 89 89 255 141 80 62 255 135 15 15 255 96 6 6 255
Soulsand
88 133 109 94 255 121 97 82 255 90 70 57 255 79 59 46 255
Glowstone
89 249 212 156 255 255 188 94 255 192 143 70 255 122 91 44 255
Portal
90 140 0 196 128 120 0 196 128 140 0 196 128 120 0 196 128
Jack-o-lantern
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
Cake Block
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
+79
View File
@@ -0,0 +1,79 @@
1 133 129 118 255 111 108 98 255 93 90 82 255 111 108 98 255
2 60 113 17 255 50 94 14 255 42 79 12 255 50 94 14 255
3 103 83 51 255 86 69 43 255 72 58 36 255 86 69 43 255
4 118 112 96 255 98 93 80 255 82 78 67 255 98 93 80 255
5 109 80 60 255 91 67 50 255 76 56 41 255 91 67 50 255
7 79 79 82 255 66 66 68 255 55 55 57 255 66 66 68 255
8 94 170 255 51 82 148 223 51 69 124 186 51 82 148 223 51
9 94 170 255 51 82 148 223 51 69 124 186 51 82 148 223 51
10 255 164 41 255 255 164 41 255 212 137 34 255 255 164 41 255
11 255 164 41 255 255 164 41 255 212 137 34 255 255 164 41 255
12 192 178 110 255 160 148 92 255 134 124 77 255 160 148 92 255
13 120 105 79 255 100 87 66 255 84 73 55 255 100 87 66 255
14 255 181 38 255 255 181 38 255 212 151 31 255 255 181 38 255
15 231 174 113 255 193 145 94 255 161 121 79 255 193 145 94 255
16 56 60 70 255 46 50 58 255 39 42 49 255 46 50 58 255
17 119 97 74 255 99 81 62 255 83 68 52 255 99 81 62 255
18 27 69 37 180 22 57 31 180 19 48 25 180 22 57 31 180
20 178 217 223 90 148 181 186 90 124 151 155 90 148 181 186 90
35 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
35:0 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
35:1 227 128 52 255 224 126 51 255 187 105 42 255 224 126 51 255
35:2 185 76 188 255 183 75 186 255 153 63 155 255 183 75 186 255
35:3 102 139 199 255 100 137 196 255 84 114 164 255 100 137 196 255
35:4 189 181 26 255 187 178 26 255 156 149 22 255 187 178 26 255
35:5 57 189 45 255 56 186 44 255 47 156 37 255 56 186 44 255
35:6 211 132 145 255 209 130 143 255 174 109 120 255 209 130 143 255
35:7 65 67 63 255 64 66 62 255 54 55 52 255 64 66 62 255
35:8 154 166 156 255 152 163 154 255 127 137 128 255 152 163 154 255
35:9 38 117 141 255 37 115 139 255 31 96 116 255 37 115 139 255
35:10 126 54 184 255 124 53 181 255 104 44 151 255 124 53 181 255
35:11 38 51 144 255 37 50 143 255 31 42 119 255 37 50 143 255
35:12 83 51 26 255 82 50 26 255 69 42 22 255 82 50 26 255
35:13 54 77 22 255 54 76 22 255 45 63 19 255 54 76 22 255
35:14 159 45 38 255 157 44 38 255 131 37 32 255 157 44 38 255
35:15 26 23 22 255 26 23 21 255 22 19 18 255 26 23 21 255
36 0 0 0 254 0 0 0 254 0 0 0 254 0 0 0 254
37 73 108 60 254 61 90 50 254 51 75 42 254 61 90 50 254
38 84 139 187 254 70 116 155 254 59 97 130 254 70 116 155 254
39 184 144 0 254 153 119 0 254 128 100 0 254 153 119 0 254
40 201 17 17 254 168 14 14 254 140 12 12 254 168 14 14 254
41 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
42 249 249 249 255 207 207 207 255 173 173 173 255 207 207 207 255
43 122 112 99 255 101 93 82 255 85 78 69 255 101 93 82 255
44 122 112 99 254 101 93 82 254 85 78 69 254 101 93 82 254
45 230 103 73 255 192 86 61 255 160 71 50 255 192 86 61 255
46 255 79 30 255 231 72 27 255 193 60 22 255 231 72 27 255
48 96 108 70 255 80 90 58 255 67 75 49 255 80 90 58 255
49 83 67 83 255 69 56 69 255 58 47 58 255 69 56 69 255
50 255 203 58 200 255 203 58 200 212 169 48 200 255 203 58 200
51 255 170 30 200 255 170 30 200 212 141 25 200 255 170 30 200
52 255 228 52 255 255 228 52 255 212 190 43 255 255 228 52 255
53 145 109 80 255 121 91 67 255 101 76 56 255 121 91 67 255
54 165 132 100 255 138 110 84 255 115 92 70 255 138 110 84 255
55 116 21 21 255 97 18 18 255 81 15 15 255 97 18 18 255
56 115 230 255 255 105 210 232 255 88 175 194 255 105 210 232 255
57 164 217 237 255 136 181 198 255 114 151 165 255 136 181 198 255
58 171 138 99 255 142 115 82 255 118 96 68 255 142 115 82 255
59 136 152 21 255 114 127 17 255 95 106 14 255 114 127 17 255
60 123 82 51 255 103 68 43 255 86 57 36 255 103 68 43 255
61 158 128 73 255 132 106 61 255 110 89 51 255 132 106 61 255
62 158 128 73 255 132 106 61 255 110 89 51 255 132 106 61 255
63 60 112 17 255 50 93 14 255 42 78 12 255 50 93 14 255
64 129 97 69 255 108 81 57 255 90 68 47 255 108 81 57 255
65 144 128 99 32 120 106 82 32 100 89 69 32 120 106 82 32
66 113 109 102 180 94 91 85 180 79 76 71 180 94 91 85 180
67 115 107 93 255 96 89 78 255 80 75 65 255 96 89 78 255
71 255 255 255 255 229 229 229 255 191 191 191 255 229 229 229 255
73 174 107 107 255 145 89 89 255 121 75 75 255 145 89 89 255
74 174 107 107 255 145 89 89 255 121 75 75 255 145 89 89 255
75 255 140 61 254 217 119 52 254 181 99 43 254 217 119 52 254
76 255 0 0 254 255 0 0 254 212 0 0 254 255 0 0 254
78 237 248 255 254 237 248 255 254 198 207 212 254 237 248 255 254
79 166 222 255 55 166 222 255 55 139 185 212 55 166 222 255 55
80 237 248 255 255 237 248 255 255 198 207 212 255 237 248 255 255
81 116 167 80 255 97 139 67 255 81 116 56 255 97 139 67 255
82 234 240 255 255 216 221 235 255 180 185 196 255 216 221 235 255
83 136 167 74 255 114 139 62 255 95 116 52 255 114 139 62 255
84 116 97 80 255 97 81 67 255 81 68 55 255 97 81 67 255
85 115 99 63 255 96 82 52 255 80 69 44 255 96 82 52 255
+172
View File
@@ -0,0 +1,172 @@
# All paths in this configuration file are relative to Dynmap's data-folder: minecraft_server/plugins/dynmap/
# Treat hiddenplayers.txt as a whitelist for players to be shown on the map? (Default false)
display-whitelist: false
# How often a tile gets rendered (in seconds).
renderinterval: 1
# Do render on main thread - may generate more server load, but safer and fixes broken tiles
renderonsync: true
render-triggers:
# - playermove
# - playerjoin
- blockplaced
- blockbreak
# The path where the tile-files are placed.
tilespath: web/tiles
# The path where the web-files are located.
webpath: web
# The network-interface the webserver will bind to (0.0.0.0 for all interfaces, 127.0.0.1 for only local access).
webserver-bindaddress: 0.0.0.0
# The TCP-port the webserver will listen on.
webserver-port: 8123
# Disables Webserver portion of Dynmap (Advanced users only)
disable-webserver: false
# Writes JSON to file in the webpath
jsonfile: false
# How often the json file gets written to(in seconds)
jsonfile-interval: 1
# Use timesliced fullrender - takes a bit longer, but much more polite for server
timeslicerender: true
# Period between tile renders for timesliced fullrender, in seconds
timesliceinterval: 0.5
# The maptypes Dynmap will use to render.
worlds:
- name: world
maps:
- class: org.dynmap.flat.FlatMap
prefix: flat
colorscheme: default
- class: org.dynmap.kzedmap.KzedMap
renderers:
- class: org.dynmap.kzedmap.DefaultTileRenderer
prefix: t
maximumheight: 127
colorscheme: default
#- class: org.dynmap.kzedmap.HighlightTileRenderer
# prefix: ht
# maximumheight: 127
# colorscheme: default
# highlight: # For highlighting multiple block-types.
# - 56 # Highlight diamond-ore
# - 66 # Highlight minecart track
# highlight: 56 # For highlighting a single block-type.
- class: org.dynmap.kzedmap.CaveTileRenderer
prefix: ct
maximumheight: 127
- name: nether
maps:
- class: org.dynmap.flat.FlatMap
prefix: flat
colorscheme: default
- class: org.dynmap.kzedmap.KzedMap
renderers:
- class: org.dynmap.kzedmap.DefaultTileRenderer
prefix: nt
maximumheight: 64
colorscheme: default
web:
# Handles the clientside updates differently only enable if using jsonfile
jsonfile: false
# Interval the browser should poll for updates.
updaterate: 2000
allowchat: true
allowwebchat: true
webchat-interval: 5
showplayerfacesinmenu: true
joinmessage: "%playername% joined"
quitmessage: "%playername% quit"
spammessage: "You may only chat once every %interval% seconds."
components:
- type: chat
- type: chatballoon
focuschatballoons: false
- type: chatbox
showplayerfaces: true
messagettl: 5
- type: playermarkers
showplayerfaces: true
#- type: digitalclock
- type: timeofdayclock
showdigitalclock: true
#showweather: true
#- type: regions
# name: WorldGuard
# useworldpath: true
# filename: regions.yml
# basenode: regions
# use3dregions: true
# infowindow: '<div class="infowindow"><span style="font-size:120%;">%regionname% - %priority% (%parent%)</span><br /> Owners <span style="font-weight:bold;">%playerowners% %groupowners%</span><br />Members <span style="font-weight:bold;">%playermembers% %groupmembers%</span><br />Flags<br /><span style="font-weight:bold;">%flags%</span></div>'
# regionstyle:
# strokeColor: "#FF0000"
# strokeOpacity: 0.8
# strokeWeight: 3
# fillColor: "#FF0000"
# fillOpacity: 0.35
defaultworld: world
worlds:
- title: World
name: world
maps:
- type: FlatMapType
title: Flat
name: flat
prefix: flat
- type: KzedMapType
title: Surface
name: surface
prefix: t
#- type: KzedMapType
# title: Highlighted Map
# name: highlight
# prefix: ht
- type: KzedMapType
title: Cave
name: cave
prefix: ct
- title: Nether
name: nether
maps:
- type: FlatMapType
title: Flat
name: flat
prefix: flat
- type: KzedMapType
title: Surface
name: nether
prefix: nt
# Example:
#- title: Other World # With what name the world is displayed.
# name: world_other # The actual name of the world (equal to your directory-name).
# maps:
# - type: KzedMapType # The type (or perspective) of the map. At the moment, there are no others than KzedMapType.
# title: Surface # The name of the map that will be displayed.
# name: surface # The actual name of the map (should be unique for this world).
# prefix: t # The prefix of the tile-files that are generated.
# icon: images/block_other.png # Sets a custom icon for the map. (optional)
# - type: KzedMapType
# title: Cave
# name: cave
# prefix: ct
# Enables debugging.
#debuggers:
# - class: org.dynmap.debug.LogDebugger
+51 -154
View File
@@ -1,162 +1,59 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.dynmap</groupId>
<artifactId>dynmap</artifactId>
<version>0.33</version>
<name>dynmap</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<BUILD_NUMBER>dev</BUILD_NUMBER>
</properties>
<url>http://github.com/webbukkit/dynmap/</url>
<issueManagement>
<system>GitHub</system>
<url>https://github.com/webbukkit/dynmap/issues</url>
</issueManagement>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>*.yml</include>
<include>*.txt</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>*.yml</exclude>
<exclude>*.txt</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals><goal>unpack</goal></goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.dynmap</groupId>
<artifactId>DynmapCore</artifactId>
<version>${project.version}</version>
<classifier>bin</classifier>
<type>zip</type>
<outputDirectory>${project.build.directory}/core</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>org.dynmap:dynmap-api:jar:*</include>
<include>org.dynmap:DynmapCore:jar:*</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<modelVersion>4.0.0</modelVersion>
<groupId>org.dynmap</groupId>
<artifactId>dynmap</artifactId>
<version>0.16.1</version>
<name>dynmap</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<url>http://github.com/FrozenCow/dynmap/</url>
<issueManagement>
<system>GitHub</system>
<url>https://github.com/FrozenCow/dynmap/issues</url>
</issueManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/package.xml</descriptor>
</descriptors>
<!-- Hack for bug in maven-assembly: http://jira.codehaus.org/browse/MASSEMBLY-449 -->
<archiverConfig>
<fileMode>420</fileMode> <!-- 420(dec) = 644(oct) -->
<directoryMode>493</directoryMode> <!-- 493(dec) = 755(oct) -->
<defaultDirectoryMode>493</defaultDirectoryMode>
</archiverConfig>
<descriptors>
<descriptor>src/main/assembly/package.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>build</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
<execution>
<id>build</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<releases>
</releases>
<snapshots>
</snapshots>
<id>spout-repo</id>
<url>http://repo.spout.org</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.nijikokun.bukkit</groupId>
<artifactId>Permissions</artifactId>
<version>[2.5.4,)</version>
</dependency>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>[1.1-R5-SNAPSHOT,1.7)</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.dynmap</groupId>
<artifactId>dynmap-api</artifactId>
<version>${project.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.dynmap</groupId>
<artifactId>DynmapCore</artifactId>
<version>${project.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.getspout</groupId>
<artifactId>spoutpluginapi</artifactId>
<version>dev-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.nijikokun.bukkit</groupId>
<artifactId>Permissions</artifactId>
<version>[2.5.4,)</version>
</dependency>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
+23 -13
View File
@@ -6,22 +6,32 @@
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/core</directory>
<outputDirectory>/dynmap</outputDirectory>
<excludes>
<exclude>web/version.js</exclude></excludes></fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>README*</include>
<include>LICENSE*</include>
<include>NOTICE*</include>
<include>CHANGELOG*</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/core/web</directory>
<outputDirectory>/dynmap/web</outputDirectory>
<directory>${project.basedir}/web</directory>
<outputDirectory>/dynmap/web</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.basedir}/colorschemes</directory>
<outputDirectory>/dynmap/colorschemes</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>/dynmap/</outputDirectory>
<includes>
<include>version.js</include></includes>
<filtered>true</filtered></fileSet>
<include>configuration.txt</include></includes></fileSet>
</fileSets>
<files>
<file>
<source>${project.build.directory}/${artifactId}-${version}.jar</source>
<outputDirectory>/</outputDirectory>
<destName>dynmap.jar</destName>
</file>
</files>
<source>${project.build.directory}/${artifactId}-${version}.jar</source>
<outputDirectory>/</outputDirectory>
<destName>dynmap.jar</destName></file></files>
</assembly>
@@ -0,0 +1,111 @@
package org.dynmap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
public class AsynchronousQueue<T> {
protected static final Logger log = Logger.getLogger("Minecraft");
private Object lock = new Object();
private Thread thread;
private LinkedList<T> queue = new LinkedList<T>();
private Set<T> set = new HashSet<T>();
private Handler<T> handler;
private int dequeueTime;
public AsynchronousQueue(Handler<T> handler, int dequeueTime) {
this.handler = handler;
this.dequeueTime = dequeueTime;
}
public boolean push(T t) {
synchronized (lock) {
if (set.add(t)) {
queue.addLast(t);
return true;
}
return false;
}
}
private T pop() {
synchronized (lock) {
try {
T t = queue.removeFirst();
if (!set.remove(t)) {
// This should never happen.
}
return t;
} catch (NoSuchElementException e) {
return null;
}
}
}
public int size() {
return set.size();
}
public void start() {
synchronized (lock) {
thread = new Thread(new Runnable() {
@Override
public void run() {
running();
}
});
thread.start();
try {
thread.setPriority(Thread.MIN_PRIORITY);
} catch (SecurityException e) {
log.info("Failed to set minimum priority for worker thread!");
}
}
}
public void stop() {
synchronized (lock) {
if (thread == null)
return;
Thread oldThread = thread;
thread = null;
log.info("Stopping map renderer...");
oldThread.interrupt();
try {
oldThread.join(1000);
} catch (InterruptedException e) {
log.info("Waiting for map renderer to stop is interrupted");
}
}
}
private void running() {
try {
while (Thread.currentThread() == thread) {
T t = pop();
if (t != null) {
handler.handle(t);
}
sleep(dequeueTime);
}
} catch (Exception ex) {
log.log(Level.SEVERE, "Exception on rendering-thread", ex);
}
}
private boolean sleep(int time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
return false;
}
return true;
}
}
+111
View File
@@ -0,0 +1,111 @@
package org.dynmap;
import java.util.HashMap;
public class Cache<K, V> {
private final int size;
private int len;
private CacheNode head;
private CacheNode tail;
private class CacheNode {
public CacheNode prev;
public CacheNode next;
public K key;
public V value;
public CacheNode(K key, V value) {
this.key = key;
this.value = value;
prev = null;
next = null;
}
public void unlink() {
if (prev == null) {
head = next;
} else {
prev.next = next;
}
if (next == null) {
tail = prev;
} else {
next.prev = prev;
}
prev = null;
next = null;
len--;
}
public void append() {
if (tail == null) {
head = this;
tail = this;
} else {
tail.next = this;
prev = tail;
tail = this;
}
len++;
}
}
private HashMap<K, CacheNode> map;
public Cache(int size) {
this.size = size;
len = 0;
head = null;
tail = null;
map = new HashMap<K, CacheNode>();
}
/*
* returns value for key, if key exists in the cache otherwise null
*/
public V get(K key) {
CacheNode n = map.get(key);
if (n == null)
return null;
return n.value;
}
/*
* puts a new key-value pair in the cache if the key existed already, the
* value is updated, and the old value is returned if the key didn't exist,
* it is added; the oldest value (now pushed out of the cache) may be
* returned, or null if the cache isn't yet full
*/
public V put(K key, V value) {
CacheNode n = map.get(key);
if (n == null) {
V ret = null;
if (len >= size) {
CacheNode first = head;
first.unlink();
map.remove(first.key);
ret = first.value;
}
CacheNode add = new CacheNode(key, value);
add.append();
map.put(key, add);
return ret;
} else {
n.unlink();
V old = n.value;
n.value = value;
n.append();
return old;
}
}
}
+71
View File
@@ -0,0 +1,71 @@
package org.dynmap;
import org.bukkit.ChatColor;
public class Client {
public static class Update {
public long timestamp;
public long servertime;
public boolean hasStorm;
public boolean isThundering;
public Player[] players;
public Object[] updates;
}
public static class Player {
public String type = "player";
public String name;
public String world;
public double x, y, z;
public Player(String name, String world, double x, double y, double z) {
this.name = ChatColor.stripColor(name);
this.world = world;
this.x = x;
this.y = y;
this.z = z;
}
}
public static class Stamped {
public long timestamp = System.currentTimeMillis();
}
public static class ChatMessage extends Stamped {
public String type = "chat";
public String source;
public String playerName;
public String message;
public ChatMessage(String source, String playerName, String message) {
this.source = source;
this.playerName = ChatColor.stripColor(playerName);
this.message = ChatColor.stripColor(message);
}
}
public static class PlayerJoinMessage extends Stamped {
public String type = "playerjoin";
public String playerName;
public PlayerJoinMessage(String playerName) {
this.playerName = ChatColor.stripColor(playerName);
}
}
public static class PlayerQuitMessage extends Stamped {
public String type = "playerquit";
public String playerName;
public PlayerQuitMessage(String playerName) {
this.playerName = ChatColor.stripColor(playerName);
}
}
public static class Tile extends Stamped {
public String type = "tile";
public String name;
public Tile(String name) {
this.name = name;
}
}
}
+125
View File
@@ -0,0 +1,125 @@
package org.dynmap;
import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.dynmap.debug.Debug;
public class ColorScheme {
protected static final Logger log = Logger.getLogger("Minecraft");
private static final HashMap<String, ColorScheme> cache = new HashMap<String, ColorScheme>();
public String name;
/* Switch to arrays - faster than map */
public Color[][] colors; /* [blk-type][step] */
public Color[][][] datacolors; /* [bkt-type][blk-dat][step] */
public ColorScheme(String name, Color[][] colors, Color[][][] datacolors) {
this.name = name;
this.colors = colors;
this.datacolors = datacolors;
}
private static File getColorSchemeDirectory() {
return new File(DynmapPlugin.dataDirectory, "colorschemes");
}
public static ColorScheme getScheme(String name) {
if (name == null)
name = "default";
ColorScheme scheme = cache.get(name);
if (scheme == null) {
scheme = loadScheme(name);
cache.put(name, scheme);
}
return scheme;
}
public static ColorScheme loadScheme(String name) {
File colorSchemeFile = new File(getColorSchemeDirectory(), name + ".txt");
Color[][] colors = new Color[256][];
Color[][][] datacolors = new Color[256][][];
InputStream stream;
boolean enab_datacolor = MapManager.mapman.doSyncRender();
try {
Debug.debug("Loading colors from '" + colorSchemeFile + "'...");
stream = new FileInputStream(colorSchemeFile);
Scanner scanner = new Scanner(stream);
int nc = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.startsWith("#") || line.equals("")) {
continue;
}
String[] split = line.split("\t");
if (split.length < 17) {
continue;
}
Integer id;
Integer dat = null;
int idx = split[0].indexOf(':');
if(idx > 0) { /* ID:data - data color */
id = new Integer(split[0].substring(0, idx));
dat = new Integer(split[0].substring(idx+1));
}
else {
id = new Integer(split[0]);
}
Color[] c = new Color[4];
/* store colors by raycast sequence number */
c[0] = new Color(Integer.parseInt(split[1]), Integer.parseInt(split[2]), Integer.parseInt(split[3]), Integer.parseInt(split[4]));
c[3] = new Color(Integer.parseInt(split[5]), Integer.parseInt(split[6]), Integer.parseInt(split[7]), Integer.parseInt(split[8]));
c[1] = new Color(Integer.parseInt(split[9]), Integer.parseInt(split[10]), Integer.parseInt(split[11]), Integer.parseInt(split[12]));
c[2] = new Color(Integer.parseInt(split[13]), Integer.parseInt(split[14]), Integer.parseInt(split[15]), Integer.parseInt(split[16]));
if(dat != null) {
if(enab_datacolor) {
Color[][] dcolor = datacolors[id]; /* Existing list? */
if(dcolor == null) {
dcolor = new Color[16][]; /* Make 16 index long list */
datacolors[id] = dcolor;
}
if((dat >= 0) && (dat < 16)) { /* Add color to list */
dcolor[dat] = c;
}
}
if(dat == 0) { /* Index zero is base color too */
colors[id] = c;
}
}
else {
colors[id] = c;
}
nc += 1;
}
scanner.close();
/* Last, push base color into any open slots in data colors list */
for(int k = 0; k < 256; k++) {
Color[][] dc = datacolors[k]; /* see if data colors too */
if(dc != null) {
Color[] c = colors[k];
for(int i = 0; i < 16; i++) {
if(dc[i] == null)
dc[i] = c;
}
}
}
} catch (RuntimeException e) {
log.log(Level.SEVERE, "Could not load colors '" + name + "' ('" + colorSchemeFile + "').", e);
return null;
} catch (FileNotFoundException e) {
log.log(Level.SEVERE, "Could not load colors '" + name + "' ('" + colorSchemeFile + "'): File not found.", e);
}
return new ColorScheme(name, colors, datacolors);
}
}
+10
View File
@@ -0,0 +1,10 @@
package org.dynmap;
public class DynmapChunk {
public int x, z;
public DynmapChunk(int x, int z) {
this.x = x;
this.z = z;
}
}
@@ -0,0 +1,31 @@
package org.dynmap;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerQuitEvent;
public class DynmapPlayerChatListener extends PlayerListener {
DynmapPlugin plugin;
public DynmapPlayerChatListener(DynmapPlugin plugin) {
this.plugin = plugin;
}
@Override
public void onPlayerChat(PlayerChatEvent event) {
if(event.isCancelled()) return;
plugin.mapManager.pushUpdate(new Client.ChatMessage("player", event.getPlayer().getDisplayName(), event.getMessage()));
}
@Override
public void onPlayerJoin(PlayerJoinEvent event) {
plugin.mapManager.pushUpdate(new Client.PlayerJoinMessage(event.getPlayer().getDisplayName()));
}
@Override
public void onPlayerQuit(PlayerQuitEvent event) {
plugin.mapManager.pushUpdate(new Client.PlayerQuitMessage(event.getPlayer().getDisplayName()));
}
}
+407
View File
@@ -0,0 +1,407 @@
package org.dynmap;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.world.ChunkLoadEvent;
import org.bukkit.event.world.WorldListener;
import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.config.Configuration;
import org.dynmap.Event.Listener;
import org.dynmap.debug.Debug;
import org.dynmap.debug.Debugger;
import org.dynmap.permissions.NijikokunPermissions;
import org.dynmap.permissions.OpPermissions;
import org.dynmap.permissions.PermissionProvider;
import org.dynmap.web.HttpServer;
import org.dynmap.web.Json;
import org.dynmap.web.handlers.ClientConfigurationHandler;
import org.dynmap.web.handlers.ClientUpdateHandler;
import org.dynmap.web.handlers.FilesystemHandler;
import org.dynmap.web.handlers.SendMessageHandler;
public class DynmapPlugin extends JavaPlugin {
protected static final Logger log = Logger.getLogger("Minecraft");
public HttpServer webServer = null;
public MapManager mapManager = null;
public PlayerList playerList;
public Configuration configuration;
public HashSet<String> enabledTriggers = new HashSet<String>();
public PermissionProvider permissions;
public Timer timer;
public static File dataDirectory;
public static File tilesDirectory;
public MapManager getMapManager() {
return mapManager;
}
public HttpServer getWebServer() {
return webServer;
}
public void onEnable() {
permissions = NijikokunPermissions.create(getServer(), "dynmap");
if (permissions == null)
permissions = new OpPermissions(new String[] { "fullrender" });
dataDirectory = this.getDataFolder();
configuration = new Configuration(new File(this.getDataFolder(), "configuration.txt"));
configuration.load();
loadDebuggers();
tilesDirectory = getFile(configuration.getString("tilespath", "web/tiles"));
if (!tilesDirectory.isDirectory() && !tilesDirectory.mkdirs()) {
log.warning("Could not create directory for tiles ('" + tilesDirectory + "').");
}
playerList = new PlayerList(getServer(), getFile("hiddenplayers.txt"), configuration);
playerList.load();
mapManager = new MapManager(this, configuration);
mapManager.startRendering();
if (!configuration.getBoolean("disable-webserver", false)) {
loadWebserver();
}
if (configuration.getBoolean("jsonfile", false)) {
jsonConfig();
int jsonInterval = configuration.getInt("jsonfile-interval", 1) * 1000;
timer = new Timer();
timer.scheduleAtFixedRate(new JsonTimerTask(this, configuration), jsonInterval, jsonInterval);
}
enabledTriggers.clear();
for (Object trigger : configuration.getList("render-triggers")) {
enabledTriggers.add((String) trigger);
}
registerEvents();
}
public void loadWebserver() {
InetAddress bindAddress;
{
String address = configuration.getString("webserver-bindaddress", "0.0.0.0");
try {
bindAddress = address.equals("0.0.0.0")
? null
: InetAddress.getByName(address);
} catch (UnknownHostException e) {
bindAddress = null;
}
}
int port = configuration.getInt("webserver-port", 8123);
webServer = new HttpServer(bindAddress, port);
webServer.handlers.put("/", new FilesystemHandler(getFile(configuration.getString("webpath", "web"))));
webServer.handlers.put("/tiles/", new FilesystemHandler(tilesDirectory));
webServer.handlers.put("/up/", new ClientUpdateHandler(mapManager, playerList, getServer()));
webServer.handlers.put("/up/configuration", new ClientConfigurationHandler((Map<?, ?>) configuration.getProperty("web")));
if (configuration.getNode("web").getBoolean("allowwebchat", false)) {
SendMessageHandler messageHandler = new SendMessageHandler() {{
maximumMessageInterval = (configuration.getNode("web").getInt("webchat-interval", 1) * 1000);
spamMessage = "\""+configuration.getNode("web").getString("spammessage", "You may only chat once every %interval% seconds.")+"\"";
onMessageReceived.addListener(new Listener<SendMessageHandler.Message>() {
@Override
public void triggered(Message t) {
webChat(t.name, t.message);
}
});
}};
webServer.handlers.put("/up/sendmessage", messageHandler);
}
try {
webServer.startServer();
} catch (IOException e) {
log.severe("Failed to start WebServer on " + bindAddress + ":" + port + "!");
}
/* Print version info */
PluginDescriptionFile pdfFile = this.getDescription();
log.info("[dynmap] version " + pdfFile.getVersion() + " is enabled" );
}
public void onDisable() {
mapManager.stopRendering();
if (webServer != null) {
webServer.shutdown();
webServer = null;
}
if (timer != null) {
timer.cancel();
}
Debug.clearDebuggers();
}
public boolean isTrigger(String s) {
return enabledTriggers.contains(s);
}
public void registerEvents() {
final PluginManager pm = getServer().getPluginManager();
final MapManager mm = mapManager;
// To trigger rendering.
{
BlockListener renderTrigger = new BlockListener() {
@Override
public void onBlockPlace(BlockPlaceEvent event) {
mm.touch(event.getBlockPlaced().getLocation());
}
@Override
public void onBlockBreak(BlockBreakEvent event) {
mm.touch(event.getBlock().getLocation());
}
};
if (isTrigger("blockplaced"))
pm.registerEvent(Event.Type.BLOCK_PLACE, renderTrigger, Priority.Monitor, this);
if (isTrigger("blockbreak"))
pm.registerEvent(Event.Type.BLOCK_BREAK, renderTrigger, Priority.Monitor, this);
}
{
PlayerListener renderTrigger = new PlayerListener() {
@Override
public void onPlayerJoin(PlayerJoinEvent event) {
mm.touch(event.getPlayer().getLocation());
}
@Override
public void onPlayerMove(PlayerMoveEvent event) {
mm.touch(event.getPlayer().getLocation());
}
};
if (isTrigger("playerjoin"))
pm.registerEvent(Event.Type.PLAYER_JOIN, renderTrigger, Priority.Monitor, this);
if (isTrigger("playermove"))
pm.registerEvent(Event.Type.PLAYER_MOVE, renderTrigger, Priority.Monitor, this);
}
{
WorldListener renderTrigger = new WorldListener() {
@Override
public void onChunkLoad(ChunkLoadEvent event) {
int x = event.getChunk().getX() * 16 + 8;
int z = event.getChunk().getZ() * 16 + 8;
mm.touch(new Location(event.getWorld(), x, 127, z));
}
/*
* @Override public void onChunkGenerated(ChunkLoadEvent event)
* { int x = event.getChunk().getX() * 16 + 8; int z =
* event.getChunk().getZ() * 16 + 8; mm.touch(new
* Location(event.getWorld(), x, 127, z)); }
*/
};
if (isTrigger("chunkloaded"))
pm.registerEvent(Event.Type.CHUNK_LOAD, renderTrigger, Priority.Monitor, this);
//if (isTrigger("chunkgenerated")) pm.registerEvent(Event.Type.CHUNK_GENERATED, renderTrigger, Priority.Monitor, this);
}
// To announce when players have joined/quit/chatted.
if (configuration.getNode("web").getBoolean("allowchat", false)) {
// To handle webchat.
PlayerListener playerListener = new DynmapPlayerChatListener(this);
//getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Monitor, this);
pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Monitor, this);
pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Monitor, this);
pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Monitor, this);
}
// To link configuration to real loaded worlds.
WorldListener worldListener = new WorldListener() {
@Override
public void onWorldLoad(WorldLoadEvent event) {
mm.activateWorld(event.getWorld());
}
};
pm.registerEvent(Event.Type.WORLD_LOAD, worldListener, Priority.Monitor, this);
}
private static File combinePaths(File parent, String path) {
return combinePaths(parent, new File(path));
}
private static File combinePaths(File parent, File path) {
if (path.isAbsolute())
return path;
return new File(parent, path.getPath());
}
public File getFile(String path) {
return combinePaths(getDataFolder(), path);
}
protected void loadDebuggers() {
Object debuggersConfiguration = configuration.getProperty("debuggers");
Debug.clearDebuggers();
if (debuggersConfiguration != null) {
for (Object debuggerConfiguration : (List<?>) debuggersConfiguration) {
Map<?, ?> debuggerConfigurationMap = (Map<?, ?>) debuggerConfiguration;
try {
Class<?> debuggerClass = Class.forName((String) debuggerConfigurationMap.get("class"));
Constructor<?> constructor = debuggerClass.getConstructor(JavaPlugin.class, Map.class);
Debugger debugger = (Debugger) constructor.newInstance(this, debuggerConfigurationMap);
Debug.addDebugger(debugger);
} catch (Exception e) {
log.severe("Error loading debugger: " + e);
e.printStackTrace();
continue;
}
}
}
}
private static final Set<String> commands = new HashSet<String>(Arrays.asList(new String[] {
"render",
"hide",
"show",
"fullrender" }));
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!cmd.getName().equalsIgnoreCase("dynmap"))
return false;
Player player = null;
if (sender instanceof Player)
player = (Player) sender;
if (args.length > 0) {
String c = args[0];
if (!commands.contains(c)) {
return false;
}
if (c.equals("render") && checkPlayerPermission(sender,"render")) {
if (player != null) {
int invalidates = mapManager.touch(player.getLocation());
sender.sendMessage("Queued " + invalidates + " tiles" + (invalidates == 0
? " (world is not loaded?)"
: "..."));
return true;
}
} else if (c.equals("hide")) {
if (args.length == 1) {
if(player != null && checkPlayerPermission(sender,"hide.self")) {
playerList.setVisible(player.getName(),false);
sender.sendMessage("You are now hidden on Dynmap.");
return true;
}
} else if (checkPlayerPermission(sender,"hide.others")) {
for (int i = 1; i < args.length; i++) {
playerList.setVisible(args[i],false);
sender.sendMessage(args[i] + " is now hidden on Dynmap.");
}
return true;
}
} else if (c.equals("show")) {
if (args.length == 1) {
if(player != null && checkPlayerPermission(sender,"show.self")) {
playerList.setVisible(player.getName(),true);
sender.sendMessage("You are now visible on Dynmap.");
return true;
}
} else if (checkPlayerPermission(sender,"show.others")) {
for (int i = 1; i < args.length; i++) {
playerList.setVisible(args[i],true);
sender.sendMessage(args[i] + " is now visible on Dynmap.");
}
return true;
}
} else if (c.equals("fullrender") && checkPlayerPermission(sender,"fullrender")) {
if (args.length > 1) {
for (int i = 1; i < args.length; i++) {
World w = getServer().getWorld(args[i]);
if(w != null)
mapManager.renderFullWorld(new Location(w, 0, 0, 0));
}
return true;
} else if (player != null) {
Location loc = player.getLocation();
if(loc != null)
mapManager.renderFullWorld(loc);
return true;
}
}
return true;
}
return false;
}
private boolean checkPlayerPermission(CommandSender sender, String permission) {
if (!(sender instanceof Player)) {
return true;
} else if (!permissions.has(sender, permission.toLowerCase())) {
sender.sendMessage("You don't have permission to use this command!");
return false;
}
return true;
}
private void jsonConfig() {
File outputFile;
Map<?, ?> clientConfig = (Map<?, ?>) configuration.getProperty("web");
File webpath = new File(configuration.getString("webpath", "web"), "standalone/dynmap_config.json");
if (webpath.isAbsolute())
outputFile = webpath;
else
outputFile = new File(getDataFolder(), webpath.toString());
try {
FileOutputStream fos = new FileOutputStream(outputFile);
fos.write(Json.stringifyJson(clientConfig).getBytes());
fos.close();
} catch (FileNotFoundException ex) {
log.log(Level.SEVERE, "Exception while writing JSON-configuration-file.", ex);
} catch (IOException ioe) {
log.log(Level.SEVERE, "Exception while writing JSON-configuration-file.", ioe);
}
}
public void webChat(String name, String message) {
mapManager.pushUpdate(new Client.ChatMessage("web", name, message));
log.info("[WEB]" + name + ": " + message);
getServer().broadcastMessage("[WEB]" + name + ": " + message);
}
}
+12
View File
@@ -0,0 +1,12 @@
package org.dynmap;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.World;
public class DynmapWorld {
public World world;
public List<MapType> maps = new ArrayList<MapType>();
public UpdateQueue updates = new UpdateQueue();
}
+26
View File
@@ -0,0 +1,26 @@
package org.dynmap;
import java.util.LinkedList;
import java.util.List;
public class Event<T> {
private List<Listener<T>> listeners = new LinkedList<Listener<T>>();
public synchronized void addListener(Listener<T> l) {
listeners.add(l);
}
public synchronized void removeListener(Listener<T> l) {
listeners.remove(l);
}
public synchronized void trigger(T t) {
for (Listener<T> l : listeners) {
l.triggered(t);
}
}
public interface Listener<T> {
void triggered(T t);
}
}
+5
View File
@@ -0,0 +1,5 @@
package org.dynmap;
public interface Handler<T> {
void handle(T t);
}
+174
View File
@@ -0,0 +1,174 @@
package org.dynmap;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.config.Configuration;
import org.bukkit.util.config.ConfigurationNode;
import org.dynmap.web.Json;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
class JsonTimerTask extends TimerTask {
protected static final Logger log = Logger.getLogger("Minecraft");
private final DynmapPlugin plugin;
private Server server;
private MapManager mapManager;
private Configuration configuration;
private ConfigurationNode regions;
private static final JSONParser parser = new JSONParser();
private long lastTimestamp = 0;
public JsonTimerTask(DynmapPlugin instance, Configuration config) {
this.plugin = instance;
this.server = this.plugin.getServer();
this.mapManager = this.plugin.getMapManager();
this.configuration = config;
for(ConfigurationNode type : configuration.getNodeList("web.components", null))
if(type.getString("type").equalsIgnoreCase("regions")) {
this.regions = type;
break;
}
}
public void run() {
long jsonInterval = configuration.getInt("jsonfile-interval", 1) * 1000;
long current = System.currentTimeMillis();
File outputFile;
//Handles Reading WebChat
if (configuration.getNode("web").getBoolean("allowwebchat", false)) {
File webChatPath = new File(this.configuration.getString("webpath", "web"), "standalone/dynmap_webchat.json");
if (webChatPath.isAbsolute())
outputFile = webChatPath;
else {
outputFile = new File(plugin.getDataFolder(), webChatPath.toString());
}
if (webChatPath.exists() && lastTimestamp != 0) {
JSONArray jsonMsgs = null;
try {
FileReader inputFileReader = new FileReader(webChatPath);
jsonMsgs = (JSONArray) parser.parse(inputFileReader);
inputFileReader.close();
} catch (IOException ex) {
log.log(Level.SEVERE, "Exception while reading JSON-file.", ex);
} catch (ParseException ex) {
log.log(Level.SEVERE, "Exception while parsing JSON-file.", ex);
}
if (jsonMsgs != null) {
Iterator<?> iter = jsonMsgs.iterator();
while (iter.hasNext()) {
JSONObject o = (JSONObject) iter.next();
if (Long.parseLong(String.valueOf(o.get("timestamp"))) >= (lastTimestamp)) {
plugin.webChat(String.valueOf(o.get("name")), String.valueOf(o.get("message")));
}
}
}
}
}
//Handles Updates
for (World world : this.server.getWorlds()) {
//Parse region file for multi world style
if (regions != null)
if (regions.getBoolean("useworldpath", false))
parseRegionFile(world.getName() + "/" + regions.getString("filename", "regions.yml"), regions.getString("filename", "regions.yml").replace(".", "_" + world.getName() + ".yml"));
current = System.currentTimeMillis();
Client.Update update = new Client.Update();
update.timestamp = current;
update.servertime = world.getTime() % 24000;
update.hasStorm = world.hasStorm();
update.isThundering = world.isThundering();
Player[] players = plugin.playerList.getVisiblePlayers();
update.players = new Client.Player[players.length];
for (int i = 0; i < players.length; i++) {
Player p = players[i];
Location pl = p.getLocation();
update.players[i] = new Client.Player(p.getDisplayName(), pl.getWorld().getName(), pl.getX(), pl.getY(), pl.getZ());
}
update.updates = mapManager.getWorldUpdates(world.getName(), current - (jsonInterval + 10000));
File webWorldPath = new File(this.configuration.getString("webpath", "web"), "standalone/dynmap_" + world.getName() + ".json");
if (webWorldPath.isAbsolute())
outputFile = webWorldPath;
else {
outputFile = new File(plugin.getDataFolder(), webWorldPath.toString());
}
try {
FileOutputStream fos = new FileOutputStream(outputFile);
fos.write(Json.stringifyJson(update).getBytes());
fos.close();
} catch (FileNotFoundException ex) {
log.log(Level.SEVERE, "Exception while writing JSON-file.", ex);
} catch (IOException ioe) {
log.log(Level.SEVERE, "Exception while writing JSON-file.", ioe);
}
}
lastTimestamp = System.currentTimeMillis();
//Parse regions file for non worlds style
if (regions != null)
if (!regions.getBoolean("useworldpath", false))
parseRegionFile(regions.getString("filename", "regions.yml"), regions.getString("filename", "regions.yml"));
}
//handles parsing and writing region json files
private void parseRegionFile(String regionFile, String outputFileName)
{
File outputFile;
Configuration regionConfig = null;
if(regions.getBoolean("useworldpath", false))
{
if(new File("plugins/"+regions.getString("name", "WorldGuard"), regionFile).exists())
regionConfig = new Configuration(new File("plugins/"+regions.getString("name", "WorldGuard"), regionFile));
else if(new File("plugins/"+regions.getString("name", "WorldGuard")+"/worlds", regionFile).exists())
regionConfig = new Configuration(new File("plugins/"+regions.getString("name", "WorldGuard")+"/worlds", regionFile));
}
else
regionConfig = new Configuration(new File("plugins/"+regions.getString("name", "WorldGuard"), regionFile));
//File didn't exist
if(regionConfig == null)
return;
regionConfig.load();
outputFileName = outputFileName.substring(0, outputFileName.lastIndexOf("."))+".json";
File webWorldPath = new File(this.configuration.getString("webpath", "web")+"/standalone/", outputFileName);
Map<?, ?> regionData = (Map<?, ?>) regionConfig.getProperty(regions.getString("basenode", "regions"));
if (webWorldPath.isAbsolute())
outputFile = webWorldPath;
else {
outputFile = new File(plugin.getDataFolder(), webWorldPath.toString());
}
try {
FileOutputStream fos = new FileOutputStream(outputFile);
fos.write(Json.stringifyJson(regionData).getBytes());
fos.close();
} catch (FileNotFoundException ex) {
log.log(Level.SEVERE, "Exception while writing JSON-file.", ex);
} catch (IOException ioe) {
log.log(Level.SEVERE, "Exception while writing JSON-file.", ioe);
}
}
}

Some files were not shown because too many files have changed in this diff Show More