mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-12-01 06:33:38 +01:00
Merge remote branch 'origin/master'
This commit is contained in:
commit
3c793b5302
@ -8,7 +8,7 @@ Cobblestone
|
|||||||
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
Wooden Plank
|
Wooden Plank
|
||||||
5 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
5 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
||||||
Sappling
|
Sapling
|
||||||
6 120 120 120 0 96 96 96 0 60 60 60 0 48 48 48 0
|
6 120 120 120 0 96 96 96 0 60 60 60 0 48 48 48 0
|
||||||
Bedrock
|
Bedrock
|
||||||
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
|
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
|
||||||
@ -48,24 +48,18 @@ Sandstone
|
|||||||
24 218 210 158 255 174 168 126 255 109 105 79 255 87 84 63 255
|
24 218 210 158 255 174 168 126 255 109 105 79 255 87 84 63 255
|
||||||
Note Block
|
Note Block
|
||||||
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
Aqua Green Cloth
|
Bed
|
||||||
26 43 192 117 255 38 168 101 255 34 150 90 255 29 130 78 255
|
26 200 20 20 255 160 16 16 255 100 10 10 255 80 8 8 255
|
||||||
Cyan Cloth
|
Powered Rail
|
||||||
27 43 192 192 255 36 185 185 255 29 130 130 255 22 99 99 255
|
27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Blue Cloth
|
Detector Rail
|
||||||
28 0 0 255 255 0 0 204 255 0 0 127 255 0 0 102 255
|
28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Purple Cloth
|
Cobweb
|
||||||
29 101 101 188 255 95 95 175 255 86 86 160 255 78 78 145 255
|
30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255
|
||||||
Indigo Cloth
|
Tall Grass
|
||||||
30 113 41 186 255 99 38 165 255 85 32 142 255 72 27 119 255
|
31 97 156 53 255 73 120 38 255 38 68 16 255 26 50 9 255
|
||||||
Violet Cloth
|
Dead Shrubs
|
||||||
31 156 65 198 255 132 55 168 255 112 47 142 255 84 35 107 255
|
32 75 44 24 255 60 35 19 255 37 22 12 255 30 18 10 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
|
Wool
|
||||||
35 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
|
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:0 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
|
||||||
@ -99,8 +93,6 @@ Wool - Red
|
|||||||
35:14 143 39 36 255 114 31 28 255 71 20 18 255 57 16 14 255
|
35:14 143 39 36 255 114 31 28 255 71 20 18 255 57 16 14 255
|
||||||
Wool - Black
|
Wool - Black
|
||||||
35:15 24 20 20 255 19 16 16 255 12 10 10 255 9 8 8 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
|
Yellow Flower
|
||||||
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
|
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
|
||||||
Red Rose
|
Red Rose
|
||||||
@ -136,7 +128,7 @@ Brick
|
|||||||
TNT
|
TNT
|
||||||
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
|
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
|
||||||
Bookshelf
|
Bookshelf
|
||||||
54 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
|
47 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
|
||||||
Moss Stone
|
Moss Stone
|
||||||
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
Obsidian
|
Obsidian
|
||||||
@ -151,7 +143,8 @@ Wooden Stair
|
|||||||
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
||||||
Chest
|
Chest
|
||||||
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
Redstone Wire
|
||||||
|
55 240 30 30 64 160 20 20 64 120 15 15 64 100 12 12 64
|
||||||
Diamond Ore
|
Diamond Ore
|
||||||
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
|
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
|
||||||
Diamond Block
|
Diamond Block
|
||||||
@ -176,10 +169,16 @@ Minecart Tracks
|
|||||||
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Cobblestone Stairs
|
Cobblestone Stairs
|
||||||
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
|
Wall Sign
|
||||||
|
68 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
Lever
|
||||||
|
69 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
Stone Pressure Plate
|
||||||
|
70 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
Iron Door
|
Iron Door
|
||||||
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
|
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
|
||||||
|
Wooden Pressure Plate
|
||||||
|
72 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
Redstone Ore
|
Redstone Ore
|
||||||
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
|
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
|
||||||
Glowing Redstone Ore
|
Glowing Redstone Ore
|
||||||
@ -188,6 +187,8 @@ Redstone Torch off
|
|||||||
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
||||||
Redstone Torch on
|
Redstone Torch on
|
||||||
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
||||||
|
Stone Button
|
||||||
|
77 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
Snow
|
Snow
|
||||||
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
|
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
|
||||||
Ice
|
Ice
|
||||||
@ -218,3 +219,11 @@ Jack-o-lantern
|
|||||||
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
|
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
|
||||||
Cake Block
|
Cake Block
|
||||||
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
|
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
|
||||||
|
Redstone Repeater off
|
||||||
|
93 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
||||||
|
Redstone Repeater on
|
||||||
|
94 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
||||||
|
Locked Chest
|
||||||
|
95 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
Trap Door
|
||||||
|
96 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
@ -8,7 +8,7 @@ Cobblestone
|
|||||||
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
Wooden Plank
|
Wooden Plank
|
||||||
5 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
5 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
||||||
Sappling
|
Sapling
|
||||||
6 120 120 120 0 96 96 96 0 60 60 60 0 48 48 48 0
|
6 120 120 120 0 96 96 96 0 60 60 60 0 48 48 48 0
|
||||||
Bedrock
|
Bedrock
|
||||||
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
|
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
|
||||||
@ -48,24 +48,18 @@ Sandstone
|
|||||||
24 192 178 110 255 160 148 92 255 134 124 77 255 160 148 92 255
|
24 192 178 110 255 160 148 92 255 134 124 77 255 160 148 92 255
|
||||||
Note Block
|
Note Block
|
||||||
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
Aqua Green Cloth
|
Bed
|
||||||
26 43 192 117 255 38 168 101 255 34 150 90 255 29 130 78 255
|
26 200 20 20 255 160 16 16 255 100 10 10 255 80 8 8 255
|
||||||
Cyan Cloth
|
Powered Rail
|
||||||
27 43 192 192 255 36 185 185 255 29 130 130 255 22 99 99 255
|
27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Blue Cloth
|
Detector Rail
|
||||||
28 0 0 255 255 0 0 204 255 0 0 127 255 0 0 102 255
|
28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Purple Cloth
|
Cobweb
|
||||||
29 101 101 188 255 95 95 175 255 86 86 160 255 78 78 145 255
|
30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255
|
||||||
Indigo Cloth
|
Tall Grass
|
||||||
30 113 41 186 255 99 38 165 255 85 32 142 255 72 27 119 255
|
31 97 156 53 255 73 120 38 255 38 68 16 255 26 50 9 255
|
||||||
Violet Cloth
|
Dead Shrubs
|
||||||
31 156 65 198 255 132 55 168 255 112 47 142 255 84 35 107 255
|
32 75 44 24 255 60 35 19 255 37 22 12 255 30 18 10 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
|
Wool
|
||||||
35 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
|
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:0 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
|
||||||
@ -99,8 +93,6 @@ Wool - Red
|
|||||||
35:14 159 45 38 255 157 44 38 255 131 37 32 255 157 44 38 255
|
35:14 159 45 38 255 157 44 38 255 131 37 32 255 157 44 38 255
|
||||||
Wool - Black
|
Wool - Black
|
||||||
35:15 26 23 22 255 26 23 21 255 22 19 18 255 26 23 21 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
|
Yellow Flower
|
||||||
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
|
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
|
||||||
Red Rose
|
Red Rose
|
||||||
@ -136,7 +128,7 @@ Brick
|
|||||||
TNT
|
TNT
|
||||||
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
|
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
|
||||||
Bookshelf
|
Bookshelf
|
||||||
54 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
|
47 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
|
||||||
Moss Stone
|
Moss Stone
|
||||||
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
Obsidian
|
Obsidian
|
||||||
@ -151,7 +143,8 @@ Wooden Stair
|
|||||||
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
||||||
Chest
|
Chest
|
||||||
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
Redstone Wire
|
||||||
|
55 240 30 30 64 160 20 20 64 120 15 15 64 100 12 12 64
|
||||||
Diamond Ore
|
Diamond Ore
|
||||||
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
|
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
|
||||||
Diamond Block
|
Diamond Block
|
||||||
@ -176,10 +169,16 @@ Minecart Tracks
|
|||||||
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Cobblestone Stairs
|
Cobblestone Stairs
|
||||||
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
|
Wall Sign
|
||||||
|
68 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
Lever
|
||||||
|
69 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
Stone Pressure Plate
|
||||||
|
70 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
Iron Door
|
Iron Door
|
||||||
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
|
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
|
||||||
|
Wooden Pressure Plate
|
||||||
|
72 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
Redstone Ore
|
Redstone Ore
|
||||||
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
|
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
|
||||||
Glowing Redstone Ore
|
Glowing Redstone Ore
|
||||||
@ -188,6 +187,8 @@ Redstone Torch off
|
|||||||
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
||||||
Redstone Torch on
|
Redstone Torch on
|
||||||
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
||||||
|
Stone Button
|
||||||
|
77 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
Snow
|
Snow
|
||||||
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
|
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
|
||||||
Ice
|
Ice
|
||||||
@ -218,3 +219,11 @@ Jack-o-lantern
|
|||||||
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
|
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
|
||||||
Cake Block
|
Cake Block
|
||||||
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
|
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
|
||||||
|
Redstone Repeater off
|
||||||
|
93 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
||||||
|
Redstone Repeater on
|
||||||
|
94 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
||||||
|
Locked Chest
|
||||||
|
95 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
Trap Door
|
||||||
|
96 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
Stone
|
Stone
|
||||||
1 119 104 84 255 104 95 80 255 96 87 72 255 77 68 53 255
|
1 149 145 138 255 125 122 116 255 114 111 105 255 88 85 81 255
|
||||||
Grass
|
Grass
|
||||||
2 75 156 43 255 56 117 32 255 35 104 10 255 32 82 0 255
|
2 111 185 79 255 86 158 53 255 65 131 40 255 57 105 21 255
|
||||||
Dirt
|
Dirt
|
||||||
3 134 96 67 255 107 76 53 255 67 48 33 255 68 49 33 255
|
3 174 133 106 255 152 113 82 255 136 102 74 255 93 73 57 255
|
||||||
Cobblestone
|
Cobblestone
|
||||||
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
4 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
Wooden Plank
|
Wooden Plank
|
||||||
@ -13,15 +13,15 @@ Sappling
|
|||||||
Bedrock
|
Bedrock
|
||||||
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
|
7 84 84 84 255 67 67 67 255 42 42 42 255 33 33 33 255
|
||||||
Water
|
Water
|
||||||
8 21 88 125 80 7 70 117 80 6 68 115 80 5 53 90 80
|
8 47 116 160 80 40 100 138 80 33 92 129 80 26 74 103 80
|
||||||
Stationary Water
|
Stationary Water
|
||||||
9 21 88 125 80 7 70 117 80 6 68 115 80 5 53 90 80
|
9 47 116 160 80 40 100 138 80 33 92 129 80 26 74 103 80
|
||||||
Lava
|
Lava
|
||||||
10 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
|
10 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
|
||||||
Stationary Lava
|
Stationary Lava
|
||||||
11 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
|
11 255 90 0 255 204 72 0 255 127 45 0 255 102 36 0 255
|
||||||
Sand
|
Sand
|
||||||
12 214 182 111 255 203 171 100 255 186 154 83 255 173 141 70 255
|
12 251 240 193 255 251 223 157 255 237 202 135 255 200 168 107 255
|
||||||
Gravel
|
Gravel
|
||||||
13 136 126 126 255 108 100 100 255 68 63 63 255 54 50 50 255
|
13 136 126 126 255 108 100 100 255 68 63 63 255 54 50 50 255
|
||||||
Gold Ore
|
Gold Ore
|
||||||
@ -33,7 +33,7 @@ Coal Ore
|
|||||||
Wood
|
Wood
|
||||||
17 102 81 51 255 81 64 40 255 51 40 25 255 40 32 20 255
|
17 102 81 51 255 81 64 40 255 51 40 25 255 40 32 20 255
|
||||||
Leaves
|
Leaves
|
||||||
18 23 68 6 100 12 56 0 100 6 52 0 100 0 42 0 100
|
18 47 99 32 255 34 86 20 255 24 66 14 255 23 57 13 255
|
||||||
Sponge
|
Sponge
|
||||||
19 193 193 65 255 174 174 47 255 97 97 5 255 76 76 20 255
|
19 193 193 65 255 174 174 47 255 97 97 5 255 76 76 20 255
|
||||||
Glass
|
Glass
|
||||||
@ -45,27 +45,21 @@ Lapis Lazuli Block
|
|||||||
Dispenser
|
Dispenser
|
||||||
23 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
|
23 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
|
||||||
Sandstone
|
Sandstone
|
||||||
24 214 182 111 255 203 171 100 255 186 154 83 255 173 141 70 255
|
24 251 240 193 255 251 223 157 255 237 202 135 255 200 168 107 255
|
||||||
Note Block
|
Note Block
|
||||||
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
Aqua Green Cloth
|
Bed
|
||||||
26 43 192 117 255 38 168 101 255 34 150 90 255 29 130 78 255
|
26 200 20 20 255 160 16 16 255 100 10 10 255 80 8 8 255
|
||||||
Cyan Cloth
|
Powered Rail
|
||||||
27 43 192 192 255 36 185 185 255 29 130 130 255 22 99 99 255
|
27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Blue Cloth
|
Detector Rail
|
||||||
28 0 0 255 255 0 0 204 255 0 0 127 255 0 0 102 255
|
28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Purple Cloth
|
Cobweb
|
||||||
29 101 101 188 255 95 95 175 255 86 86 160 255 78 78 145 255
|
30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255
|
||||||
Indigo Cloth
|
Tall Grass
|
||||||
30 113 41 186 255 99 38 165 255 85 32 142 255 72 27 119 255
|
31 111 185 79 255 86 158 53 255 65 131 40 255 57 105 21 255
|
||||||
Violet Cloth
|
Dead Shrubs
|
||||||
31 156 65 198 255 132 55 168 255 112 47 142 255 84 35 107 255
|
32 75 44 24 255 60 35 19 255 37 22 12 255 30 18 10 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
|
Wool
|
||||||
35 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
|
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:0 222 222 222 255 177 177 177 255 111 111 111 255 88 88 88 255
|
||||||
@ -99,8 +93,6 @@ Wool - Red
|
|||||||
35:14 143 39 36 255 114 31 28 255 71 20 18 255 57 16 14 255
|
35:14 143 39 36 255 114 31 28 255 71 20 18 255 57 16 14 255
|
||||||
Wool - Black
|
Wool - Black
|
||||||
35:15 24 20 20 255 19 16 16 255 12 10 10 255 9 8 8 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
|
Yellow Flower
|
||||||
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
|
37 255 255 0 255 204 204 0 255 127 127 0 255 102 102 0 255
|
||||||
Red Rose
|
Red Rose
|
||||||
@ -117,7 +109,7 @@ Double Stone Slab
|
|||||||
43 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
43 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
||||||
43:0 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
43:0 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
||||||
Double Stone Slab - Sandstone
|
Double Stone Slab - Sandstone
|
||||||
43:1 214 182 111 255 203 171 100 255 186 154 83 255 173 141 70 255
|
43:1 218 210 158 255 174 168 126 255 109 105 79 255 87 84 63 255
|
||||||
Double Stone Slab - Wood
|
Double Stone Slab - Wood
|
||||||
43:2 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
43:2 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
||||||
Double Stone Slab - Cobblestone
|
Double Stone Slab - Cobblestone
|
||||||
@ -126,7 +118,7 @@ Stone Slab
|
|||||||
44 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
44 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
||||||
44:0 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
44:0 200 200 200 255 160 160 160 255 100 100 100 255 80 80 80 255
|
||||||
Stone Slab - Sandstone
|
Stone Slab - Sandstone
|
||||||
44:1 214 182 111 255 203 171 100 255 186 154 83 255 173 141 70 255
|
44:1 218 210 158 255 174 168 126 255 109 105 79 255 87 84 63 255
|
||||||
Stone Slab - Wood
|
Stone Slab - Wood
|
||||||
44:2 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
44:2 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
||||||
Stone Slab - Cobblestone
|
Stone Slab - Cobblestone
|
||||||
@ -136,13 +128,13 @@ Brick
|
|||||||
TNT
|
TNT
|
||||||
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
|
46 160 83 65 255 128 66 52 255 80 41 32 255 64 33 26 255
|
||||||
Bookshelf
|
Bookshelf
|
||||||
54 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
|
47 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
|
||||||
Moss Stone
|
Moss Stone
|
||||||
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
48 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
Obsidian
|
Obsidian
|
||||||
49 26 11 43 255 20 8 34 255 13 5 21 255 10 4 17 255
|
49 26 11 43 255 20 8 34 255 13 5 21 255 10 4 17 255
|
||||||
Torch
|
Torch
|
||||||
50 159 127 80 255 98 88 20 0 245 220 50 255 196 176 40 0
|
50 103 80 45 255 98 88 20 0 255 249 79 255 196 176 40 0
|
||||||
Fire
|
Fire
|
||||||
51 255 170 30 200 204 136 24 200 127 85 15 200 102 68 12 200
|
51 255 170 30 200 204 136 24 200 127 85 15 200 102 68 12 200
|
||||||
Monster Spawner
|
Monster Spawner
|
||||||
@ -151,7 +143,8 @@ Wooden Stair
|
|||||||
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
53 157 128 79 255 125 102 63 255 78 64 39 255 62 51 31 255
|
||||||
Chest
|
Chest
|
||||||
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
54 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
Redstone Wire
|
||||||
|
55 240 30 30 64 160 20 20 64 120 15 15 64 100 12 12 64
|
||||||
Diamond Ore
|
Diamond Ore
|
||||||
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
|
56 129 140 143 255 103 112 114 255 64 70 71 255 51 56 57 255
|
||||||
Diamond Block
|
Diamond Block
|
||||||
@ -176,10 +169,16 @@ Minecart Tracks
|
|||||||
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
66 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
Cobblestone Stairs
|
Cobblestone Stairs
|
||||||
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
67 115 115 115 255 92 92 92 255 57 57 57 255 46 46 46 255
|
||||||
|
Wall Sign
|
||||||
|
68 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
Lever
|
||||||
|
69 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
Stone Pressure Plate
|
||||||
|
70 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
Iron Door
|
Iron Door
|
||||||
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
|
71 191 191 191 255 152 152 152 255 95 95 95 255 76 76 76 255
|
||||||
|
Wooden Pressure Plate
|
||||||
|
72 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
Redstone Ore
|
Redstone Ore
|
||||||
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
|
73 131 107 107 255 104 85 85 255 65 53 53 255 52 42 42 255
|
||||||
Glowing Redstone Ore
|
Glowing Redstone Ore
|
||||||
@ -188,10 +187,12 @@ Redstone Torch off
|
|||||||
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
75 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
||||||
Redstone Torch on
|
Redstone Torch on
|
||||||
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
76 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
||||||
|
Stone Button
|
||||||
|
77 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
Snow
|
Snow
|
||||||
78 255 255 255 255 204 204 204 255 127 127 127 255 102 102 102 255
|
78 255 255 255 255 252 253 253 255 198 220 225 255 129 179 190 255
|
||||||
Ice
|
Ice
|
||||||
79 83 113 163 51 66 90 130 51 41 56 81 51 33 45 65 51
|
79 182 211 235 150 164 189 211 150 138 177 211 150 128 165 196 150
|
||||||
Snow Block
|
Snow Block
|
||||||
80 250 250 250 255 200 200 200 255 125 125 125 255 100 100 100 255
|
80 250 250 250 255 200 200 200 255 125 125 125 255 100 100 100 255
|
||||||
Cactus
|
Cactus
|
||||||
@ -218,3 +219,12 @@ Jack-o-lantern
|
|||||||
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
|
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
|
||||||
Cake Block
|
Cake Block
|
||||||
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
|
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
|
||||||
|
Redstone Repeater off
|
||||||
|
93 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
||||||
|
Redstone Repeater on
|
||||||
|
94 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
||||||
|
Locked Chest
|
||||||
|
95 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
Trap Door
|
||||||
|
96 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
|
||||||
|
@ -15,8 +15,19 @@
|
|||||||
16 56 60 70 255 46 50 58 255 39 42 49 255 46 50 58 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
|
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
|
18 27 69 37 180 22 57 31 180 19 48 25 180 22 57 31 180
|
||||||
|
19 193 193 65 255 174 174 47 255 97 97 5 255 76 76 20 255
|
||||||
20 178 217 223 90 148 181 186 90 124 151 155 90 148 181 186 90
|
20 178 217 223 90 148 181 186 90 124 151 155 90 148 181 186 90
|
||||||
|
21 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
|
||||||
|
22 23 68 196 255 18 56 158 255 14 43 122 255 14 43 78 255
|
||||||
|
23 96 96 96 255 76 76 76 255 48 48 48 255 38 38 38 255
|
||||||
24 192 178 110 255 160 148 92 255 134 124 77 255 160 148 92 255
|
24 192 178 110 255 160 148 92 255 134 124 77 255 160 148 92 255
|
||||||
|
25 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
26 200 20 20 255 160 16 16 255 100 10 10 255 80 8 8 255
|
||||||
|
27 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
|
28 150 134 102 180 120 107 81 180 75 67 51 180 60 53 40 180
|
||||||
|
30 138 145 145 255 110 115 115 255 69 72 72 255 55 57 57 255
|
||||||
|
31 97 156 53 255 73 120 38 255 38 68 16 255 26 50 9 255
|
||||||
|
32 75 44 24 255 60 35 19 255 37 22 12 255 30 18 10 255
|
||||||
35 247 255 239 255 244 251 236 255 204 210 197 255 244 251 236 255
|
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: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:1 227 128 52 255 224 126 51 255 187 105 42 255 224 126 51 255
|
||||||
@ -34,7 +45,6 @@
|
|||||||
35:13 54 77 22 255 54 76 22 255 45 63 19 255 54 76 22 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: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
|
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
|
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
|
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
|
39 184 144 0 254 153 119 0 254 128 100 0 254 153 119 0 254
|
||||||
@ -53,6 +63,7 @@
|
|||||||
44:3 118 112 96 255 98 93 80 255 82 78 67 255 98 93 80 255
|
44:3 118 112 96 255 98 93 80 255 82 78 67 255 98 93 80 255
|
||||||
45 230 103 73 255 192 86 61 255 160 71 50 255 192 86 61 255
|
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
|
46 255 79 30 255 231 72 27 255 193 60 22 255 231 72 27 255
|
||||||
|
47 125 91 38 192 100 72 30 192 62 45 19 192 50 36 15 192
|
||||||
48 96 108 70 255 80 90 58 255 67 75 49 255 80 90 58 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
|
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
|
50 255 203 58 200 255 203 58 200 212 169 48 200 255 203 58 200
|
||||||
@ -73,11 +84,16 @@
|
|||||||
65 144 128 99 32 120 106 82 32 100 89 69 32 120 106 82 32
|
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
|
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
|
67 115 107 93 255 96 89 78 255 80 75 65 255 96 89 78 255
|
||||||
|
68 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
69 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
|
70 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
71 255 255 255 255 229 229 229 255 191 191 191 255 229 229 229 255
|
71 255 255 255 255 229 229 229 255 191 191 191 255 229 229 229 255
|
||||||
|
72 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
||||||
73 174 107 107 255 145 89 89 255 121 75 75 255 145 89 89 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
|
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
|
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
|
76 255 0 0 254 255 0 0 254 212 0 0 254 255 0 0 254
|
||||||
|
77 120 120 120 255 96 96 96 255 60 60 60 255 48 48 48 255
|
||||||
78 237 248 255 254 237 248 255 254 198 207 212 254 237 248 255 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
|
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
|
80 237 248 255 255 237 248 255 255 198 207 212 255 237 248 255 255
|
||||||
@ -86,3 +102,14 @@
|
|||||||
83 136 167 74 255 114 139 62 255 95 116 52 255 114 139 62 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
|
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
|
85 115 99 63 255 96 82 52 255 80 69 44 255 96 82 52 255
|
||||||
|
86 255 115 0 200 204 92 0 200 126 57 0 200 102 46 0 200
|
||||||
|
87 166 89 89 255 141 80 62 255 135 15 15 255 96 6 6 255
|
||||||
|
88 133 109 94 255 121 97 82 255 90 70 57 255 79 59 46 255
|
||||||
|
89 249 212 156 255 255 188 94 255 192 143 70 255 122 91 44 255
|
||||||
|
90 140 0 196 128 120 0 196 128 140 0 196 128 120 0 196 128
|
||||||
|
91 255 115 0 255 204 92 0 255 126 57 0 255 102 46 0 255
|
||||||
|
92 234 234 234 255 210 210 210 255 203 203 203 255 190 190 190 255
|
||||||
|
93 159 127 80 255 72 56 25 0 181 140 64 255 144 112 51 0
|
||||||
|
94 159 127 80 255 102 0 0 0 255 0 0 255 204 0 0 0
|
||||||
|
95 125 91 38 255 100 72 30 255 62 45 19 255 50 36 15 255
|
||||||
|
96 111 91 54 255 88 72 43 255 55 45 27 255 44 36 21 255
|
@ -130,6 +130,8 @@ templates:
|
|||||||
# To render a world as a "night view", set shadowstrength and ambientlight
|
# To render a world as a "night view", set shadowstrength and ambientlight
|
||||||
# shadowstrength: 1.0
|
# shadowstrength: 1.0
|
||||||
# ambientlight: 4
|
# ambientlight: 4
|
||||||
|
# Option to turn on transparency support (off by default) - slows render
|
||||||
|
# transparency: true
|
||||||
- class: org.dynmap.kzedmap.KzedMap
|
- class: org.dynmap.kzedmap.KzedMap
|
||||||
renderers:
|
renderers:
|
||||||
- class: org.dynmap.kzedmap.DefaultTileRenderer
|
- class: org.dynmap.kzedmap.DefaultTileRenderer
|
||||||
@ -144,6 +146,8 @@ templates:
|
|||||||
# ambientlight: 4
|
# ambientlight: 4
|
||||||
# To render both night and day versions of tiles (when ambientlight is set), set true
|
# To render both night and day versions of tiles (when ambientlight is set), set true
|
||||||
# night-and-day: true
|
# night-and-day: true
|
||||||
|
# Option to turn off transparency support (on by default) - speeds render
|
||||||
|
# transparency: false
|
||||||
# Sets the icon to 'images/block_custom.png'
|
# Sets the icon to 'images/block_custom.png'
|
||||||
# icon: custom
|
# icon: custom
|
||||||
#- class: org.dynmap.kzedmap.HighlightTileRenderer
|
#- class: org.dynmap.kzedmap.HighlightTileRenderer
|
||||||
@ -214,6 +218,8 @@ worlds:
|
|||||||
# # To render a world as a "night view", set shadowstrength and ambientlight
|
# # To render a world as a "night view", set shadowstrength and ambientlight
|
||||||
# # shadowstrength: 1.0
|
# # shadowstrength: 1.0
|
||||||
# # ambientlight: 4
|
# # ambientlight: 4
|
||||||
|
# # Option to turn on transparency support (off by default) - slows render
|
||||||
|
# # transparency: true
|
||||||
# - class: org.dynmap.kzedmap.KzedMap
|
# - class: org.dynmap.kzedmap.KzedMap
|
||||||
# renderers:
|
# renderers:
|
||||||
# - class: org.dynmap.kzedmap.DefaultTileRenderer
|
# - class: org.dynmap.kzedmap.DefaultTileRenderer
|
||||||
@ -228,6 +234,8 @@ worlds:
|
|||||||
# # ambientlight: 4
|
# # ambientlight: 4
|
||||||
# # To render both night and day versions of tiles (when ambientlight is set), set true
|
# # To render both night and day versions of tiles (when ambientlight is set), set true
|
||||||
# # night-and-day: true
|
# # night-and-day: true
|
||||||
|
# # Option to turn off transparency support (on by default) - speeds render
|
||||||
|
# # transparency: false
|
||||||
# # Sets the icon to 'images/block_custom.png'
|
# # Sets the icon to 'images/block_custom.png'
|
||||||
# # icon: custom
|
# # icon: custom
|
||||||
# #- class: org.dynmap.kzedmap.HighlightTileRenderer
|
# #- class: org.dynmap.kzedmap.HighlightTileRenderer
|
||||||
|
@ -27,6 +27,7 @@ import org.dynmap.debug.Debug;
|
|||||||
import org.dynmap.kzedmap.KzedMap;
|
import org.dynmap.kzedmap.KzedMap;
|
||||||
import org.dynmap.kzedmap.KzedMap.KzedBufferedImage;
|
import org.dynmap.kzedmap.KzedMap.KzedBufferedImage;
|
||||||
import org.dynmap.MapChunkCache;
|
import org.dynmap.MapChunkCache;
|
||||||
|
import org.dynmap.utils.FileLockManager;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
public class FlatMap extends MapType {
|
public class FlatMap extends MapType {
|
||||||
@ -37,6 +38,7 @@ public class FlatMap extends MapType {
|
|||||||
private int ambientlight = 15;;
|
private int ambientlight = 15;;
|
||||||
private int shadowscale[] = null;
|
private int shadowscale[] = null;
|
||||||
private boolean night_and_day; /* If true, render both day (prefix+'-day') and night (prefix) tiles */
|
private boolean night_and_day; /* If true, render both day (prefix+'-day') and night (prefix) tiles */
|
||||||
|
protected boolean transparency;
|
||||||
|
|
||||||
public FlatMap(ConfigurationNode configuration) {
|
public FlatMap(ConfigurationNode configuration) {
|
||||||
this.configuration = configuration;
|
this.configuration = configuration;
|
||||||
@ -68,6 +70,7 @@ public class FlatMap extends MapType {
|
|||||||
ambientlight = Integer.parseInt(String.valueOf(o));
|
ambientlight = Integer.parseInt(String.valueOf(o));
|
||||||
}
|
}
|
||||||
night_and_day = configuration.getBoolean("night-and-day", false);
|
night_and_day = configuration.getBoolean("night-and-day", false);
|
||||||
|
transparency = configuration.getBoolean("transparency", false); /* Default off */
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -114,8 +117,8 @@ public class FlatMap extends MapType {
|
|||||||
|
|
||||||
boolean rendered = false;
|
boolean rendered = false;
|
||||||
Color rslt = new Color();
|
Color rslt = new Color();
|
||||||
int[] pixel = new int[3];
|
int[] pixel = new int[4];
|
||||||
int[] pixel_day = new int[3];
|
int[] pixel_day = null;
|
||||||
KzedBufferedImage im = KzedMap.allocateBufferedImage(t.size, t.size);
|
KzedBufferedImage im = KzedMap.allocateBufferedImage(t.size, t.size);
|
||||||
int[] argb_buf = im.argb_buf;
|
int[] argb_buf = im.argb_buf;
|
||||||
KzedBufferedImage im_day = null;
|
KzedBufferedImage im_day = null;
|
||||||
@ -123,6 +126,7 @@ public class FlatMap extends MapType {
|
|||||||
if(night_and_day) {
|
if(night_and_day) {
|
||||||
im_day = KzedMap.allocateBufferedImage(t.size, t.size);
|
im_day = KzedMap.allocateBufferedImage(t.size, t.size);
|
||||||
argb_buf_day = im_day.argb_buf;
|
argb_buf_day = im_day.argb_buf;
|
||||||
|
pixel_day = new int[4];
|
||||||
}
|
}
|
||||||
MapChunkCache.MapIterator mapiter = cache.getIterator(t.x * t.size, 127, t.y * t.size);
|
MapChunkCache.MapIterator mapiter = cache.getIterator(t.x * t.size, 127, t.y * t.size);
|
||||||
for (int x = 0; x < t.size; x++) {
|
for (int x = 0; x < t.size; x++) {
|
||||||
@ -177,20 +181,27 @@ public class FlatMap extends MapType {
|
|||||||
pixel[0] = c.getRed();
|
pixel[0] = c.getRed();
|
||||||
pixel[1] = c.getGreen();
|
pixel[1] = c.getGreen();
|
||||||
pixel[2] = c.getBlue();
|
pixel[2] = c.getBlue();
|
||||||
|
pixel[3] = c.getAlpha();
|
||||||
|
|
||||||
|
/* If transparency needed, process it */
|
||||||
|
if(transparency && (pixel[3] < 255)) {
|
||||||
|
process_transparent(pixel, pixel_day, mapiter);
|
||||||
|
}
|
||||||
/* If ambient light less than 15, do scaling */
|
/* If ambient light less than 15, do scaling */
|
||||||
if((shadowscale != null) && (ambientlight < 15)) {
|
else if((shadowscale != null) && (ambientlight < 15)) {
|
||||||
if(mapiter.y < 127)
|
if(mapiter.y < 127)
|
||||||
mapiter.incrementY();
|
mapiter.incrementY();
|
||||||
if(night_and_day) { /* Use unscaled color for day (no shadows from above) */
|
if(night_and_day) { /* Use unscaled color for day (no shadows from above) */
|
||||||
pixel_day[0] = pixel[0];
|
pixel_day[0] = pixel[0];
|
||||||
pixel_day[1] = pixel[1];
|
pixel_day[1] = pixel[1];
|
||||||
pixel_day[2] = pixel[2];
|
pixel_day[2] = pixel[2];
|
||||||
|
pixel_day[3] = 255;
|
||||||
}
|
}
|
||||||
int light = Math.max(ambientlight, mapiter.getBlockEmittedLight());
|
int light = Math.max(ambientlight, mapiter.getBlockEmittedLight());
|
||||||
pixel[0] = (pixel[0] * shadowscale[light]) >> 8;
|
pixel[0] = (pixel[0] * shadowscale[light]) >> 8;
|
||||||
pixel[1] = (pixel[1] * shadowscale[light]) >> 8;
|
pixel[1] = (pixel[1] * shadowscale[light]) >> 8;
|
||||||
pixel[2] = (pixel[2] * shadowscale[light]) >> 8;
|
pixel[2] = (pixel[2] * shadowscale[light]) >> 8;
|
||||||
|
pixel[3] = 255;
|
||||||
}
|
}
|
||||||
else { /* Only do height keying if we're not messing with ambient light */
|
else { /* Only do height keying if we're not messing with ambient light */
|
||||||
boolean below = mapiter.y < 64;
|
boolean below = mapiter.y < 64;
|
||||||
@ -214,28 +225,32 @@ public class FlatMap extends MapType {
|
|||||||
pixel[0] -= pixel[0] * scale;
|
pixel[0] -= pixel[0] * scale;
|
||||||
pixel[1] -= pixel[1] * scale;
|
pixel[1] -= pixel[1] * scale;
|
||||||
pixel[2] -= pixel[2] * scale;
|
pixel[2] -= pixel[2] * scale;
|
||||||
|
pixel[3] = 255;
|
||||||
} else {
|
} else {
|
||||||
pixel[0] += (255-pixel[0]) * scale;
|
pixel[0] += (255-pixel[0]) * scale;
|
||||||
pixel[1] += (255-pixel[1]) * scale;
|
pixel[1] += (255-pixel[1]) * scale;
|
||||||
pixel[2] += (255-pixel[2]) * scale;
|
pixel[2] += (255-pixel[2]) * scale;
|
||||||
|
pixel[3] = 255;
|
||||||
}
|
}
|
||||||
if(night_and_day) {
|
if(night_and_day) {
|
||||||
pixel_day[0] = pixel[0];
|
pixel_day[0] = pixel[0];
|
||||||
pixel_day[1] = pixel[1];
|
pixel_day[1] = pixel[1];
|
||||||
pixel_day[2] = pixel[2];
|
pixel_day[2] = pixel[2];
|
||||||
|
pixel_day[3] = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
rslt.setRGBA(pixel[0], pixel[1], pixel[2], 255);
|
rslt.setRGBA(pixel[0], pixel[1], pixel[2], pixel[3]);
|
||||||
argb_buf[(t.size-y-1) + (x*t.size)] = rslt.getARGB();
|
argb_buf[(t.size-y-1) + (x*t.size)] = rslt.getARGB();
|
||||||
if(night_and_day) {
|
if(night_and_day) {
|
||||||
rslt.setRGBA(pixel_day[0], pixel_day[1], pixel_day[2], 255);
|
rslt.setRGBA(pixel_day[0], pixel_day[1], pixel_day[2], pixel[3]);
|
||||||
argb_buf_day[(t.size-y-1) + (x*t.size)] = rslt.getARGB();
|
argb_buf_day[(t.size-y-1) + (x*t.size)] = rslt.getARGB();
|
||||||
}
|
}
|
||||||
rendered = true;
|
rendered = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Test to see if we're unchanged from older tile */
|
/* Test to see if we're unchanged from older tile */
|
||||||
|
FileLockManager.getWriteLock(outputFile);
|
||||||
TileHashManager hashman = MapManager.mapman.hashman;
|
TileHashManager hashman = MapManager.mapman.hashman;
|
||||||
long crc = hashman.calculateTileHash(argb_buf);
|
long crc = hashman.calculateTileHash(argb_buf);
|
||||||
boolean tile_update = false;
|
boolean tile_update = false;
|
||||||
@ -257,12 +272,13 @@ public class FlatMap extends MapType {
|
|||||||
Debug.debug("skipping image " + outputFile.getPath() + " - hash match");
|
Debug.debug("skipping image " + outputFile.getPath() + " - hash match");
|
||||||
}
|
}
|
||||||
KzedMap.freeBufferedImage(im);
|
KzedMap.freeBufferedImage(im);
|
||||||
|
FileLockManager.releaseWriteLock(outputFile);
|
||||||
MapManager.mapman.updateStatistics(tile, null, true, tile_update, !rendered);
|
MapManager.mapman.updateStatistics(tile, null, true, tile_update, !rendered);
|
||||||
|
|
||||||
/* If day too, handle it */
|
/* If day too, handle it */
|
||||||
if(night_and_day) {
|
if(night_and_day) {
|
||||||
File dayfile = new File(outputFile.getParent(), tile.getDayFilename());
|
File dayfile = new File(outputFile.getParent(), tile.getDayFilename());
|
||||||
|
FileLockManager.getWriteLock(dayfile);
|
||||||
crc = hashman.calculateTileHash(argb_buf_day);
|
crc = hashman.calculateTileHash(argb_buf_day);
|
||||||
if((!dayfile.exists()) || (crc != hashman.getImageHashCode(tile.getKey(), "day", t.x, t.y))) {
|
if((!dayfile.exists()) || (crc != hashman.getImageHashCode(tile.getKey(), "day", t.x, t.y))) {
|
||||||
Debug.debug("saving image " + dayfile.getPath());
|
Debug.debug("saving image " + dayfile.getPath());
|
||||||
@ -282,11 +298,84 @@ public class FlatMap extends MapType {
|
|||||||
tile_update = false;
|
tile_update = false;
|
||||||
}
|
}
|
||||||
KzedMap.freeBufferedImage(im_day);
|
KzedMap.freeBufferedImage(im_day);
|
||||||
|
FileLockManager.releaseWriteLock(dayfile);
|
||||||
MapManager.mapman.updateStatistics(tile, "day", true, tile_update, !rendered);
|
MapManager.mapman.updateStatistics(tile, "day", true, tile_update, !rendered);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rendered;
|
return rendered;
|
||||||
}
|
}
|
||||||
|
private void process_transparent(int[] pixel, int[] pixel_day, MapChunkCache.MapIterator mapiter) {
|
||||||
|
int r = pixel[0], g = pixel[1], b = pixel[2], a = pixel[3];
|
||||||
|
int r_day = 0, g_day = 0, b_day = 0, a_day = 0;
|
||||||
|
if(pixel_day != null) {
|
||||||
|
r_day = pixel[0]; g_day = pixel[1]; b_day = pixel[2]; a_day = pixel[3];
|
||||||
|
}
|
||||||
|
/* Scale alpha to be proportional to iso view (where we go through 4 blocks to go sqrt(6) or 2.45 units of distance */
|
||||||
|
if(a < 255)
|
||||||
|
a = a_day = 255 - ((255-a)*(255-a) >> 8);
|
||||||
|
/* Handle lighting on cube */
|
||||||
|
if((shadowscale != null) && (ambientlight < 15)) {
|
||||||
|
boolean did_inc = false;
|
||||||
|
if(mapiter.y < 127) {
|
||||||
|
mapiter.incrementY();
|
||||||
|
did_inc = true;
|
||||||
|
}
|
||||||
|
if(night_and_day) { /* Use unscaled color for day (no shadows from above) */
|
||||||
|
r_day = r; g_day = g; b_day = b; a_day = a;
|
||||||
|
}
|
||||||
|
int light = Math.max(ambientlight, mapiter.getBlockEmittedLight());
|
||||||
|
r = (r * shadowscale[light]) >> 8;
|
||||||
|
g = (g * shadowscale[light]) >> 8;
|
||||||
|
b = (b * shadowscale[light]) >> 8;
|
||||||
|
if(did_inc)
|
||||||
|
mapiter.decrementY();
|
||||||
|
}
|
||||||
|
if(a < 255) { /* If not opaque */
|
||||||
|
pixel[0] = pixel[1] = pixel[2] = pixel[3] = 0;
|
||||||
|
if(pixel_day != null)
|
||||||
|
pixel_day[0] = pixel_day[1] = pixel_day[2] = pixel_day[3] = 0;
|
||||||
|
mapiter.decrementY();
|
||||||
|
if(mapiter.y >= 0) {
|
||||||
|
int blockType = mapiter.getBlockTypeID();
|
||||||
|
int data = 0;
|
||||||
|
Color[] colors = colorScheme.colors[blockType];
|
||||||
|
if(colorScheme.datacolors[blockType] != null) {
|
||||||
|
data = mapiter.getBlockData();
|
||||||
|
colors = colorScheme.datacolors[blockType][data];
|
||||||
|
}
|
||||||
|
if (colors != null) {
|
||||||
|
Color c = colors[0];
|
||||||
|
if (c != null) {
|
||||||
|
pixel[0] = c.getRed();
|
||||||
|
pixel[1] = c.getGreen();
|
||||||
|
pixel[2] = c.getBlue();
|
||||||
|
pixel[3] = c.getAlpha();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Recurse to resolve color here */
|
||||||
|
process_transparent(pixel, pixel_day, mapiter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Blend colors from behind block and block, based on alpha */
|
||||||
|
r *= a;
|
||||||
|
g *= a;
|
||||||
|
b *= a;
|
||||||
|
int na = 255 - a;
|
||||||
|
pixel[0] = (pixel[0] * na + r) >> 8;
|
||||||
|
pixel[1] = (pixel[1] * na + g) >> 8;
|
||||||
|
pixel[2] = (pixel[2] * na + b) >> 8;
|
||||||
|
pixel[3] = 255;
|
||||||
|
if(pixel_day != null) {
|
||||||
|
r_day *= a_day;
|
||||||
|
g_day *= a_day;
|
||||||
|
b_day *= a_day;
|
||||||
|
na = 255 - a_day;
|
||||||
|
pixel_day[0] = (pixel_day[0] * na + r_day) >> 8;
|
||||||
|
pixel_day[1] = (pixel_day[1] * na + g_day) >> 8;
|
||||||
|
pixel_day[2] = (pixel_day[2] * na + b_day) >> 8;
|
||||||
|
pixel_day[3] = 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return prefix;
|
return prefix;
|
||||||
|
@ -20,6 +20,7 @@ import org.dynmap.TileHashManager;
|
|||||||
import org.dynmap.debug.Debug;
|
import org.dynmap.debug.Debug;
|
||||||
import org.dynmap.MapChunkCache;
|
import org.dynmap.MapChunkCache;
|
||||||
import org.dynmap.kzedmap.KzedMap.KzedBufferedImage;
|
import org.dynmap.kzedmap.KzedMap.KzedBufferedImage;
|
||||||
|
import org.dynmap.utils.FileLockManager;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
public class DefaultTileRenderer implements MapTileRenderer {
|
public class DefaultTileRenderer implements MapTileRenderer {
|
||||||
@ -35,6 +36,7 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
protected int shadowscale[]; /* index=skylight level, value = 256 * scaling value */
|
protected int shadowscale[]; /* index=skylight level, value = 256 * scaling value */
|
||||||
protected int lightscale[]; /* scale skylight level (light = lightscale[skylight] */
|
protected int lightscale[]; /* scale skylight level (light = lightscale[skylight] */
|
||||||
protected boolean night_and_day; /* If true, render both day (prefix+'-day') and night (prefix) tiles */
|
protected boolean night_and_day; /* If true, render both day (prefix+'-day') and night (prefix) tiles */
|
||||||
|
protected boolean transparency; /* Is transparency support active? */
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
@ -77,6 +79,7 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
}
|
}
|
||||||
colorScheme = ColorScheme.getScheme((String)configuration.get("colorscheme"));
|
colorScheme = ColorScheme.getScheme((String)configuration.get("colorscheme"));
|
||||||
night_and_day = configuration.getBoolean("night-and-day", false);
|
night_and_day = configuration.getBoolean("night-and-day", false);
|
||||||
|
transparency = configuration.getBoolean("transparency", true); /* Default on */
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean render(MapChunkCache cache, KzedMapTile tile, File outputFile) {
|
public boolean render(MapChunkCache cache, KzedMapTile tile, File outputFile) {
|
||||||
@ -228,6 +231,7 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
int oy = (mtile.py == zmtile.getTileY())?0:KzedMap.tileHeight/2;
|
int oy = (mtile.py == zmtile.getTileY())?0:KzedMap.tileHeight/2;
|
||||||
|
|
||||||
/* Test to see if we're unchanged from older tile */
|
/* Test to see if we're unchanged from older tile */
|
||||||
|
FileLockManager.getWriteLock(fname);
|
||||||
TileHashManager hashman = MapManager.mapman.hashman;
|
TileHashManager hashman = MapManager.mapman.hashman;
|
||||||
long crc = hashman.calculateTileHash(img.argb_buf);
|
long crc = hashman.calculateTileHash(img.argb_buf);
|
||||||
boolean updated_fname = false;
|
boolean updated_fname = false;
|
||||||
@ -247,6 +251,7 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
updated_fname = true;
|
updated_fname = true;
|
||||||
}
|
}
|
||||||
KzedMap.freeBufferedImage(img);
|
KzedMap.freeBufferedImage(img);
|
||||||
|
FileLockManager.releaseWriteLock(fname);
|
||||||
MapManager.mapman.updateStatistics(mtile, null, true, updated_fname, !rendered);
|
MapManager.mapman.updateStatistics(mtile, null, true, updated_fname, !rendered);
|
||||||
|
|
||||||
mtile.file = fname;
|
mtile.file = fname;
|
||||||
@ -254,6 +259,7 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
boolean updated_dfname = false;
|
boolean updated_dfname = false;
|
||||||
File dfname = new File(fname.getParent(), mtile.getDayFilename());
|
File dfname = new File(fname.getParent(), mtile.getDayFilename());
|
||||||
if(img_day != null) {
|
if(img_day != null) {
|
||||||
|
FileLockManager.getWriteLock(dfname);
|
||||||
crc = hashman.calculateTileHash(img.argb_buf);
|
crc = hashman.calculateTileHash(img.argb_buf);
|
||||||
if((!dfname.exists()) || (crc != hashman.getImageHashCode(mtile.getKey(), "day", tx, ty))) {
|
if((!dfname.exists()) || (crc != hashman.getImageHashCode(mtile.getKey(), "day", tx, ty))) {
|
||||||
Debug.debug("saving image " + dfname.getPath());
|
Debug.debug("saving image " + dfname.getPath());
|
||||||
@ -269,12 +275,14 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
updated_dfname = true;
|
updated_dfname = true;
|
||||||
}
|
}
|
||||||
KzedMap.freeBufferedImage(img_day);
|
KzedMap.freeBufferedImage(img_day);
|
||||||
|
FileLockManager.releaseWriteLock(dfname);
|
||||||
MapManager.mapman.updateStatistics(mtile, "day", true, updated_dfname, !rendered);
|
MapManager.mapman.updateStatistics(mtile, "day", true, updated_dfname, !rendered);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since we've already got the new tile, and we're on an async thread, just
|
// Since we've already got the new tile, and we're on an async thread, just
|
||||||
// make the zoomed tile here
|
// make the zoomed tile here
|
||||||
boolean ztile_updated = false;
|
boolean ztile_updated = false;
|
||||||
|
FileLockManager.getWriteLock(zoomFile);
|
||||||
if(updated_fname || (!zoomFile.exists())) {
|
if(updated_fname || (!zoomFile.exists())) {
|
||||||
saveZoomedTile(zmtile, zoomFile, zimg, ox, oy);
|
saveZoomedTile(zmtile, zoomFile, zimg, ox, oy);
|
||||||
MapManager.mapman.pushUpdate(zmtile.getWorld(),
|
MapManager.mapman.pushUpdate(zmtile.getWorld(),
|
||||||
@ -282,11 +290,13 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
ztile_updated = true;
|
ztile_updated = true;
|
||||||
}
|
}
|
||||||
KzedMap.freeBufferedImage(zimg);
|
KzedMap.freeBufferedImage(zimg);
|
||||||
|
FileLockManager.releaseWriteLock(zoomFile);
|
||||||
MapManager.mapman.updateStatistics(zmtile, null, true, ztile_updated, !rendered);
|
MapManager.mapman.updateStatistics(zmtile, null, true, ztile_updated, !rendered);
|
||||||
|
|
||||||
if(zimg_day != null) {
|
if(zimg_day != null) {
|
||||||
File zoomFile_day = new File(zoomFile.getParent(), zmtile.getDayFilename());
|
File zoomFile_day = new File(zoomFile.getParent(), zmtile.getDayFilename());
|
||||||
ztile_updated = false;
|
ztile_updated = false;
|
||||||
|
FileLockManager.getWriteLock(zoomFile_day);
|
||||||
if(updated_dfname || (!zoomFile_day.exists())) {
|
if(updated_dfname || (!zoomFile_day.exists())) {
|
||||||
saveZoomedTile(zmtile, zoomFile_day, zimg_day, ox, oy);
|
saveZoomedTile(zmtile, zoomFile_day, zimg_day, ox, oy);
|
||||||
MapManager.mapman.pushUpdate(zmtile.getWorld(),
|
MapManager.mapman.pushUpdate(zmtile.getWorld(),
|
||||||
@ -294,6 +304,7 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
ztile_updated = true;
|
ztile_updated = true;
|
||||||
}
|
}
|
||||||
KzedMap.freeBufferedImage(zimg_day);
|
KzedMap.freeBufferedImage(zimg_day);
|
||||||
|
FileLockManager.releaseWriteLock(zoomFile_day);
|
||||||
MapManager.mapman.updateStatistics(zmtile, "day", true, ztile_updated, !rendered);
|
MapManager.mapman.updateStatistics(zmtile, "day", true, ztile_updated, !rendered);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -431,10 +442,10 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||||||
if (colors != null) {
|
if (colors != null) {
|
||||||
Color c = colors[seq];
|
Color c = colors[seq];
|
||||||
if (c.getAlpha() > 0) {
|
if (c.getAlpha() > 0) {
|
||||||
/* we found something that isn't transparent! */
|
/* we found something that isn't transparent, or not doing transparency */
|
||||||
if (c.getAlpha() == 255) {
|
if ((!transparency) || (c.getAlpha() == 255)) {
|
||||||
/* it's opaque - the ray ends here */
|
/* it's opaque - the ray ends here */
|
||||||
result.setColor(c);
|
result.setARGB(c.getARGB() | 0xFF000000);
|
||||||
if(lightlevel < 15) { /* Not full light? */
|
if(lightlevel < 15) { /* Not full light? */
|
||||||
shadowColor(result, lightlevel);
|
shadowColor(result, lightlevel);
|
||||||
}
|
}
|
||||||
|
105
src/main/java/org/dynmap/utils/FileLockManager.java
Normal file
105
src/main/java/org/dynmap/utils/FileLockManager.java
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
package org.dynmap.utils;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.dynmap.Log;
|
||||||
|
/**
|
||||||
|
* Implements soft-locks for prevent concurrency issues with file updates
|
||||||
|
*/
|
||||||
|
public class FileLockManager {
|
||||||
|
private static Object lock = new Object();
|
||||||
|
private static HashMap<String, Integer> filelocks = new HashMap<String, Integer>();
|
||||||
|
private static final Integer WRITELOCK = new Integer(-1);
|
||||||
|
/**
|
||||||
|
* Get write lock on file - exclusive lock, no other writers or readers
|
||||||
|
* @throws InterruptedException
|
||||||
|
*/
|
||||||
|
public static void getWriteLock(File f) {
|
||||||
|
String fn = f.getPath();
|
||||||
|
synchronized(lock) {
|
||||||
|
boolean got_lock = false;
|
||||||
|
while(!got_lock) {
|
||||||
|
Integer lockcnt = filelocks.get(fn); /* Get lock count */
|
||||||
|
if(lockcnt != null) { /* If any locks, can't get write lock */
|
||||||
|
try {
|
||||||
|
lock.wait();
|
||||||
|
} catch (InterruptedException ix) {
|
||||||
|
Log.severe("getWriteLock(" + fn + ") interrupted");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
filelocks.put(fn, WRITELOCK);
|
||||||
|
got_lock = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Log.info("getWriteLock(" + f + ")");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Release write lock
|
||||||
|
*/
|
||||||
|
public static void releaseWriteLock(File f) {
|
||||||
|
String fn = f.getPath();
|
||||||
|
synchronized(lock) {
|
||||||
|
Integer lockcnt = filelocks.get(fn); /* Get lock count */
|
||||||
|
if(lockcnt == null)
|
||||||
|
Log.severe("releaseWriteLock(" + fn + ") on unlocked file");
|
||||||
|
else if(lockcnt.equals(WRITELOCK)) {
|
||||||
|
filelocks.remove(fn); /* Remove lock */
|
||||||
|
lock.notifyAll(); /* Wake up folks waiting for locks */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Log.severe("releaseWriteLock(" + fn + ") on read-locked file");
|
||||||
|
}
|
||||||
|
//Log.info("releaseWriteLock(" + f + ")");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get read lock on file - multiple readers allowed, blocks writers
|
||||||
|
*/
|
||||||
|
public static void getReadLock(File f) {
|
||||||
|
String fn = f.getPath();
|
||||||
|
synchronized(lock) {
|
||||||
|
boolean got_lock = false;
|
||||||
|
while(!got_lock) {
|
||||||
|
Integer lockcnt = filelocks.get(fn); /* Get lock count */
|
||||||
|
if(lockcnt == null) {
|
||||||
|
filelocks.put(fn, Integer.valueOf(1)); /* First lock */
|
||||||
|
got_lock = true;
|
||||||
|
}
|
||||||
|
else if(!lockcnt.equals(WRITELOCK)) { /* Other read locks */
|
||||||
|
filelocks.put(fn, Integer.valueOf(lockcnt+1));
|
||||||
|
got_lock = true;
|
||||||
|
}
|
||||||
|
else { /* Write lock in place */
|
||||||
|
try {
|
||||||
|
lock.wait();
|
||||||
|
} catch (InterruptedException ix) {
|
||||||
|
Log.severe("getReadLock(" + fn + ") interrupted");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Log.info("getReadLock(" + f + ")");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Release read lock
|
||||||
|
*/
|
||||||
|
public static void releaseReadLock(File f) {
|
||||||
|
String fn = f.getPath();
|
||||||
|
synchronized(lock) {
|
||||||
|
Integer lockcnt = filelocks.get(fn); /* Get lock count */
|
||||||
|
if(lockcnt == null)
|
||||||
|
Log.severe("releaseReadLock(" + fn + ") on unlocked file");
|
||||||
|
else if(lockcnt.equals(WRITELOCK))
|
||||||
|
Log.severe("releaseReadLock(" + fn + ") on write-locked file");
|
||||||
|
else if(lockcnt > 1) {
|
||||||
|
filelocks.put(fn, Integer.valueOf(lockcnt-1));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
filelocks.remove(fn); /* Remove lock */
|
||||||
|
lock.notifyAll(); /* Wake up folks waiting for locks */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Log.info("releaseReadLock(" + f + ")");
|
||||||
|
}
|
||||||
|
}
|
@ -13,6 +13,7 @@ import org.dynmap.web.HttpHandler;
|
|||||||
import org.dynmap.web.HttpRequest;
|
import org.dynmap.web.HttpRequest;
|
||||||
import org.dynmap.web.HttpResponse;
|
import org.dynmap.web.HttpResponse;
|
||||||
import org.dynmap.web.HttpStatus;
|
import org.dynmap.web.HttpStatus;
|
||||||
|
import org.dynmap.utils.FileLockManager;
|
||||||
|
|
||||||
public abstract class FileHandler implements HttpHandler {
|
public abstract class FileHandler implements HttpHandler {
|
||||||
protected static final Logger log = Logger.getLogger("Minecraft");
|
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||||
@ -43,6 +44,10 @@ public abstract class FileHandler implements HttpHandler {
|
|||||||
|
|
||||||
protected abstract InputStream getFileInput(String path, HttpRequest request, HttpResponse response);
|
protected abstract InputStream getFileInput(String path, HttpRequest request, HttpResponse response);
|
||||||
|
|
||||||
|
protected void closeFileInput(String path, InputStream in) throws IOException {
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
|
||||||
protected String getExtension(String path) {
|
protected String getExtension(String path) {
|
||||||
int dotindex = path.lastIndexOf('.');
|
int dotindex = path.lastIndexOf('.');
|
||||||
if (dotindex > 0)
|
if (dotindex > 0)
|
||||||
@ -108,15 +113,17 @@ public abstract class FileHandler implements HttpHandler {
|
|||||||
out.write(readBuffer, 0, readBytes);
|
out.write(readBuffer, 0, readBytes);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
fileInput.close();
|
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
freeReadBuffer(readBuffer);
|
freeReadBuffer(readBuffer);
|
||||||
|
if(fileInput != null) {
|
||||||
|
closeFileInput(path, fileInput);
|
||||||
|
fileInput = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fileInput.close();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (fileInput != null) {
|
if (fileInput != null) {
|
||||||
try { fileInput.close(); } catch (IOException ex) { }
|
try { closeFileInput(path, fileInput); fileInput = null; } catch (IOException ex) { }
|
||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,10 @@ package org.dynmap.web.handlers;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import org.dynmap.utils.FileLockManager;
|
||||||
import org.dynmap.web.HttpField;
|
import org.dynmap.web.HttpField;
|
||||||
import org.dynmap.web.HttpRequest;
|
import org.dynmap.web.HttpRequest;
|
||||||
import org.dynmap.web.HttpResponse;
|
import org.dynmap.web.HttpResponse;
|
||||||
@ -20,16 +22,25 @@ public class FilesystemHandler extends FileHandler {
|
|||||||
@Override
|
@Override
|
||||||
protected InputStream getFileInput(String path, HttpRequest request, HttpResponse response) {
|
protected InputStream getFileInput(String path, HttpRequest request, HttpResponse response) {
|
||||||
File file = new File(root, path);
|
File file = new File(root, path);
|
||||||
|
FileLockManager.getReadLock(file);
|
||||||
if (file.getAbsolutePath().startsWith(root.getAbsolutePath()) && file.isFile()) {
|
if (file.getAbsolutePath().startsWith(root.getAbsolutePath()) && file.isFile()) {
|
||||||
FileInputStream result;
|
FileInputStream result;
|
||||||
try {
|
try {
|
||||||
result = new FileInputStream(file);
|
result = new FileInputStream(file);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
|
FileLockManager.releaseReadLock(file);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
response.fields.put(HttpField.ContentLength, Long.toString(file.length()));
|
response.fields.put(HttpField.ContentLength, Long.toString(file.length()));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
FileLockManager.releaseReadLock(file);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
protected void closeFileInput(String path, InputStream in) throws IOException {
|
||||||
|
super.closeFileInput(path, in);
|
||||||
|
File file = new File(root, path);
|
||||||
|
FileLockManager.releaseReadLock(file);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user