mirror of
https://github.com/encounter/dynmap.git
synced 2026-03-30 11:08:39 -07:00
Compare commits
271 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bf2ea7d1e3 | |||
| e25c9a82b3 | |||
| 1e3ceed5d7 | |||
| 88ff70ac48 | |||
| 84d01c530a | |||
| daa2d0f186 | |||
| 17644a5778 | |||
| 0a8f2a182a | |||
| 619485212d | |||
| 7f5d3ab23d | |||
| bb45cc10cb | |||
| c0479bff05 | |||
| cf1d6c414d | |||
| 9eab216525 | |||
| b8fe65bc99 | |||
| 1a5ddeeda5 | |||
| 5f23afe608 | |||
| 0a1de1b18e | |||
| 88db6445f9 | |||
| 6c708d1b3a | |||
| dcdfb3da5d | |||
| 95cc3ae869 | |||
| 106f95d8b6 | |||
| be60623719 | |||
| ff026e91b6 | |||
| b66be7a47c | |||
| 92e3ec5f08 | |||
| c4e1362274 | |||
| 63b9579fa5 | |||
| 5f32f8fb99 | |||
| ca9aa0727f | |||
| b3ccd203c8 | |||
| 8e59f37995 | |||
| 91b60be572 | |||
| 69fcc1706e | |||
| ab6352a17d | |||
| 631f06d091 | |||
| 8d5f081cdf | |||
| 553a956949 | |||
| d53b3bc340 | |||
| eb276dd59d | |||
| ad33ef79d9 | |||
| b47bbee4e8 | |||
| e1e13df4b2 | |||
| d4a2d2d32f | |||
| 445f37475a | |||
| 0dca8d9cfe | |||
| 060f4641d4 | |||
| f93eb8dcbc | |||
| 1cda538eef | |||
| 6622db1b2c | |||
| 6eface57ae | |||
| 7464e5b809 | |||
| 9a09cace54 | |||
| fb825daa04 | |||
| 0b421209a2 | |||
| 43bc625c08 | |||
| 43a652f15a | |||
| 649edfdc2d | |||
| 2a9b768e3f | |||
| 064f911f5a | |||
| 3c094ec87d | |||
| 2be0cd3671 | |||
| 15a8e03e9e | |||
| 777b55f27b | |||
| 09568294f3 | |||
| 394dfff8f4 | |||
| 9206fce435 | |||
| 64733202c0 | |||
| 082b3577fb | |||
| e4fa4fe015 | |||
| 2bfbaa241b | |||
| c13517949b | |||
| 79c2989b37 | |||
| 89b66613f0 | |||
| cc7b33ef47 | |||
| 954ab689e9 | |||
| 5e325d00ea | |||
| 37ad28dbcc | |||
| 3bed604190 | |||
| 550a607ec9 | |||
| 2c0717f3d9 | |||
| 105e2d1829 | |||
| e281b55c3f | |||
| 05aaa1c39d | |||
| 4d5d8d63bf | |||
| e5520934f6 | |||
| 2cef9731ed | |||
| 831fb04bae | |||
| 07cb3ad1b3 | |||
| 4a2f82a7d6 | |||
| 58060137b4 | |||
| 38e997cf37 | |||
| 6c6d29a402 | |||
| 8105a1d2a5 | |||
| 437e82387b | |||
| 5eb070cd94 | |||
| 5a878cbd0d | |||
| d5ab98deaf | |||
| 19a7dba613 | |||
| 57c952a1cd | |||
| 77cc1a70c4 | |||
| 0007acd05b | |||
| 5fa0bb1fa6 | |||
| 10e03c4219 | |||
| 47e1f20a15 | |||
| 612966734a | |||
| 70429dc5a4 | |||
| cbe562d33d | |||
| f071e12524 | |||
| 0657d9c559 | |||
| 29a3391ed8 | |||
| d296724755 | |||
| 965686d44c | |||
| d4bc0863b8 | |||
| 363339c632 | |||
| ead24cc304 | |||
| 02e0f0aa24 | |||
| d98fe89c42 | |||
| b985a55b92 | |||
| 072924a2a5 | |||
| fe0c6556ed | |||
| 07010f36ac | |||
| fe93d372ab | |||
| f4ba02cd23 | |||
| bc7ddaf9d2 | |||
| 32fdf9da86 | |||
| 689df03b78 | |||
| 3fd0ed89b0 | |||
| 1001028c2a | |||
| f3c90f0aae | |||
| 090f417f32 | |||
| 803867fbc9 | |||
| a4564889df | |||
| 8d70839d3b | |||
| b0c84234cc | |||
| 41bf56fccb | |||
| d1f280eb0f | |||
| 9ce160f1b9 | |||
| e771d94f24 | |||
| c1603f1060 | |||
| d54532d899 | |||
| f4f4a33b8b | |||
| 1755411545 | |||
| d200b0b8c5 | |||
| 9fea1eafdb | |||
| ff36e4f87a | |||
| 686331d1a5 | |||
| 0372329d06 | |||
| a04215be8f | |||
| 84b86f25a3 | |||
| 1e04d10b35 | |||
| 5778611227 | |||
| 119abb33eb | |||
| 001a865c2a | |||
| 550d6e401f | |||
| 256436f68d | |||
| 39db895b9d | |||
| e6d2c4932a | |||
| 00f55758c1 | |||
| ea64a55c04 | |||
| fcbd76c591 | |||
| 9a32485ca9 | |||
| a1d7805116 | |||
| 20e954b905 | |||
| da4c456254 | |||
| bd51387c10 | |||
| 95bf263f11 | |||
| 774e013558 | |||
| b6ec0a2955 | |||
| cdd30d95c5 | |||
| cc0bb3b509 | |||
| 1d2cce6caa | |||
| b7f6a5a39d | |||
| 1cc43637ee | |||
| da7da17235 | |||
| b99f487567 | |||
| ccf6f2ac49 | |||
| ca76b29fb9 | |||
| 40c7c9fa66 | |||
| fae5014b4e | |||
| 0fbd0c0a44 | |||
| 8d0f509bfe | |||
| 65f3ea4fe3 | |||
| b097fb8321 | |||
| feb6d65d82 | |||
| cd4027495c | |||
| 298c0f3391 | |||
| e15514291b | |||
| f80385e1af | |||
| 618d1b05c9 | |||
| aaa06bfc38 | |||
| ad07d68d7e | |||
| 02fb226350 | |||
| d7fe6072a5 | |||
| 6ab82174a5 | |||
| 83f334445b | |||
| d5bd6ff038 | |||
| 22cc46f4b8 | |||
| 77539522f0 | |||
| 2bd0052aa9 | |||
| c53e6058be | |||
| 9b604d4e75 | |||
| 9d490cbcc8 | |||
| 791341f210 | |||
| 42d07d6ca2 | |||
| 61c6f4a086 | |||
| 723e7da8d3 | |||
| d3cf795ebb | |||
| 67baf5100c | |||
| 56f126d5f2 | |||
| 10f93c02c1 | |||
| 5ddaf940ed | |||
| 7c917b729e | |||
| 00485ddcc2 | |||
| 55aeb3c583 | |||
| 1388fa11e5 | |||
| b860c7dd0e | |||
| c67b2e5cc2 | |||
| 44748d7f07 | |||
| 13099587e0 | |||
| 3916c363ae | |||
| 77d9a88868 | |||
| e1f2ca26d6 | |||
| 3c1bde1092 | |||
| f7dbc89ab4 | |||
| 909207ac26 | |||
| 99605ba433 | |||
| ada9637d72 | |||
| 2d693b1ebf | |||
| e900aca2e0 | |||
| 060d1092f9 | |||
| 38df91bafe | |||
| 18ad2e1d79 | |||
| 5fb098259a | |||
| 24c9dfed41 | |||
| a1c86bfabb | |||
| 49d45c653d | |||
| 42391cc4d5 | |||
| 3980ebefa1 | |||
| 058ab0eea7 | |||
| 6e8160e576 | |||
| 51e7420bdb | |||
| 60ea503053 | |||
| f894c4945b | |||
| 7241b2be81 | |||
| b729f28df4 | |||
| 1fc2cdb636 | |||
| b63369675d | |||
| a81665d38d | |||
| db9ced3394 | |||
| d5d737d385 | |||
| f3a1d53277 | |||
| 9a2b9ccac0 | |||
| 835e566151 | |||
| 2380325975 | |||
| 100f3e0590 | |||
| 5b0171c459 | |||
| 2fd91ef94b | |||
| 403a2acc53 | |||
| 959040e5f4 | |||
| 2f6930bc17 | |||
| fb01f6ecf7 | |||
| 29517e9a24 | |||
| d566fccb1e | |||
| b2f6ae5132 | |||
| 5c209c2a5e | |||
| fb1b5df3d0 | |||
| 38ee8657e8 | |||
| 89c8d564a4 | |||
| b31bb14452 |
@@ -1,175 +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
|
||||
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
|
||||
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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Executable → Regular
+172
-54
@@ -1,54 +1,172 @@
|
||||
# All paths in this configuration file are relative to Dynmap's data-folder: minecraft_server/plugins/dynmap/
|
||||
|
||||
# How often a tile gets rendered (in seconds).
|
||||
renderinterval: 1
|
||||
|
||||
# When enabled Dynmap will preload chunks before rendering a tile. This will avoid Dynmap rendering unloaded (=partially blue) tiles.
|
||||
# This WILL impact memory and diskio.
|
||||
loadChunks: false
|
||||
|
||||
# The path where the tile-files are placed.
|
||||
tilepath: 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
|
||||
|
||||
disabledcommands:
|
||||
- fullrender
|
||||
- fullrenderasync
|
||||
|
||||
# The maptypes Dynmap will use to render.
|
||||
maps:
|
||||
- class: org.dynmap.kzedmap.KzedMap
|
||||
renderers:
|
||||
- class: org.dynmap.kzedmap.DefaultTileRenderer
|
||||
prefix: t
|
||||
- class: org.dynmap.kzedmap.CaveTileRenderer
|
||||
prefix: ct
|
||||
|
||||
web:
|
||||
# Interval the browser should poll for updates.
|
||||
updaterate: 2000
|
||||
|
||||
showchatballoons: true
|
||||
showplayerfacesonmap: true
|
||||
showplayerfacesinmenu: true
|
||||
focuschatballoons: false
|
||||
|
||||
# The name of the map shown when opening Dynmap's page (must be in menu).
|
||||
defaultmap: defaultmap
|
||||
|
||||
# The maps shown in the menu.
|
||||
shownmaps:
|
||||
- type: KzedMapType
|
||||
name: defaultmap
|
||||
prefix: t
|
||||
- type: KzedMapType
|
||||
name: cavemap
|
||||
prefix: ct
|
||||
# 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
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
dynmap.render # Render current chunk
|
||||
dynmap.fullrender # Issue a full render
|
||||
dynmap.hide.self # Hide self from map
|
||||
dynmap.hide.others # Hide others from map
|
||||
dynmap.show.self # Reveal self on map
|
||||
dynmap.show.others # Reveal others on map
|
||||
@@ -1,10 +1,17 @@
|
||||
<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.bukkit</groupId>
|
||||
<artifactId>dynamic-map</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>DynamicMap</name>
|
||||
<url>http://www.bukkit.org</url>
|
||||
<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>
|
||||
@@ -16,9 +23,31 @@
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/package.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</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>
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||
<id>bin</id>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<fileSets>
|
||||
<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.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>configuration.txt</include></includes></fileSet>
|
||||
</fileSets>
|
||||
<files>
|
||||
<file>
|
||||
<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;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,13 @@
|
||||
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;
|
||||
}
|
||||
@@ -11,28 +15,52 @@ public class Client {
|
||||
public static class Player {
|
||||
public String type = "player";
|
||||
public String name;
|
||||
public String world;
|
||||
public double x, y, z;
|
||||
|
||||
public Player(String name, double x, double y, double z) {
|
||||
this.name = name;
|
||||
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 ChatMessage {
|
||||
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 playerName, String message) {
|
||||
this.playerName = playerName;
|
||||
this.message = 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 {
|
||||
public static class Tile extends Stamped {
|
||||
public String type = "tile";
|
||||
public String name;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package org.dynmap;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockDamageLevel;
|
||||
import org.bukkit.event.block.BlockDamageEvent;
|
||||
import org.bukkit.event.block.BlockListener;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
||||
public class DynmapBlockListener extends BlockListener {
|
||||
private MapManager mgr;
|
||||
|
||||
public DynmapBlockListener(MapManager mgr) {
|
||||
this.mgr = mgr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
Block blockPlaced = event.getBlockPlaced();
|
||||
mgr.touch(blockPlaced.getX(), blockPlaced.getY(), blockPlaced.getZ());
|
||||
}
|
||||
|
||||
public void onBlockDamage(BlockDamageEvent event) {
|
||||
if (event.getDamageLevel() == BlockDamageLevel.BROKEN) {
|
||||
Block blockBroken = event.getBlock();
|
||||
mgr.touch(blockBroken.getX(), blockBroken.getY(), blockBroken.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package org.dynmap;
|
||||
|
||||
public class DynmapChunk {
|
||||
public int x, y;
|
||||
public int x, z;
|
||||
|
||||
public DynmapChunk(int x, int y) {
|
||||
public DynmapChunk(int x, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
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()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
package org.dynmap;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerListener;
|
||||
import org.bukkit.util.config.ConfigurationNode;
|
||||
|
||||
public class DynmapPlayerListener extends PlayerListener {
|
||||
private MapManager mgr;
|
||||
private PlayerList playerList;
|
||||
private ConfigurationNode configuration;
|
||||
|
||||
public DynmapPlayerListener(MapManager mgr, PlayerList playerList, ConfigurationNode configuration) {
|
||||
this.mgr = mgr;
|
||||
this.playerList = playerList;
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerCommand(PlayerChatEvent event) {
|
||||
String[] split = event.getMessage().split(" ");
|
||||
if (split[0].equalsIgnoreCase("/dynmap")) {
|
||||
if (split.length > 1) {
|
||||
for(String s : (Iterable<String>)configuration.getProperty("disabledcommands")) {
|
||||
if (split[1].equals(s)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (split[1].equals("render")) {
|
||||
Player player = event.getPlayer();
|
||||
mgr.touch(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ());
|
||||
event.setCancelled(true);
|
||||
} else if (split[1].equals("hide")) {
|
||||
if (split.length == 2) {
|
||||
playerList.hide(event.getPlayer().getName());
|
||||
} else {
|
||||
for (int i = 2; i < split.length; i++) {
|
||||
playerList.hide(split[i]);
|
||||
}
|
||||
}
|
||||
event.setCancelled(true);
|
||||
} else if (split[1].equals("show")) {
|
||||
if (split.length == 2) {
|
||||
playerList.show(event.getPlayer().getName());
|
||||
} else {
|
||||
for (int i = 2; i < split.length; i++) {
|
||||
playerList.show(split[i]);
|
||||
}
|
||||
}
|
||||
event.setCancelled(true);
|
||||
} else if (split[1].equals("fullrender")) {
|
||||
Player player = event.getPlayer();
|
||||
mgr.renderFullWorld(player.getLocation());
|
||||
} else if (split[1].equals("fullrenderasync")) {
|
||||
Player player = event.getPlayer();
|
||||
mgr.renderFullWorldAsync(player.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a player sends a chat message
|
||||
*
|
||||
* @param event
|
||||
* Relevant event details
|
||||
*/
|
||||
public void onPlayerChat(PlayerChatEvent event) {
|
||||
mgr.updateQueue.pushUpdate(new Client.ChatMessage(event.getPlayer().getName(), event.getMessage()));
|
||||
}
|
||||
}
|
||||
@@ -1,49 +1,68 @@
|
||||
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.Server;
|
||||
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.PluginLoader;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.bukkit.util.config.Configuration;
|
||||
import org.dynmap.debug.BukkitPlayerDebugger;
|
||||
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");
|
||||
|
||||
private HttpServer webServer = null;
|
||||
private MapManager mapManager = null;
|
||||
private PlayerList playerList;
|
||||
private Configuration configuration;
|
||||
public HttpServer webServer = null;
|
||||
public MapManager mapManager = null;
|
||||
public PlayerList playerList;
|
||||
public Configuration configuration;
|
||||
public HashSet<String> enabledTriggers = new HashSet<String>();
|
||||
public PermissionProvider permissions;
|
||||
|
||||
private BukkitPlayerDebugger debugger = new BukkitPlayerDebugger(this);
|
||||
public Timer timer;
|
||||
|
||||
public static File dataRoot;
|
||||
|
||||
public DynmapPlugin(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File folder, File plugin, ClassLoader cLoader) {
|
||||
super(pluginLoader, instance, desc, folder, plugin, cLoader);
|
||||
dataRoot = folder;
|
||||
}
|
||||
|
||||
public World getWorld() {
|
||||
return getServer().getWorlds().get(0);
|
||||
}
|
||||
public static File dataDirectory;
|
||||
public static File tilesDirectory;
|
||||
|
||||
public MapManager getMapManager() {
|
||||
return mapManager;
|
||||
@@ -52,18 +71,50 @@ public class DynmapPlugin extends JavaPlugin {
|
||||
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();
|
||||
|
||||
debugger.enable();
|
||||
playerList = new PlayerList(getServer());
|
||||
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(getWorld(), debugger, configuration);
|
||||
mapManager.startManager();
|
||||
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");
|
||||
@@ -78,37 +129,279 @@ public class DynmapPlugin extends JavaPlugin {
|
||||
int port = configuration.getInt("webserver-port", 8123);
|
||||
|
||||
webServer = new HttpServer(bindAddress, port);
|
||||
webServer.handlers.put("/", new FilesystemHandler(mapManager.webDirectory));
|
||||
webServer.handlers.put("/tiles/", new FilesystemHandler(mapManager.tileDirectory));
|
||||
webServer.handlers.put("/up/", new ClientUpdateHandler(mapManager, playerList, getWorld()));
|
||||
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 + "!");
|
||||
}
|
||||
|
||||
registerEvents();
|
||||
/* Print version info */
|
||||
PluginDescriptionFile pdfFile = this.getDescription();
|
||||
log.info("[dynmap] version " + pdfFile.getVersion() + " is enabled" );
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
mapManager.stopManager();
|
||||
mapManager.stopRendering();
|
||||
|
||||
if (webServer != null) {
|
||||
webServer.shutdown();
|
||||
webServer = null;
|
||||
}
|
||||
debugger.disable();
|
||||
|
||||
if (timer != null) {
|
||||
timer.cancel();
|
||||
}
|
||||
|
||||
Debug.clearDebuggers();
|
||||
}
|
||||
|
||||
public boolean isTrigger(String s) {
|
||||
return enabledTriggers.contains(s);
|
||||
}
|
||||
|
||||
public void registerEvents() {
|
||||
BlockListener blockListener = new DynmapBlockListener(mapManager);
|
||||
getServer().getPluginManager().registerEvent(Event.Type.BLOCK_PLACED, blockListener, Priority.Normal, this);
|
||||
getServer().getPluginManager().registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Normal, this);
|
||||
final PluginManager pm = getServer().getPluginManager();
|
||||
final MapManager mm = mapManager;
|
||||
|
||||
PlayerListener playerListener = new DynmapPlayerListener(mapManager, playerList, configuration);
|
||||
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, playerListener, Priority.Normal, this);
|
||||
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Normal, this);
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package org.dynmap;
|
||||
|
||||
public interface Handler<T> {
|
||||
void handle(T t);
|
||||
}
|
||||
@@ -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
Reference in New Issue
Block a user