mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-11-28 21:25:46 +01:00
Merge pull request #273 from mikeprimm/hdrender
Add models.txt, and code to load models from it, and lots of models
This commit is contained in:
commit
8df180313e
823
models.txt
Normal file
823
models.txt
Normal file
@ -0,0 +1,823 @@
|
|||||||
|
# Wood Stair - up south
|
||||||
|
# Cobblestone Stair - up south
|
||||||
|
block:id=53,id=67,data=0,scale=2
|
||||||
|
layer:0
|
||||||
|
**
|
||||||
|
**
|
||||||
|
layer:1
|
||||||
|
--
|
||||||
|
**
|
||||||
|
# Wood Stair - up north
|
||||||
|
# Cobblestone Stair - up north
|
||||||
|
block:id=53,id=67,data=1,scale=2
|
||||||
|
rotate:id=53,data=0,rot=180
|
||||||
|
# Wood Stair - up west
|
||||||
|
# Cobblestone Stair - up west
|
||||||
|
block:id=53,id=67,data=2,scale=2
|
||||||
|
rotate:id=53,data=0,rot=90
|
||||||
|
# Wood Stair - up east
|
||||||
|
# Cobblestone Stair - up east
|
||||||
|
block:id=53,id=67,data=3,scale=2
|
||||||
|
rotate:id=53,data=0,rot=270
|
||||||
|
# Slab (stone, sandstone, wood, cobblestone)
|
||||||
|
block:id=44,data=*,scale=2
|
||||||
|
layer:0
|
||||||
|
**
|
||||||
|
**
|
||||||
|
layer:1
|
||||||
|
--
|
||||||
|
--
|
||||||
|
# Snow
|
||||||
|
block:id=78,data=*,scale=4
|
||||||
|
layer:0
|
||||||
|
****
|
||||||
|
****
|
||||||
|
****
|
||||||
|
****
|
||||||
|
# Torch - up
|
||||||
|
# Redstone torch on - up
|
||||||
|
# Redstone torch off - up
|
||||||
|
block:id=50,id=75,id=76,data=5,data=0,scale=8
|
||||||
|
layer:0,1,2,3,4
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
# Torch - pointing south
|
||||||
|
# Redstone torch on - pointing south
|
||||||
|
# Redstone torch off - pointing south
|
||||||
|
block:id=50,id=75,id=76,data=1,scale=8
|
||||||
|
layer:2
|
||||||
|
---**---
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
layer:3,4
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
layer:5
|
||||||
|
--------
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
# Torch - pointing north
|
||||||
|
# Redstone torch on - pointing north
|
||||||
|
# Redstone torch off - pointing north
|
||||||
|
block:id=50,id=75,id=76,data=2,scale=8
|
||||||
|
rotate:id=50,data=1,rot=180
|
||||||
|
# Torch - pointing west
|
||||||
|
# Redstone torch on - pointing west
|
||||||
|
# Redstone torch off - pointing west
|
||||||
|
block:id=50,id=75,id=76,data=3,scale=8
|
||||||
|
rotate:id=50,data=1,rot=90
|
||||||
|
# Torch - pointing east
|
||||||
|
# Redstone torch on - pointing east
|
||||||
|
# Redstone torch off - pointing east
|
||||||
|
block:id=50,id=75,id=76,data=4,scale=8
|
||||||
|
rotate:id=50,data=1,rot=270
|
||||||
|
# Fence
|
||||||
|
block:id=85,data=*,scale=8
|
||||||
|
layer:0,1,3,4,6
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
layer:2,5
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
********
|
||||||
|
********
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
# Trapdoor
|
||||||
|
# Stone pressure plate
|
||||||
|
# Wooden pressure plate
|
||||||
|
block:id=96,id=72,id=70,data=*,scale=8
|
||||||
|
layer:0
|
||||||
|
--------
|
||||||
|
-******-
|
||||||
|
-******-
|
||||||
|
-******-
|
||||||
|
-******-
|
||||||
|
-******-
|
||||||
|
-******-
|
||||||
|
--------
|
||||||
|
# Crops
|
||||||
|
block:id=59,data=*,scale=8
|
||||||
|
layer:0,1,2,3,4,5
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
layer:6,7
|
||||||
|
*---*---
|
||||||
|
--------
|
||||||
|
--*---*-
|
||||||
|
--------
|
||||||
|
*---*---
|
||||||
|
--------
|
||||||
|
--*---*-
|
||||||
|
--------
|
||||||
|
# Sugar Cane
|
||||||
|
block:id=83,data=*,scale=8
|
||||||
|
layer:0,1,2,3,4,5,6,7
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
*-*-*-*-
|
||||||
|
--------
|
||||||
|
# Stone Button - facing south
|
||||||
|
block:id=77,data=1,data=9,scale=8
|
||||||
|
layer:3,4
|
||||||
|
---**---
|
||||||
|
---**---
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
--------
|
||||||
|
# Stone Button - facing north
|
||||||
|
block:id=77,data=2,data=10,scale=8
|
||||||
|
rotate:id=77,data=1,rot=180
|
||||||
|
# Stone Button - facing west
|
||||||
|
block:id=77,data=3,data=11,scale=8
|
||||||
|
rotate:id=77,data=1,rot=90
|
||||||
|
# Stone Button - facing east
|
||||||
|
block:id=77,data=4,data=12,scale=8
|
||||||
|
rotate:id=77,data=1,rot=270
|
||||||
|
# Rails - flat - east/west
|
||||||
|
block:id=66,data=0,scale=16
|
||||||
|
layer:0
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
-**--**--**--**-
|
||||||
|
layer:1,2
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
****************
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
****************
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
# Rails - flat - north/south
|
||||||
|
block:id=66,data=1,scale=16
|
||||||
|
rotate:id=66,data=0,rot=90
|
||||||
|
# Rails - ascending to south
|
||||||
|
block:id=66,data=2,scale=16
|
||||||
|
layer:1
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:1
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:2
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:3
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:4
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:5
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:6
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:7
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:8
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:9
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:10
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:11
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:12
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:13
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
****************
|
||||||
|
----------------
|
||||||
|
layer:14
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
----------------
|
||||||
|
layer:15
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
# Rails - ascending to north
|
||||||
|
block:id=66,data=3,scale=16
|
||||||
|
rotate:id=66,data=2,rot=180
|
||||||
|
# Rails - ascending to east
|
||||||
|
block:id=66,data=4,scale=16
|
||||||
|
rotate:id=66,data=2,rot=270
|
||||||
|
# Rails - ascending to west
|
||||||
|
block:id=66,data=5,scale=16
|
||||||
|
rotate:id=66,data=2,rot=90
|
||||||
|
# Rails - northeast corner
|
||||||
|
block:id=66,data=6,scale=16
|
||||||
|
layer:0
|
||||||
|
-**-------------
|
||||||
|
-**-------------
|
||||||
|
-**---------*---
|
||||||
|
-**--------***--
|
||||||
|
-**-------***---
|
||||||
|
-**------***----
|
||||||
|
-**-----***-----
|
||||||
|
-*-----***------
|
||||||
|
-*-----**-------
|
||||||
|
-*----*---------
|
||||||
|
-*---*----------
|
||||||
|
-*--*-----------
|
||||||
|
-*-*------------
|
||||||
|
-**------*******
|
||||||
|
-***************
|
||||||
|
----------------
|
||||||
|
layer:1,2
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
****------------
|
||||||
|
********--------
|
||||||
|
----******------
|
||||||
|
--------***-----
|
||||||
|
---------***----
|
||||||
|
----------**----
|
||||||
|
-----------**---
|
||||||
|
-----------**---
|
||||||
|
-----------**---
|
||||||
|
-----------**---
|
||||||
|
***---------**--
|
||||||
|
****--------**--
|
||||||
|
--**--------**--
|
||||||
|
--**--------**--
|
||||||
|
# Rails - southeast corner
|
||||||
|
block:id=66,data=7,scale=16
|
||||||
|
rotate:id=66,data=6,rot=90
|
||||||
|
# Rails - southwest corner
|
||||||
|
block:id=66,data=8,scale=16
|
||||||
|
rotate:id=66,data=6,rot=180
|
||||||
|
# Rails - northwest corner
|
||||||
|
block:id=66,data=9,scale=16
|
||||||
|
rotate:id=66,data=6,rot=270
|
||||||
|
# Powered rails - flat - east/west
|
||||||
|
# Detector rails - flat - east/west
|
||||||
|
block:id=27,id=28,data=0,data=8,scale=16
|
||||||
|
rotate:id=66,data=0,rot=0
|
||||||
|
# Powered rails - flat - north/south
|
||||||
|
# Detector rails - flat - north/south
|
||||||
|
block:id=27,id=28,data=1,data=9,scale=16
|
||||||
|
rotate:id=66,data=1,rot=0
|
||||||
|
# Powered rails - ascending to south
|
||||||
|
# Detector rails - ascending to south
|
||||||
|
block:id=27,id=28,data=2,data=10,scale=16
|
||||||
|
rotate:id=66,data=2,rot=0
|
||||||
|
# Powered rails - ascending to north
|
||||||
|
# Detector rails - ascending to north
|
||||||
|
block:id=27,id=28,data=3,data=11,scale=16
|
||||||
|
rotate:id=66,data=3,rot=0
|
||||||
|
# Powered rails - ascending to east
|
||||||
|
# Detector rails - ascending to east
|
||||||
|
block:id=27,id=28,data=4,data=12,scale=16
|
||||||
|
rotate:id=66,data=4,rot=0
|
||||||
|
# Powered rails - ascending to west
|
||||||
|
# Detector rails - ascending to west
|
||||||
|
block:id=27,id=28,data=5,data=13,scale=16
|
||||||
|
rotate:id=66,data=5,rot=0
|
||||||
|
# Ladder - attached to east side of block
|
||||||
|
block:id=65,data=2,scale=16
|
||||||
|
layer:0,3,4,7,8,11,12,15
|
||||||
|
----------------
|
||||||
|
***-------------
|
||||||
|
***-------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
***-------------
|
||||||
|
***-------------
|
||||||
|
----------------
|
||||||
|
layer:1,2,5,6,9,10,13,14
|
||||||
|
-*--------------
|
||||||
|
***-------------
|
||||||
|
***-------------
|
||||||
|
-*--------------
|
||||||
|
-*--------------
|
||||||
|
-*--------------
|
||||||
|
-*--------------
|
||||||
|
-*--------------
|
||||||
|
-*--------------
|
||||||
|
***-------------
|
||||||
|
***-------------
|
||||||
|
-*--------------
|
||||||
|
# Ladder - attached to west side of block
|
||||||
|
block:id=65,data=3,scale=16
|
||||||
|
rotate:id=65,data=2,rot=180
|
||||||
|
# Ladder - attached to north side of block
|
||||||
|
block:id=65,data=4,scale=16
|
||||||
|
rotate:id=65,data=2,rot=270
|
||||||
|
# Ladder - attached to south side of block
|
||||||
|
block:id=65,data=5,scale=16
|
||||||
|
rotate:id=65,data=2,rot=90
|
||||||
|
# Wall sign - facing east
|
||||||
|
block:id=68,data=2,scale=4
|
||||||
|
layer:1,2
|
||||||
|
*---
|
||||||
|
*---
|
||||||
|
*---
|
||||||
|
*---
|
||||||
|
# Wall sign - facing west
|
||||||
|
block:id=68,data=3,scale=4
|
||||||
|
rotate:id=68,data=2,rot=180
|
||||||
|
# Wall sign - facing north
|
||||||
|
block:id=68,data=4,scale=4
|
||||||
|
rotate:id=68,data=2,rot=270
|
||||||
|
# Wall sign - facing south
|
||||||
|
block:id=68,data=5,scale=4
|
||||||
|
rotate:id=68,data=2,rot=90
|
||||||
|
# Redstone wire
|
||||||
|
block:id=55,data=*,scale=16
|
||||||
|
layer:0
|
||||||
|
-------**-------
|
||||||
|
--------**------
|
||||||
|
-------**-------
|
||||||
|
------**--------
|
||||||
|
-------**-------
|
||||||
|
--------**------
|
||||||
|
-*---*-**---*---
|
||||||
|
***-******-***-*
|
||||||
|
*-***-******-***
|
||||||
|
---*---**-*---*-
|
||||||
|
------**--------
|
||||||
|
-------**-------
|
||||||
|
--------**------
|
||||||
|
-------**-------
|
||||||
|
------**--------
|
||||||
|
-------**-------
|
||||||
|
# Signpost - facing west
|
||||||
|
block:id=63,data=0,scale=16
|
||||||
|
layer:0,1,2,3,4,5
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:6,7,8,9,10,11,12
|
||||||
|
----------------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------***-------
|
||||||
|
------***-------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
----------------
|
||||||
|
# Signpost - facing north
|
||||||
|
block:id=63,data=4,scale=16
|
||||||
|
rotate:id=63,data=0,rot=90
|
||||||
|
# Signpost - facing east
|
||||||
|
block:id=63,data=8,scale=16
|
||||||
|
rotate:id=63,data=0,rot=180
|
||||||
|
# Signpost - facing south
|
||||||
|
block:id=63,data=12,scale=16
|
||||||
|
rotate:id=63,data=0,rot=270
|
||||||
|
# Signpost - facing northwest
|
||||||
|
block:id=63,data=2,scale=16
|
||||||
|
layer:0,1,2,3,4,5
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:6,7,8,9,10,11,12
|
||||||
|
----------------
|
||||||
|
---------**-----
|
||||||
|
---------**-----
|
||||||
|
--------**------
|
||||||
|
--------**------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
------***-------
|
||||||
|
------***-------
|
||||||
|
-----**---------
|
||||||
|
-----**---------
|
||||||
|
----**----------
|
||||||
|
----**----------
|
||||||
|
---**-----------
|
||||||
|
---**-----------
|
||||||
|
----------------
|
||||||
|
# Signpost - facing northeast
|
||||||
|
block:id=63,data=6,scale=16
|
||||||
|
rotate:id=63,data=2,rot=90
|
||||||
|
# Signpost - facing southeast
|
||||||
|
block:id=63,data=10,scale=16
|
||||||
|
rotate:id=63,data=2,rot=180
|
||||||
|
# Signpost - facing southwest
|
||||||
|
block:id=63,data=14,scale=16
|
||||||
|
rotate:id=63,data=2,rot=270
|
||||||
|
# Signpost - facing west-northwest
|
||||||
|
block:id=63,data=1,scale=16
|
||||||
|
layer:0,1,2,3,4,5
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:6,7,8,9,10,11,12
|
||||||
|
----------------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------***-------
|
||||||
|
------***-------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
-----**---------
|
||||||
|
-----**---------
|
||||||
|
-----**---------
|
||||||
|
-----**---------
|
||||||
|
----------------
|
||||||
|
# Signpost - facing north-northeast
|
||||||
|
block:id=63,data=5,scale=16
|
||||||
|
rotate:id=63,data=1,rot=90
|
||||||
|
# Signpost - facing north-northeast
|
||||||
|
block:id=63,data=9,scale=16
|
||||||
|
rotate:id=63,data=1,rot=180
|
||||||
|
# Signpost - facing north-northeast
|
||||||
|
block:id=63,data=13,scale=16
|
||||||
|
rotate:id=63,data=1,rot=270
|
||||||
|
# Signpost - facing west-southwest
|
||||||
|
block:id=63,data=15,scale=16
|
||||||
|
layer:0,1,2,3,4,5
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
----------------
|
||||||
|
layer:6,7,8,9,10,11,12
|
||||||
|
----------------
|
||||||
|
-----**---------
|
||||||
|
-----**---------
|
||||||
|
-----**---------
|
||||||
|
-----**---------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
------***-------
|
||||||
|
------***-------
|
||||||
|
------**--------
|
||||||
|
------**--------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
-------**-------
|
||||||
|
----------------
|
||||||
|
# Signpost - facing north-northwest
|
||||||
|
block:id=63,data=3,scale=16
|
||||||
|
rotate:id=63,data=15,rot=90
|
||||||
|
# Signpost - facing east-northeast
|
||||||
|
block:id=63,data=7,scale=16
|
||||||
|
rotate:id=63,data=15,rot=180
|
||||||
|
# Signpost - facing south-southeast
|
||||||
|
block:id=63,data=11,scale=16
|
||||||
|
rotate:id=63,data=15,rot=270
|
||||||
|
|
@ -31,7 +31,8 @@
|
|||||||
<include>shaders.txt</include>
|
<include>shaders.txt</include>
|
||||||
<include>perspectives.txt</include>
|
<include>perspectives.txt</include>
|
||||||
<include>lightings.txt</include>
|
<include>lightings.txt</include>
|
||||||
<include>configuration.txt.sample-hd</include></includes></fileSet>
|
<include>configuration.txt.sample-hd</include>
|
||||||
|
<include>models.txt</include></includes></fileSet>
|
||||||
</fileSets>
|
</fileSets>
|
||||||
<files>
|
<files>
|
||||||
<file>
|
<file>
|
||||||
|
@ -52,4 +52,7 @@ public class Color {
|
|||||||
public final int getComponent(int idx) {
|
public final int getComponent(int idx) {
|
||||||
return 0xFF & (val >> ((3-idx)*8));
|
return 0xFF & (val >> ((3-idx)*8));
|
||||||
}
|
}
|
||||||
|
public final void setAlpha(int v) {
|
||||||
|
val = (val & 0x00FFFFFF) | (v << 24);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ import org.bukkit.plugin.PluginManager;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.dynmap.debug.Debug;
|
import org.dynmap.debug.Debug;
|
||||||
import org.dynmap.debug.Debugger;
|
import org.dynmap.debug.Debugger;
|
||||||
|
import org.dynmap.hdmap.HDBlockModels;
|
||||||
import org.dynmap.permissions.NijikokunPermissions;
|
import org.dynmap.permissions.NijikokunPermissions;
|
||||||
import org.dynmap.permissions.OpPermissions;
|
import org.dynmap.permissions.OpPermissions;
|
||||||
import org.dynmap.permissions.PermissionProvider;
|
import org.dynmap.permissions.PermissionProvider;
|
||||||
@ -76,7 +77,8 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
permissions = new OpPermissions(new String[] { "fullrender", "reload" });
|
permissions = new OpPermissions(new String[] { "fullrender", "reload" });
|
||||||
|
|
||||||
dataDirectory = this.getDataFolder();
|
dataDirectory = this.getDataFolder();
|
||||||
|
/* Load block models */
|
||||||
|
HDBlockModels.loadModels(dataDirectory);
|
||||||
org.bukkit.util.config.Configuration bukkitConfiguration = new org.bukkit.util.config.Configuration(new File(this.getDataFolder(), "configuration.txt"));
|
org.bukkit.util.config.Configuration bukkitConfiguration = new org.bukkit.util.config.Configuration(new File(this.getDataFolder(), "configuration.txt"));
|
||||||
bukkitConfiguration.load();
|
bukkitConfiguration.load();
|
||||||
configuration = new ConfigurationNode(bukkitConfiguration);
|
configuration = new ConfigurationNode(bukkitConfiguration);
|
||||||
|
@ -163,6 +163,12 @@ public class DefaultHDShader implements HDShader {
|
|||||||
if (c.getAlpha() > 0) {
|
if (c.getAlpha() > 0) {
|
||||||
/* Handle light level, if needed */
|
/* Handle light level, if needed */
|
||||||
lighting.applyLighting(ps, this, c, tmpcolor);
|
lighting.applyLighting(ps, this, c, tmpcolor);
|
||||||
|
/* If we got alpha from subblock model, use it instead */
|
||||||
|
int subalpha = ps.getSubmodelAlpha();
|
||||||
|
if(subalpha >= 0) {
|
||||||
|
for(Color clr : tmpcolor)
|
||||||
|
clr.setAlpha(subalpha);
|
||||||
|
}
|
||||||
/* Blend color with accumulated color (weighted by alpha) */
|
/* Blend color with accumulated color (weighted by alpha) */
|
||||||
if(!transparency) { /* No transparency support */
|
if(!transparency) { /* No transparency support */
|
||||||
for(i = 0; i < color.length; i++)
|
for(i = 0; i < color.length; i++)
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
package org.dynmap.hdmap;
|
package org.dynmap.hdmap;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.LineNumberReader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.dynmap.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom block models - used for non-cube blocks to represent the physical volume associated with the block
|
* Custom block models - used for non-cube blocks to represent the physical volume associated with the block
|
||||||
@ -22,8 +27,7 @@ public class HDBlockModels {
|
|||||||
private short[][][] modelvectors;
|
private short[][][] modelvectors;
|
||||||
|
|
||||||
public final short[] getScaledModel(int blocktype, int blockdata) {
|
public final short[] getScaledModel(int blocktype, int blockdata) {
|
||||||
if((blocktype > modelvectors.length) || (modelvectors[blocktype] == null) ||
|
if(modelvectors[blocktype] == null) {
|
||||||
(modelvectors[blocktype][blockdata] == null)) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return modelvectors[blocktype][blockdata];
|
return modelvectors[blocktype][blockdata];
|
||||||
@ -32,111 +36,6 @@ public class HDBlockModels {
|
|||||||
|
|
||||||
private static HashMap<Integer, HDScaledBlockModels> scaled_models_by_scale = new HashMap<Integer, HDScaledBlockModels>();
|
private static HashMap<Integer, HDScaledBlockModels> scaled_models_by_scale = new HashMap<Integer, HDScaledBlockModels>();
|
||||||
|
|
||||||
/* Block models */
|
|
||||||
private static HDBlockModels WOOD_STAIR_UP_NORTH = new HDBlockModels(Material.WOOD_STAIRS, 1<<1, 2, new long[] {
|
|
||||||
0x03, 0x03,
|
|
||||||
0x01, 0x01 });
|
|
||||||
private static HDBlockModels WOOD_STAIR_UP_SOUTH = new HDBlockModels(Material.WOOD_STAIRS, 1<<0, 2, new long[] {
|
|
||||||
0x03, 0x03,
|
|
||||||
0x02, 0x02 });
|
|
||||||
private static HDBlockModels WOOD_STAIR_UP_WEST = new HDBlockModels(Material.WOOD_STAIRS, 1<<2, 2, new long[] {
|
|
||||||
0x03, 0x03,
|
|
||||||
0x00, 0x03 });
|
|
||||||
private static HDBlockModels WOOD_STAIR_UP_EAST = new HDBlockModels(Material.WOOD_STAIRS, 1<<3, 2, new long[] {
|
|
||||||
0x03, 0x03,
|
|
||||||
0x03, 0x00 });
|
|
||||||
private static HDBlockModels COBBLE_STAIR_UP_NORTH = new HDBlockModels(Material.COBBLESTONE_STAIRS, 1<<1, WOOD_STAIR_UP_NORTH);
|
|
||||||
private static HDBlockModels COBBLE_STAIR_UP_SOUTH = new HDBlockModels(Material.COBBLESTONE_STAIRS, 1<<0, WOOD_STAIR_UP_SOUTH);
|
|
||||||
private static HDBlockModels COBBLE_STAIR_UP_WEST = new HDBlockModels(Material.COBBLESTONE_STAIRS, 1<<2, WOOD_STAIR_UP_WEST);
|
|
||||||
private static HDBlockModels COBBLE_STAIR_UP_EAST = new HDBlockModels(Material.COBBLESTONE_STAIRS, 1<<3, WOOD_STAIR_UP_EAST);
|
|
||||||
private static HDBlockModels STEP = new HDBlockModels(Material.STEP, 0x0F, 2, new long[] {
|
|
||||||
0x03,
|
|
||||||
0x03 });
|
|
||||||
private static HDBlockModels SNOW = new HDBlockModels(Material.SNOW, 0x0F, 4, new long[] {
|
|
||||||
0x0F, 0x0F, 0x0F, 0x0F });
|
|
||||||
private static HDBlockModels TORCH_UP = new HDBlockModels(Material.TORCH, (1<<5) | (1 << 0), 4, new long[] {
|
|
||||||
0x00, 0x02, 0x00, 0x00,
|
|
||||||
0x00, 0x02, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels TORCH_SOUTH = new HDBlockModels(Material.TORCH, (1<<1), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x01, 0x00, 0x00,
|
|
||||||
0x00, 0x02, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels TORCH_NORTH = new HDBlockModels(Material.TORCH, (1<<2), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x08, 0x00,
|
|
||||||
0x00, 0x00, 0x04, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels TORCH_WEST = new HDBlockModels(Material.TORCH, (1<<3), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x02, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x02, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels TORCH_EAST = new HDBlockModels(Material.TORCH, (1<<4), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x02,
|
|
||||||
0x00, 0x00, 0x02, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels REDSTONETORCHON_UP = new HDBlockModels(Material.REDSTONE_TORCH_ON, (1<<5) | (1 << 0), TORCH_UP);
|
|
||||||
private static HDBlockModels REDSTONETORCHOFF_UP = new HDBlockModels(Material.REDSTONE_TORCH_OFF, (1<<5) | (1 << 0), TORCH_UP);
|
|
||||||
private static HDBlockModels REDSTONETORCHON_NORTH = new HDBlockModels(Material.REDSTONE_TORCH_ON, (1<<2), TORCH_NORTH);
|
|
||||||
private static HDBlockModels REDSTONETORCHOFF_NORTH = new HDBlockModels(Material.REDSTONE_TORCH_OFF, (1<<2), TORCH_NORTH);
|
|
||||||
private static HDBlockModels REDSTONETORCHON_SOUTH = new HDBlockModels(Material.REDSTONE_TORCH_ON, (1<<1), TORCH_SOUTH);
|
|
||||||
private static HDBlockModels REDSTONETORCHOFF_SOUTH = new HDBlockModels(Material.REDSTONE_TORCH_OFF, (1<<1), TORCH_SOUTH);
|
|
||||||
private static HDBlockModels REDSTONETORCHON_EAST = new HDBlockModels(Material.REDSTONE_TORCH_ON, (1<<4), TORCH_EAST);
|
|
||||||
private static HDBlockModels REDSTONETORCHOFF_EAST = new HDBlockModels(Material.REDSTONE_TORCH_OFF, (1<<4), TORCH_EAST);
|
|
||||||
private static HDBlockModels REDSTONETORCHON_WEST = new HDBlockModels(Material.REDSTONE_TORCH_ON, (1<<3), TORCH_WEST);
|
|
||||||
private static HDBlockModels REDSTONETORCHOFF_WEST = new HDBlockModels(Material.REDSTONE_TORCH_OFF, (1<<3), TORCH_WEST);
|
|
||||||
private static HDBlockModels FENCE = new HDBlockModels(Material.FENCE, 0xFFFF, 4, new long[] {
|
|
||||||
0x00, 0x06, 0x06, 0x00,
|
|
||||||
0x00, 0x06, 0x06, 0x00,
|
|
||||||
0x00, 0x06, 0x06, 0x00,
|
|
||||||
0x00, 0x06, 0x06, 0x00 });
|
|
||||||
private static HDBlockModels TRAPDOOR = new HDBlockModels(Material.TRAP_DOOR, 0xFFFF, 4, new long[] {
|
|
||||||
0x0F, 0x0F, 0x0F, 0x0F });
|
|
||||||
private static HDBlockModels WOODPRESSPLATE = new HDBlockModels(Material.WOOD_PLATE, 0xFFFF, 4, new long[] {
|
|
||||||
0x0F, 0x0F, 0x0F, 0x0F });
|
|
||||||
private static HDBlockModels STONEPRESSPLATE = new HDBlockModels(Material.STONE_PLATE, 0xFFFF, 4, new long[] {
|
|
||||||
0x0F, 0x0F, 0x0F, 0x0F });
|
|
||||||
private static HDBlockModels WALLSIGN_NORTH = new HDBlockModels(Material.WALL_SIGN, (1<<4), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x08, 0x08, 0x08, 0x08,
|
|
||||||
0x08, 0x08, 0x08, 0x08,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels WALLSIGN_SOUTH = new HDBlockModels(Material.WALL_SIGN, (1<<5), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x01, 0x01, 0x01, 0x01,
|
|
||||||
0x01, 0x01, 0x01, 0x01,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels WALLSIGN_EAST = new HDBlockModels(Material.WALL_SIGN, (1<<2), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x0F,
|
|
||||||
0x00, 0x00, 0x00, 0x0F,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels WALLSIGN_WEST = new HDBlockModels(Material.WALL_SIGN, (1<<3), 4, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x0F, 0x00, 0x00, 0x00,
|
|
||||||
0x0F, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels REDSTONEWIRE = new HDBlockModels(Material.REDSTONE_WIRE, 0xFFFF, 8, new long[] {
|
|
||||||
0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18 });
|
|
||||||
private static HDBlockModels SIGNPOST_EASTWEST = new HDBlockModels(Material.SIGN_POST, 0xC7C7, 8, new long[] {
|
|
||||||
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
|
|
||||||
private static HDBlockModels SIGHPOST_NORTHSOUTH = new HDBlockModels(Material.SIGN_POST, 0x3838, 8, new long[] {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
|
||||||
0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
|
||||||
0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
|
||||||
0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Block definition - copy from other
|
* Block definition - copy from other
|
||||||
*/
|
*/
|
||||||
@ -159,22 +58,43 @@ public class HDBlockModels {
|
|||||||
* if array is short, other elements area are assumed to be zero (fills from bottom of block up)
|
* if array is short, other elements area are assumed to be zero (fills from bottom of block up)
|
||||||
*/
|
*/
|
||||||
public HDBlockModels(Material blocktype, int databits, int nativeres, long[] blockflags) {
|
public HDBlockModels(Material blocktype, int databits, int nativeres, long[] blockflags) {
|
||||||
this.blockid = blocktype.getId();
|
this(blocktype.getId(), databits, nativeres, blockflags);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Block definition - positions correspond to Bukkit coordinates (+X is south, +Y is up, +Z is west)
|
||||||
|
* @param blockid - block ID
|
||||||
|
* @param databits - bitmap of block data bits matching this model (bit N is set if data=N would match)
|
||||||
|
* @param nativeres - native subblocks per edge of cube (up to 64)
|
||||||
|
* @param blockflags - array of native^2 long integers representing volume of block (bit X of element (nativeres*Y+Z) is set if that subblock is filled)
|
||||||
|
* if array is short, other elements area are assumed to be zero (fills from bottom of block up)
|
||||||
|
*/
|
||||||
|
public HDBlockModels(int blockid, int databits, int nativeres, long[] blockflags) {
|
||||||
|
this.blockid = blockid;
|
||||||
this.databits = databits;
|
this.databits = databits;
|
||||||
this.nativeres = nativeres;
|
this.nativeres = nativeres;
|
||||||
this.blockflags = new long[nativeres * nativeres];
|
this.blockflags = new long[nativeres * nativeres];
|
||||||
System.arraycopy(blockflags, 0, this.blockflags, 0, blockflags.length);
|
System.arraycopy(blockflags, 0, this.blockflags, 0, blockflags.length);
|
||||||
for(int i = 0; i < 16; i++) {
|
for(int i = 0; i < 16; i++) {
|
||||||
if((databits & (1<<i)) != 0)
|
if((databits & (1<<i)) != 0) {
|
||||||
models_by_id_data.put((blockid<<4)+i, this);
|
models_by_id_data.put((blockid<<4)+i, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Test if given native block is filled
|
* Test if given native block is filled
|
||||||
*/
|
*/
|
||||||
public final boolean isSubblockSet(int x, int y, int z) {
|
public final boolean isSubblockSet(int x, int y, int z) {
|
||||||
return ((blockflags[nativeres*y+z] & (1 << x)) != 0);
|
return ((blockflags[nativeres*y+z] & (1 << x)) != 0);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Set subblock value
|
||||||
|
*/
|
||||||
|
public final void setSubblock(int x, int y, int z, boolean isset) {
|
||||||
|
if(isset)
|
||||||
|
blockflags[nativeres*y+z] |= (1 << x);
|
||||||
|
else
|
||||||
|
blockflags[nativeres*y+z] &= ~(1 << x);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Get scaled map of block: will return array of alpha levels, corresponding to how much of the
|
* Get scaled map of block: will return array of alpha levels, corresponding to how much of the
|
||||||
* scaled subblocks are occupied by the original blocks (indexed by Y*res*res + Z*res + X)
|
* scaled subblocks are occupied by the original blocks (indexed by Y*res*res + Z*res + X)
|
||||||
@ -330,4 +250,143 @@ public class HDBlockModels {
|
|||||||
}
|
}
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Load models from model.txt file
|
||||||
|
*/
|
||||||
|
public static void loadModels(File plugindir) {
|
||||||
|
LineNumberReader rdr = null;
|
||||||
|
int cnt = 0;
|
||||||
|
try {
|
||||||
|
String line;
|
||||||
|
ArrayList<HDBlockModels> modlist = new ArrayList<HDBlockModels>();
|
||||||
|
int layerbits = 0;
|
||||||
|
int rownum = 0;
|
||||||
|
int scale = 0;
|
||||||
|
rdr = new LineNumberReader(new FileReader(new File(plugindir, "models.txt")));
|
||||||
|
while((line = rdr.readLine()) != null) {
|
||||||
|
if(line.startsWith("block:")) {
|
||||||
|
ArrayList<Integer> blkids = new ArrayList<Integer>();
|
||||||
|
int databits = 0;
|
||||||
|
scale = 0;
|
||||||
|
line = line.substring(6);
|
||||||
|
String[] args = line.split(",");
|
||||||
|
for(String a : args) {
|
||||||
|
String[] av = a.split("=");
|
||||||
|
if(av.length < 2) continue;
|
||||||
|
if(av[0].equals("id")) {
|
||||||
|
blkids.add(Integer.parseInt(av[1]));
|
||||||
|
}
|
||||||
|
else if(av[0].equals("data")) {
|
||||||
|
if(av[1].equals("*"))
|
||||||
|
databits = 0xFFFF;
|
||||||
|
else
|
||||||
|
databits |= (1 << Integer.parseInt(av[1]));
|
||||||
|
}
|
||||||
|
else if(av[0].equals("scale")) {
|
||||||
|
scale = Integer.parseInt(av[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* If we have everything, build block */
|
||||||
|
if((blkids.size() > 0) && (databits != 0) && (scale > 0)) {
|
||||||
|
modlist.clear();
|
||||||
|
for(Integer id : blkids) {
|
||||||
|
modlist.add(new HDBlockModels(id.intValue(), databits, scale, new long[0]));
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Log.severe("Block model missing required parameters = line " + rdr.getLineNumber() + " of models.txt");
|
||||||
|
}
|
||||||
|
layerbits = 0;
|
||||||
|
}
|
||||||
|
else if(line.startsWith("layer:")) {
|
||||||
|
line = line.substring(6);
|
||||||
|
String args[] = line.split(",");
|
||||||
|
layerbits = 0;
|
||||||
|
rownum = 0;
|
||||||
|
for(String a: args) {
|
||||||
|
layerbits |= (1 << Integer.parseInt(a));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(line.startsWith("rotate:")) {
|
||||||
|
line = line.substring(7);
|
||||||
|
String args[] = line.split(",");
|
||||||
|
int id = -1;
|
||||||
|
int data = -1;
|
||||||
|
int rot = -1;
|
||||||
|
for(String a : args) {
|
||||||
|
String[] av = a.split("=");
|
||||||
|
if(av.length < 2) continue;
|
||||||
|
if(av[0].equals("id")) { id = Integer.parseInt(av[1]); }
|
||||||
|
if(av[0].equals("data")) { data = Integer.parseInt(av[1]); }
|
||||||
|
if(av[0].equals("rot")) { rot = Integer.parseInt(av[1]); }
|
||||||
|
}
|
||||||
|
/* get old model to be rotated */
|
||||||
|
HDBlockModels mod = models_by_id_data.get((id<<4)+data);
|
||||||
|
if((mod != null) && ((rot%90) == 0)) {
|
||||||
|
for(int x = 0; x < scale; x++) {
|
||||||
|
for(int y = 0; y < scale; y++) {
|
||||||
|
for(int z = 0; z < scale; z++) {
|
||||||
|
if(mod.isSubblockSet(x, y, z) == false) continue;
|
||||||
|
switch(rot) {
|
||||||
|
case 0:
|
||||||
|
for(HDBlockModels bm : modlist)
|
||||||
|
bm.setSubblock(x, y, z, true);
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
for(HDBlockModels bm : modlist)
|
||||||
|
bm.setSubblock(scale-z-1, y, x, true);
|
||||||
|
break;
|
||||||
|
case 180:
|
||||||
|
for(HDBlockModels bm : modlist)
|
||||||
|
bm.setSubblock(scale-x-1, y, scale-z-1, true);
|
||||||
|
break;
|
||||||
|
case 270:
|
||||||
|
for(HDBlockModels bm : modlist)
|
||||||
|
bm.setSubblock(z, y, scale-x-1, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(line.startsWith("#") || line.startsWith(";")) {
|
||||||
|
}
|
||||||
|
else if(layerbits != 0) { /* If we're working pattern lines */
|
||||||
|
/* Layerbits determine Y, rows count from North to South (X=0 to X=N-1), columns Z are West to East (N-1 to 0) */
|
||||||
|
for(int i = 0; (i < scale) && (i < line.length()); i++) {
|
||||||
|
if(line.charAt(i) == '*') { /* If an asterix, set flag */
|
||||||
|
for(int y = 0; y < scale; y++) {
|
||||||
|
if((layerbits & (1<<y)) != 0) {
|
||||||
|
for(HDBlockModels mod : modlist) {
|
||||||
|
mod.setSubblock(rownum, y, scale-i-1, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* See if we're done with layer */
|
||||||
|
rownum++;
|
||||||
|
if(rownum >= scale) {
|
||||||
|
rownum = 0;
|
||||||
|
layerbits = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log.info("Loaded " + cnt + " block models");
|
||||||
|
} catch (IOException iox) {
|
||||||
|
Log.severe("Error reading models.txt - " + iox.toString());
|
||||||
|
} catch (NumberFormatException nfx) {
|
||||||
|
Log.severe("Format error - line " + rdr.getLineNumber() + " of models.txt");
|
||||||
|
} finally {
|
||||||
|
if(rdr != null) {
|
||||||
|
try {
|
||||||
|
rdr.close();
|
||||||
|
rdr = null;
|
||||||
|
} catch (IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,4 +52,8 @@ public interface HDPerspectiveState {
|
|||||||
* Get pixel Y coordinate
|
* Get pixel Y coordinate
|
||||||
*/
|
*/
|
||||||
int getPixelY();
|
int getPixelY();
|
||||||
|
/**
|
||||||
|
* Return submodel alpha value (-1 if no submodel rendered)
|
||||||
|
*/
|
||||||
|
int getSubmodelAlpha();
|
||||||
}
|
}
|
||||||
|
@ -86,6 +86,7 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
int x_inc, y_inc, z_inc;
|
int x_inc, y_inc, z_inc;
|
||||||
double t_next_y, t_next_x, t_next_z;
|
double t_next_y, t_next_x, t_next_z;
|
||||||
boolean nonairhit;
|
boolean nonairhit;
|
||||||
|
int subalpha;
|
||||||
/**
|
/**
|
||||||
* Get sky light level - only available if shader requested it
|
* Get sky light level - only available if shader requested it
|
||||||
*/
|
*/
|
||||||
@ -126,7 +127,12 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
* Get pixel Y coordinate
|
* Get pixel Y coordinate
|
||||||
*/
|
*/
|
||||||
public final int getPixelY() { return py; }
|
public final int getPixelY() { return py; }
|
||||||
|
/**
|
||||||
|
* Return submodel alpha value (-1 if no submodel rendered)
|
||||||
|
*/
|
||||||
|
public int getSubmodelAlpha() {
|
||||||
|
return subalpha;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Initialize raytrace state variables
|
* Initialize raytrace state variables
|
||||||
*/
|
*/
|
||||||
@ -213,11 +219,15 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
if(nonairhit || (blocktypeid != 0)) {
|
if(nonairhit || (blocktypeid != 0)) {
|
||||||
blockdata = mapiter.getBlockData();
|
blockdata = mapiter.getBlockData();
|
||||||
boolean missed = false;
|
boolean missed = false;
|
||||||
|
|
||||||
/* Look up to see if block is modelled */
|
/* Look up to see if block is modelled */
|
||||||
short[] model = scalemodels.getScaledModel(blocktypeid, blockdata);
|
short[] model = scalemodels.getScaledModel(blocktypeid, blockdata);
|
||||||
if(model != null) {
|
if(model != null) {
|
||||||
missed = raytraceSubblock(model);
|
missed = raytraceSubblock(model);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
subalpha = -1;
|
||||||
|
}
|
||||||
if(!missed) {
|
if(!missed) {
|
||||||
boolean done = true;
|
boolean done = true;
|
||||||
for(int i = 0; i < shaderstate.length; i++) {
|
for(int i = 0; i < shaderstate.length; i++) {
|
||||||
@ -329,9 +339,12 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
mt_next_z = mt + (togo - Math.floor(togo)) * mdt_dz;
|
mt_next_z = mt + (togo - Math.floor(togo)) * mdt_dz;
|
||||||
}
|
}
|
||||||
double mtend = Math.min(t_next_x, Math.min(t_next_y, t_next_z));
|
double mtend = Math.min(t_next_x, Math.min(t_next_y, t_next_z));
|
||||||
|
subalpha = -1;
|
||||||
while(mt < mtend) {
|
while(mt < mtend) {
|
||||||
try {
|
try {
|
||||||
if(model[modscale*modscale*my + modscale*mz + mx] > 0) {
|
int blkalpha = model[modscale*modscale*my + modscale*mz + mx];
|
||||||
|
if(blkalpha > 0) {
|
||||||
|
subalpha = blkalpha;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (ArrayIndexOutOfBoundsException aioobx) { /* We're outside the model, so miss */
|
} catch (ArrayIndexOutOfBoundsException aioobx) { /* We're outside the model, so miss */
|
||||||
@ -451,11 +464,7 @@ public class IsoHDPerspective implements HDPerspective {
|
|||||||
block.y = inity;
|
block.y = inity;
|
||||||
block.x += 1;
|
block.x += 1;
|
||||||
}
|
}
|
||||||
MapTile[] result = tiles.toArray(new MapTile[tiles.size()]);
|
return tiles.toArray(new MapTile[tiles.size()]);
|
||||||
Log.info("processed update for " + loc);
|
|
||||||
for(MapTile mt : result)
|
|
||||||
Log.info("need to render " + mt);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user