blockbench/js/display.js

1766 lines
50 KiB
JavaScript
Raw Permalink Normal View History

2018-12-02 19:37:06 +01:00
2017-10-26 19:00:52 +02:00
var display = {}
2018-10-17 19:50:25 +02:00
Blockbench.display_settings = display
2017-10-26 19:00:52 +02:00
var ground_animation = false;
var ground_timer = 0
2018-10-17 19:50:25 +02:00
var display_slot;
2018-11-11 21:19:08 +01:00
var display_preview;
2018-12-02 19:37:06 +01:00
var enterDisplaySettings, exitDisplaySettings;
const DisplayMode = {};
2018-12-27 14:03:04 +01:00
class DisplaySlot {
constructor(id, data) {
2019-01-09 15:54:35 +01:00
this.default()
if (data) this.extend(data)
}
default() {
2018-12-27 14:03:04 +01:00
this.rotation = [0, 0, 0];
this.translation = [0, 0, 0];
this.scale = [1, 1, 1];
this.mirror = [false, false, false]
2019-01-09 15:54:35 +01:00
return this;
2018-12-27 14:03:04 +01:00
}
copy() {
return {
rotation: this.rotation.slice(),
translation: this.translation.slice(),
scale: this.scale.slice(),
mirror: this.mirror.slice()
}
}
export() {
var build = {}
if (!this.rotation.allEqual(0)) build.rotation = this.rotation
if (!this.translation.allEqual(0)) build.translation = this.translation
if (!this.scale.allEqual(1) || !this.mirror.allEqual(false)) {
build.scale = this.scale.slice()
if (!this.mirror.allEqual(false)) {
2019-02-03 21:09:35 +01:00
for (var i = 0; i < 3; i++) {
build.scale[i] *= this.mirror[i] ? -1 : 1;
}
2018-12-27 14:03:04 +01:00
}
}
if (Object.keys(build).length) {
return build;
}
}
extend(data) {
if (!data) return this;
for (var i = 0; i < 3; i++) {
if (data.rotation) Merge.number(this.rotation, data.rotation, i)
if (data.translation) Merge.number(this.translation, data.translation, i)
if (data.mirror) Merge.boolean(this.mirror, data.mirror, i)
if (data.scale) Merge.number(this.scale, data.scale, i)
2019-02-03 21:09:35 +01:00
this.scale[i] = Math.abs(this.scale[i])
2018-12-27 14:03:04 +01:00
if (data.scale && data.scale[i] < 0) this.mirror[i] = true;
}
this.update()
return this;
}
update() {
2019-01-09 15:54:35 +01:00
if (display_mode && this === DisplayMode.slot) {
2018-12-27 14:03:04 +01:00
DisplayMode.vue.$forceUpdate()
DisplayMode.updateDisplayBase()
}
return this;
}
}
2018-12-02 19:37:06 +01:00
2018-12-27 14:03:04 +01:00
(function() {
2017-10-26 19:00:52 +02:00
class refModel {
2018-10-17 19:50:25 +02:00
constructor(id) {
2018-11-11 21:19:08 +01:00
var scope = this;
2017-10-26 19:00:52 +02:00
this.model = new THREE.Object3D();
2018-10-17 19:50:25 +02:00
this.name = tl('display.reference.'+id);
2017-10-26 19:00:52 +02:00
this.id = id;
this.icon = id;
this.initialized = false;
2018-10-17 19:50:25 +02:00
2018-04-15 16:06:43 +02:00
switch (id) {
case 'player':
this.onload = function() {
2018-11-11 21:19:08 +01:00
let angle = Math.degToRad(scope.angle||22.5)
let x = scope.variant === 'alex' ? 5.5 : 6
let y = 22 - Math.cos(angle)*10 + Math.sin(angle)*2
let z = Math.sin(angle)*10 + Math.cos(angle)*2
2018-10-17 19:50:25 +02:00
if (display_slot === 'thirdperson_righthand') {
2018-11-11 21:19:08 +01:00
setDisplayArea(x, y, -z, -67.5,0,0, 1, 1, 1)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'thirdperson_lefthand') {
2018-11-11 21:19:08 +01:00
setDisplayArea(-x, y, -z, -67.5,0,0, 1, 1, 1)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'head') {
2018-12-16 16:18:20 +01:00
setDisplayArea(0, 28, 0, 0, 0, 0, 0.625, 0.625, 0.625)
2018-04-15 16:06:43 +02:00
}
2017-10-26 19:00:52 +02:00
}
2018-04-15 16:06:43 +02:00
break;
case 'armor_stand':
this.onload = function() {
2018-10-17 19:50:25 +02:00
if (display_slot === 'thirdperson_righthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-2, 6, -6, -90, 0, 90, 1, 1, 1)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'thirdperson_lefthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-2, 6, 6, -90, 0, 90, 1, 1, 1)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'head') {
2018-04-15 16:06:43 +02:00
setDisplayArea(0, 21, 0, 0, 90, 0, 0.625, 0.625, 0.625)
}
2017-10-26 19:00:52 +02:00
}
2018-04-15 16:06:43 +02:00
break;
case 'armor_stand_small':
this.onload = function() {
2018-10-17 19:50:25 +02:00
if (display_slot === 'thirdperson_righthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-1, 0, -3, -90, 0, 90, 0.5, 0.5, 0.5)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'thirdperson_lefthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-1, 0, 3, -90, 0, 90, 0.5, 0.5, 0.5)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'head') {
2018-04-15 16:06:43 +02:00
setDisplayArea(0, 8.5, 0, 0, 90, 0, 0.4635, 0.4635, 0.4635)
}
2017-10-26 19:00:52 +02:00
}
2018-04-15 16:06:43 +02:00
break;
case 'zombie':
this.onload = function() {
2018-10-17 19:50:25 +02:00
if (display_slot === 'thirdperson_righthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-10, 18, -6, -90, 90, 90, 1, 1, 1)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'thirdperson_lefthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-10, 18, 6, -90, 90, 90, 1, 1, 1)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'head') {
2018-04-15 16:06:43 +02:00
setDisplayArea(0, 22, 0, 0, 90, 0, 0.625, 0.625, 0.625)
}
2017-10-26 19:00:52 +02:00
}
2018-04-15 16:06:43 +02:00
break;
case 'baby_zombie':
this.onload = function() {
2018-10-17 19:50:25 +02:00
if (display_slot === 'thirdperson_righthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-5, 6, -3, -90, 90, 90, 0.5, 0.5, 0.5)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'thirdperson_lefthand') {
2018-04-15 16:06:43 +02:00
setDisplayArea(-5, 6, 3, -90, 90, 90, 0.5, 0.5, 0.5)
2018-10-17 19:50:25 +02:00
} else if (display_slot === 'head') {
2018-04-15 16:06:43 +02:00
setDisplayArea(0, 8.5, 0, 0, 90, 0, 0.4635, 0.4635, 0.4635)
}
2017-10-26 19:00:52 +02:00
}
2018-04-15 16:06:43 +02:00
break;
case 'monitor':
this.onload = function() {
2019-02-03 21:09:35 +01:00
var side = display_slot.includes('left') ? -1 : 1;
setDisplayArea(side*9, -8.4, 20.8, 0, 0, 0, 1,1,1)
2018-04-15 16:06:43 +02:00
}
break;
case 'bow':
this.onload = function() {
2019-02-03 21:09:35 +01:00
var side = display_slot.includes('left') ? -1 : 1;
setDisplayArea(side*5.4, -5.6, 24.7, side*64, side*-25, side*55, 1,1,1)
2018-04-15 16:06:43 +02:00
}
break;
2017-10-26 19:00:52 +02:00
}
}
buildModel(things, texture) {
var scope = this;
if (texture === 'black') {
var mat = new THREE.MeshBasicMaterial({color: 0x000000});
} else {
var img = new Image();
2018-10-17 19:50:25 +02:00
img.src = texture;
var tex = new THREE.Texture(img);
img.tex = tex;
img.tex.magFilter = THREE.NearestFilter;
img.tex.minFilter = THREE.NearestFilter;
img.onload = function() {
this.tex.needsUpdate = true;
}
img.crossOrigin = '';
2018-11-11 21:19:08 +01:00
var mat = new THREE.MeshLambertMaterial({
color: 0xffffff,
map: tex,
transparent: true,
side: 2,
alphaTest: 0.2
});
2017-10-26 19:00:52 +02:00
}
2018-10-17 19:50:25 +02:00
scope.material = mat
2017-10-26 19:00:52 +02:00
things.forEach(function(s) {
var mesh = new THREE.Mesh(new THREE.CubeGeometry(s.size[0], s.size[1], s.size[2]), mat )
2018-11-11 21:19:08 +01:00
if (s.origin) {
mesh.position.set(s.origin[0], s.origin[1], s.origin[2])
mesh.geometry.translate(-s.origin[0], -s.origin[1], -s.origin[2])
}
2017-10-26 19:00:52 +02:00
mesh.geometry.translate(s.pos[0], s.pos[1], s.pos[2])
2018-11-11 21:19:08 +01:00
if (s.rotation) {
mesh.rotation.setFromDegreeArray(s.rotation)
}
if (s.model) {
mesh.r_model = s.model
2017-10-26 19:00:52 +02:00
}
2018-10-17 19:50:25 +02:00
for (var face in s) {
if (s.hasOwnProperty(face) && s[face].uv !== undefined) {
var fIndex = 0;
switch(face) {
case 'north': fIndex = 10; break;
case 'east': fIndex = 0; break;
case 'south': fIndex = 8; break;
case 'west': fIndex = 2; break;
case 'up': fIndex = 4; break;
case 'down': fIndex = 6; break;
}
mesh.geometry.faceVertexUvs[0][fIndex] = [ getUVArray(s[face])[0], getUVArray(s[face])[1], getUVArray(s[face])[3] ];
mesh.geometry.faceVertexUvs[0][fIndex+1] = [ getUVArray(s[face])[1], getUVArray(s[face])[2], getUVArray(s[face])[3] ];
}
}
mesh.geometry.elementsNeedUpdate = true;
2017-10-26 19:00:52 +02:00
scope.model.add(mesh);
})
scope.model.name = name;
return this;
}
2018-11-11 21:19:08 +01:00
setModelVariant(variant) {
this.variant = variant
this.model.children.forEach((m) => {
if (m.r_model) {
m.visible = m.r_model === variant;
}
})
if (displayReferenceObjects.active === this) {
this.onload()
}
}
2019-03-09 22:06:35 +01:00
load(index) {
displayReferenceObjects.ref_indexes[display_slot] = index || 0;
2017-10-26 19:00:52 +02:00
displayReferenceObjects.clear()
if (typeof this.onload === 'function') {
this.onload()
}
//3D
if (!this.initialized) {
switch (this.id) {
case 'player': this.buildPlayer(); break;
case 'zombie': this.buildZombie(); break;
case 'armor_stand': this.buildArmorStand(); break;
case 'baby_zombie': this.buildBabyZombie(); break;
case 'armor_stand_small': this.buildArmorStandSmall(); break;
case 'monitor': this.buildMonitor(); break;
2018-04-15 16:06:43 +02:00
case 'bow': this.buildMonitor(); break;
2017-10-26 19:00:52 +02:00
case 'block': this.buildBlock(); break;
case 'frame': this.buildFrame(); break;
}
this.initialized = true;
}
display_scene.add(this.model)
displayReferenceObjects.active = this;
2018-10-17 19:50:25 +02:00
2018-11-11 21:19:08 +01:00
display_preview.loadBackground()
2017-10-26 19:00:52 +02:00
}
2018-11-11 21:19:08 +01:00
buildPlayer(slim) {
2017-10-26 19:00:52 +02:00
var scope = this;
2018-11-11 21:19:08 +01:00
var cubes = [
{
//Head
"size": [8, 8, 8],
"pos": [0, 28, 0],
"north": {"uv": [2.032, 2.032, 3.968, 3.968]},
"east": {"uv": [0.032, 2.032, 1.968, 3.968]},
"south": {"uv": [6.032, 2.032, 7.968, 3.968]},
"west": {"uv": [4.032, 2.032, 5.968, 3.968]},
"up": {"uv": [3.968, 1.968, 2.032, 0.032]},
"down": {"uv": [5.968, 0.032, 4.032, 1.968]}
},
{
//Head Layer
"size": [9, 9, 9],
"pos": [0, 28, 0],
"north": {"uv": [10.032, 2.032, 11.968, 3.968]},
"east": {"uv": [8.032, 2.032, 9.968, 3.968]},
"south": {"uv": [14.032, 2.032, 15.968, 3.968]},
"west": {"uv": [12.032, 2.032, 13.968, 3.968]},
"up": {"uv": [11.968, 1.968, 10.032, 0.032]},
"down": {"uv": [13.968, 0.032, 12.032, 1.968]}
},
{
//Body
"size": [8, 12, 4],
"pos": [0, 18, 0],
2019-02-03 21:09:35 +01:00
"north": {"uv": [5.032, 5.032, 6.968, 7.968]},
2018-11-11 21:19:08 +01:00
"east": {"uv": [7.968, 5.032, 7.032, 7.968]},
2019-02-03 21:09:35 +01:00
"south": {"uv": [8.032, 5.032, 9.968, 7.968]},
2018-11-11 21:19:08 +01:00
"west": {"uv": [4.968, 5.032, 4.032, 7.968]},
"up": {"uv": [5.032, 4.968, 6.968, 4.032]},
"down": {"uv": [7.032, 4.032, 8.968, 4.968]}
},
{
//Body Layer
2018-12-02 19:37:06 +01:00
"size": [8.5, 12.5, 4.5],
2018-11-11 21:19:08 +01:00
"pos": [0, 18, 0],
2019-02-03 21:09:35 +01:00
"north": {"uv": [5.032, 9.032, 6.968, 11.968]},
2018-11-11 21:19:08 +01:00
"east": {"uv": [7.968, 9.032, 7.032, 11.968]},
2019-02-03 21:09:35 +01:00
"south": {"uv": [8.032, 9.032, 9.968, 11.968]},
2018-11-11 21:19:08 +01:00
"west": {"uv": [4.968, 9.032, 4.032, 11.968]},
"up": {"uv": [5.032, 8.968, 6.968, 8.032]},
"down": {"uv": [7.032, 8.032, 8.968, 8.968]}
},
{
//R Leg
"size": [4, 12, 4],
"pos": [1.95, 6, 0],
"origin": [0, 12, 0],
"rotation": [-1, 0, 0],
"north": {"uv": [1.032, 5.032, 1.968, 7.968]},
"east": {"uv": [0.032, 5.032, 0.968, 7.968]},
"south": {"uv": [3.032, 5.032, 3.968, 7.968]},
"west": {"uv": [2.032, 5.032, 2.968, 7.968]},
"up": {"uv": [1.968, 4.968, 1.032, 4.032]},
"down": {"uv": [2.968, 4.032, 2.032, 4.968]}
},
{
//R Leg Layer
2018-12-02 19:37:06 +01:00
"size": [4.5, 12.5, 4.5],
2018-11-11 21:19:08 +01:00
"pos": [1.95, 6, 0],
"origin": [0, 12, 0],
"rotation": [-1, 0, 0],
"north": {"uv": [1.032, 9.032, 1.968, 11.968]},
"east": {"uv": [0.032, 9.032, 0.968, 11.968]},
"south": {"uv": [3.032, 9.032, 3.968, 11.968]},
"west": {"uv": [2.032, 9.032, 2.968, 11.968]},
"up": {"uv": [1.968, 8.968, 1.032, 8.032]},
"down": {"uv": [2.968, 8.032, 2.032, 8.968]}
},
{
//L Leg
"size": [4, 12, 4],
"pos": [-1.95, 6, 0],
"origin": [0, 12, 0],
"rotation": [1, 0, 0],
"north": {"uv": [5.032, 13.032, 5.968, 15.968]},
"east": {"uv": [4.032, 13.032, 4.968, 15.968]},
"south": {"uv": [7.032, 13.032, 7.968, 15.968]},
"west": {"uv": [6.032, 13.032, 6.968, 15.968]},
"up": {"uv": [5.968, 12.968, 5.032, 12.032]},
"down": {"uv": [6.968, 12.032, 6.032, 12.968]}
},
{
//L Leg Layer
2018-12-02 19:37:06 +01:00
"size": [4.5, 12.5, 4.5],
2018-11-11 21:19:08 +01:00
"pos": [-1.95, 6, 0],
"origin": [0, 12, 0],
"rotation": [1, 0, 0],
"north": {"uv": [1.032, 13.032, 1.968, 15.968]},
"east": {"uv": [0.032, 13.032, 0.968, 15.968]},
"south": {"uv": [3.032, 13.032, 3.968, 15.968]},
"west": {"uv": [2.032, 13.032, 2.968, 15.968]},
"up": {"uv": [1.968, 12.968, 1.032, 12.032]},
"down": {"uv": [2.968, 12.032, 2.032, 12.968]}
},
//Steve
{
//R Arm
"size": [4, 12, 4],
"pos": [6, 18, 0],
"origin": [4, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [11.032, 5.032, 11.968, 7.968]},
"east": {"uv": [10.032, 5.032, 10.968, 7.968]},
"south": {"uv": [13.032, 5.032, 13.968, 7.968]},
"west": {"uv": [12.032, 5.032, 12.968, 7.968]},
"up": {"uv": [11.968, 4.968, 11.032, 4.032]},
"down": {"uv": [12.968, 4.032, 12.032, 4.968]},
"model": "steve"
},
{
//R Arm Layer
2018-12-02 19:37:06 +01:00
"size": [4.5, 12.5, 4.5],
2018-11-11 21:19:08 +01:00
"pos": [6, 18, 0],
"origin": [4, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [11.032, 9.032, 11.968, 11.968]},
"east": {"uv": [10.032, 9.032, 10.968, 11.968]},
"south": {"uv": [13.032, 9.032, 13.968, 11.968]},
"west": {"uv": [12.032, 9.032, 12.968, 11.968]},
"up": {"uv": [11.968, 8.968, 11.032, 8.032]},
"down": {"uv": [12.968, 8.032, 12.032, 8.968]},
"model": "steve"
},
{
//L Arm
"size": [4, 12, 4],
"pos": [-6, 18, 0],
"origin": [-4, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [9.032, 13.032, 9.968, 15.968]},
"east": {"uv": [8.032, 13.032, 8.968, 15.968]},
"south": {"uv": [11.032, 13.032, 11.968, 15.968]},
"west": {"uv": [10.032, 13.032, 10.968, 15.968]},
"up": {"uv": [9.968, 12.968, 9.032, 12.032]},
"down": {"uv": [10.968, 12.032, 10.032, 12.968]},
"model": "steve"
},
{
//L Arm Layer
2018-12-02 19:37:06 +01:00
"size": [4.5, 12.5, 4.5],
2018-11-11 21:19:08 +01:00
"pos": [-6, 18, 0],
"origin": [-4, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [13.032, 13.032, 13.968, 15.968]},
"east": {"uv": [12.032, 13.032, 12.968, 15.968]},
"south": {"uv": [15.032, 13.032, 15.968, 15.968]},
"west": {"uv": [14.032, 13.032, 14.968, 15.968]},
"up": {"uv": [13.968, 12.968, 13.032, 12.032]},
"down": {"uv": [14.968, 12.032, 14.032, 12.968]},
"model": "steve"
},
//ALEX
{
//R Arm
"size": [3, 12, 4],
"pos": [5.5, 18, 0],
"origin": [0, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [11.032, 5.032, 11.718, 7.968]},
"east": {"uv": [10.032, 5.032, 10.968, 7.968]},
"south": {"uv": [12.782, 5.032, 13.468, 7.968]},
"west": {"uv": [11.782, 5.032, 12.718, 7.968]},
"up": {"uv": [11.718, 4.968, 11.032, 4.032]},
"down": {"uv": [12.468, 4.032, 11.782, 4.968]},
"model": "alex"
},
{
//R Arm Layer
2018-12-02 19:37:06 +01:00
"size": [3.5, 12.5, 4.5],
2018-11-11 21:19:08 +01:00
"pos": [5.5, 18, 0],
"origin": [0, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [11.032, 9.032, 11.718, 11.968]},
"east": {"uv": [10.032, 9.032, 10.968, 11.968]},
"south": {"uv": [12.782, 9.032, 13.468, 11.968]},
"west": {"uv": [11.782, 9.032, 12.718, 11.968]},
"up": {"uv": [11.718, 8.968, 11.032, 8.032]},
"down": {"uv": [12.468, 8.032, 11.782, 8.968]},
"model": "alex"
},
{
//L Arm
"size": [3, 12, 4],
"pos": [-5.5, 18, 0],
"origin": [0, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [9.032, 13.032, 9.718, 15.968]},
"east": {"uv": [8.032, 13.032, 8.968, 15.968]},
"south": {"uv": [10.782, 13.032, 11.468, 15.968]},
"west": {"uv": [9.782, 13.032, 10.718, 15.968]},
"up": {"uv": [9.718, 12.968, 9.032, 12.032]},
"down": {"uv": [10.468, 12.032, 9.782, 12.968]},
"model": "alex"
},
{
//L Arm Layer
2018-12-02 19:37:06 +01:00
"size": [3.5, 12.5, 4.5],
2018-11-11 21:19:08 +01:00
"pos": [-5.5, 18, 0],
"origin": [0, 22, 0],
"rotation": [22.5, 0, 0],
"north": {"uv": [13.032, 13.032, 13.718, 15.968]},
"east": {"uv": [12.032, 13.032, 12.968, 15.968]},
"south": {"uv": [14.782, 13.032, 15.468, 15.968]},
"west": {"uv": [13.782, 13.032, 14.718, 15.968]},
"up": {"uv": [13.718, 12.968, 13.032, 12.032]},
"down": {"uv": [14.468, 12.032, 13.782, 12.968]},
"model": "alex"
}
2017-10-26 19:00:52 +02:00
]
var skin = 'assets/player_skin.png';
2018-10-17 19:50:25 +02:00
2018-11-11 21:19:08 +01:00
scope.buildModel(cubes, skin);
this.setModelVariant('steve')
2018-10-17 19:50:25 +02:00
updateDisplaySkin()
2017-10-26 19:00:52 +02:00
}
buildArmorStand() {
this.buildModel([
{
"size": [12, 1, 12],
"pos": [0, -5.5, 0],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [0, 11, 3, 11.25]},
"east": {"uv": [3, 11, 6, 11.25]},
"south": {"uv": [6, 11, 9, 11.25]},
"west": {"uv": [9, 11, 12, 11.25]},
"up": {"uv": [3, 8, 6, 11],"rotation": 90},
"down": {"uv": [6, 8, 9, 11], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [2, 11, 2],
"pos": [0, 0.5, -2],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [2, 11, 2],
"pos": [0, 0.5, 2],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [2, 2, 8],
"pos": [0, 7, 0],
"origin": [0, 0, 0],
"north": {
"uv": [0.25, 5.75, 0.75, 6.25],
"texture": "#0"
},
"east": {
"uv": [0.25, 5.75, 2.25, 6.25],
"texture": "#0"
},
"south": {
"uv": [4.75, 5.75, 5.25, 6.25],
"texture": "#0"
},
"west": {
"uv": [2.75, 5.75, 4.75, 6.25],
"texture": "#0"
},
"up": {
"uv": [0, 12.5, 2, 13],
"texture": "#0",
2018-10-17 19:50:25 +02:00
"rotation": 90,"rotation": 90
2017-10-26 19:00:52 +02:00
},
"down": {
"uv": [0, 12.5, 2, 13],
"texture": "#0",
2018-10-17 19:50:25 +02:00
"rotation": 90, "rotation": 270
2017-10-26 19:00:52 +02:00
}
},
{
"size": [2, 7, 2],
"pos": [0, 11.5, 2],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [2, 7, 2],
"pos": [0, 11.5, -2],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [3, 3, 12],
2018-04-15 16:06:43 +02:00
"pos": [0, 16.505, 0],
2017-10-26 19:00:52 +02:00
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [3, 7.25, 3.75, 8]},
2017-10-26 19:00:52 +02:00
"east": {
"uv": [3.75, 7.25, 6.75, 8],
"texture": "#0"
},
"south": {
"uv": [6.75, 7.25, 7.5, 8],
"texture": "#0"
},
2018-11-11 21:19:08 +01:00
"west": {"uv": [0, 7.25, 3, 8]},
2017-10-26 19:00:52 +02:00
"up": {
"uv": [0.75, 6.5, 3.75, 7.25],
"texture": "#0",
2018-10-17 19:50:25 +02:00
"rotation": 90,"rotation": 90
2017-10-26 19:00:52 +02:00
},
"down": {
"uv": [3.75, 6.5, 6.75, 7.25],
"texture": "#0",
2018-10-17 19:50:25 +02:00
"rotation": 90, "rotation": 270
2017-10-26 19:00:52 +02:00
}
},
{
"size": [2, 6, 2],
"pos": [0, 21, 0],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [0.5, 0.5, 1, 2.25]},
"east": {"uv": [1, 0.5, 1.5, 2.25]},
"south": {"uv": [1.5, 0.5, 2, 2.25]},
"west": {"uv": [0, 0.5, 0.5, 2.25]},
"up": {"uv": [0.5, 0, 1, 0.5],"rotation": 90},
"down": {"uv": [1, 0, 1.5, 0.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [2, 12, 2],
"pos": [0, 12, -6],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [7, 0.5, 7.5, 3.5]},
"east": {"uv": [6.5, 0.5, 6, 3.5]},
"south": {"uv": [7.5, 0.5, 8, 3.5]},
"west": {"uv": [6, 0.5, 6.5, 3.5]},
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
"down": {"uv": [7, 0, 7.5, 0.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [2, 12, 2],
"pos": [0, 12, 6],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [7, 0.5, 7.5, 3.5]},
"east": {"uv": [6.5, 0.5, 7, 3.5]},
"south": {"uv": [7.5, 0.5, 8, 3.5]},
"west": {"uv": [6.5, 0.5, 6, 3.5]},
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
"down": {"uv": [7, 0, 7.5, 0.5],"rotation": 270}
2017-10-26 19:00:52 +02:00
}
], 'assets/armor_stand.png')
}
buildArmorStandSmall() {
this.buildModel( [
{
"size": [6, 0.5, 6],
"pos": [0, -5.75, 0],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [0, 11, 3, 11.25]},
"east": {"uv": [3, 11, 6, 11.25]},
"south": {"uv": [6, 11, 9, 11.25]},
"west": {"uv": [9, 11, 12, 11.25]},
"up": {"uv": [3, 8, 6, 11],"rotation": 90},
"down": {"uv": [6, 8, 9, 11], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [1, 5.5, 1],
"pos": [0, -2.75, -1],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [1, 5.5, 1],
"pos": [0, -2.75, 1],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [1, 1, 4],
"pos": [0, 0.5, 0],
"origin": [0, 0, 0],
"north": {
"uv": [0.25, 5.75, 0.75, 6.25],
"texture": "#0"
},
"east": {
"uv": [0.25, 5.75, 2.25, 6.25],
"texture": "#0"
},
"south": {
"uv": [4.75, 5.75, 5.25, 6.25],
"texture": "#0"
},
"west": {
"uv": [2.75, 5.75, 4.75, 6.25],
"texture": "#0"
},
"up": {
"uv": [0, 12.5, 2, 13],
"texture": "#0",
"rotation": 90
},
"down": {
"uv": [0, 12.5, 2, 13],
"texture": "#0",
"rotation": 90
}
},
{
"size": [1, 3.5, 1],
"pos": [0, 2.75, 1],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [1, 3.5, 1],
"pos": [0, 2.75, -1],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [8.5, 4.5, 9, 7.5]},
"east": {"uv": [9, 4.5, 9.5, 7.5]},
"south": {"uv": [9.5, 4.5, 10, 7.5]},
"west": {"uv": [8, 4.5, 8.5, 7.5]},
"up": {"uv": [8.5, 4, 9, 4.5],"rotation": 90},
"down": {"uv": [9, 4, 9.5, 4.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [1.5, 1.5, 6],
2018-04-15 16:06:43 +02:00
"pos": [0, 5.255, 0],
2017-10-26 19:00:52 +02:00
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [3, 7.25, 3.75, 8]},
2017-10-26 19:00:52 +02:00
"east": {
"uv": [3.75, 7.25, 6.75, 8],
"texture": "#0"
},
"south": {
"uv": [6.75, 7.25, 7.5, 8],
"texture": "#0"
},
2018-11-11 21:19:08 +01:00
"west": {"uv": [0, 7.25, 3, 8]},
2017-10-26 19:00:52 +02:00
"up": {
"uv": [0.75, 6.5, 3.75, 7.25],
"texture": "#0",
"rotation": 90
},
"down": {
"uv": [3.75, 6.5, 6.75, 7.25],
"texture": "#0",
"rotation": 90
}
},
{
"size": [
1.5,
4.5,
1.5
],
"pos": [0, 8.27, 0],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [0.5, 0.5, 1, 2.25]},
"east": {"uv": [1, 0.5, 1.5, 2.25]},
"south": {"uv": [1.5, 0.5, 2, 2.25]},
"west": {"uv": [0, 0.5, 0.5, 2.25]},
"up": {"uv": [0.5, 0, 1, 0.5],"rotation": 90},
"down": {"uv": [1, 0, 1.5, 0.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [1, 6, 1],
"pos": [0, 3, -3],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [7, 0.5, 7.5, 3.5]},
"east": {"uv": [6.5, 0.5, 6, 3.5]},
"south": {"uv": [7.5, 0.5, 8, 3.5]},
"west": {"uv": [6, 0.5, 6.5, 3.5]},
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
"down": {"uv": [7, 0, 7.5, 0.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
},
{
"size": [1, 6, 1],
"pos": [0, 3, 3],
"origin": [0, 0, 0],
2018-11-11 21:19:08 +01:00
"north": {"uv": [7, 0.5, 7.5, 3.5]},
"east": {"uv": [6.5, 0.5, 7, 3.5]},
"south": {"uv": [7.5, 0.5, 8, 3.5]},
"west": {"uv": [6.5, 0.5, 6, 3.5]},
"up": {"uv": [6.5, 0, 7, 0.5],"rotation": 90},
"down": {"uv": [7, 0, 7.5, 0.5], "rotation": 270}
2017-10-26 19:00:52 +02:00
}
], 'assets/armor_stand.png')
}
buildZombie() {
this.buildModel([
{
"size": [4, 12, 4],
"pos": [0, 0, -2],
"origin": [0, 0, 0],
"north": {
"uv": [0.01, 5.01, 0.99, 7.99],
"texture": "#1"
},
"east": {
"uv": [3.01, 5.01, 3.99, 7.99],
"texture": "#1"
},
"south": {
"uv": [2.01, 5.01, 2.99, 7.99],
"texture": "#1"
},
"west": {
"uv": [1.01, 5.01, 1.99, 7.99],
"texture": "#1"
},
"up": {
"uv": [1.01, 4.01, 1.99, 4.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [2.01, 4.01, 2.99, 4.99],
"texture": "#1",
"rotation": 90
}
},
{
"size": [4, 12, 4],
"pos": [0, 0, 2],
"origin": [0, 0, 0],
"north": {
"uv": [4.01, 13.01, 4.99, 15.99],
"texture": "#1"
},
"east": {
"uv": [8.01, 13.01, 6.99, 15.99],
"texture": "#1"
},
"south": {
"uv": [6.01, 13.01, 6.99, 15.99],
"texture": "#1"
},
"west": {
"uv": [5.01, 13.01, 5.99, 15.99],
"texture": "#1"
},
"up": {
"uv": [5.01, 12.01, 5.99, 12.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [6.01, 12.01, 6.99, 12.99],
"texture": "#1",
"rotation": 90
}
},
{
"size": [4, 12, 8],
"pos": [0, 12, 0],
"origin": [0, 0, 0],
"north": {
"uv": [4.01, 5.01, 4.99, 7.99],
"texture": "#1"
},
"east": {
"uv": [8.01, 5.01, 9.99, 7.99],
"texture": "#1"
},
"south": {
"uv": [7.01, 5.01, 7.99, 7.99],
"texture": "#1"
},
"west": {
"uv": [5.01, 5.01, 6.99, 7.99],
"texture": "#1"
},
"up": {
"uv": [5.01, 4.01, 6.99, 4.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [7.01, 4.01, 8.99, 4.99],
"texture": "#1",
"rotation": 270
}
},
{
"size": [8, 8, 8],
"pos": [0, 22, 0],
"origin": [0, 0, 0],
"north": {
"uv": [0.01, 2.01, 1.99, 3.99],
"texture": "#1"
},
"east": {
2018-10-17 19:50:25 +02:00
"uv": [6.01, 2.01, 7.99, 3.99],
2017-10-26 19:00:52 +02:00
"texture": "#1"
},
"south": {
"uv": [4.01, 2.01, 5.99, 3.99],
"texture": "#1"
},
"west": {
"uv": [2.01, 2.01, 3.99, 3.99],
"texture": "#1"
},
"up": {
"uv": [2.01, 0.01, 3.99, 1.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [4.01, 0.01, 5.99, 1.99],
"texture": "#1",
"rotation": 90
}
},
{
"size": [12, 4, 4],
"pos": [-4, 16, -6],
"origin": [0, 0, 0],
"north": {
"uv": [12.01, 5.01, 12.99, 7.99],
"texture": "#1",
"rotation": 270
},
"east": {
"uv": [11.01, 4.01, 11.99, 4.99],
"texture": "#1",
"rotation": 180
},
"south": {
"uv": [10.01, 5.01, 10.99, 7.99],
"texture": "#1",
"rotation": 90
},
"west": {
"uv": [12.01, 4.01, 12.99, 4.99],
"texture": "#1",
"rotation": 180
},
"up": {
"uv": [11.01, 5.01, 11.99, 7.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [13.01, 5.01, 13.99, 7.99],
"texture": "#1",
2018-10-17 19:50:25 +02:00
"rotation": 90
2017-10-26 19:00:52 +02:00
}
},
{
"size": [12, 4, 4],
"pos": [-4, 16, 6],
"origin": [0, 0, 0],
"north": {
"uv": [10.01, 13.01, 10.99, 15.99],
"texture": "#1",
"rotation": 270
},
"east": {
"uv": [9.01, 12.01, 9.99, 12.99],
"texture": "#1",
"rotation": 180
},
"south": {
"uv": [8.01, 13.01, 8.99, 15.99],
"texture": "#1",
"rotation": 90
},
"west": {
"uv": [10.01, 12.01, 10.99, 12.99],
"texture": "#1",
"rotation": 180
},
"up": {
"uv": [9.01, 13.01, 9.99, 15.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [11.01, 13.01, 11.99, 15.99],
"texture": "#1",
2018-10-17 19:50:25 +02:00
"rotation": 90
2017-10-26 19:00:52 +02:00
}
}
], 'assets/zombie.png')
}
buildBabyZombie() {
this.buildModel([
{
"size": [2, 6, 2],
"pos": [-2.220446049250313e-16, -3, -1],
"origin": [0, 0, 0],
"north": {
"uv": [0.01, 5.01, 0.99, 7.99],
"texture": "#1"
},
"east": {
"uv": [3.01, 5.01, 3.99, 7.99],
"texture": "#1"
},
"south": {
"uv": [2.01, 5.01, 2.99, 7.99],
"texture": "#1"
},
"west": {
"uv": [1.01, 5.01, 1.99, 7.99],
"texture": "#1"
},
"up": {
"uv": [1.01, 4.01, 1.99, 4.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [2.01, 4.01, 2.99, 4.99],
"texture": "#1",
"rotation": 90
}
},
{
"size": [2, 6, 2],
"pos": [-2.220446049250313e-16, -3, 1],
"origin": [0, 0, 0],
"north": {
"uv": [4.01, 13.01, 4.99, 15.99],
"texture": "#1"
},
"east": {
"uv": [8.01, 13.01, 6.99, 15.99],
"texture": "#1"
},
"south": {
"uv": [6.01, 13.01, 6.99, 15.99],
"texture": "#1"
},
"west": {
"uv": [5.01, 13.01, 5.99, 15.99],
"texture": "#1"
},
"up": {
"uv": [5.01, 12.01, 5.99, 12.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [6.01, 12.01, 6.99, 12.99],
"texture": "#1",
"rotation": 90
}
},
{
"size": [2, 6, 4],
"pos": [-2.220446049250313e-16, 3, 0],
"origin": [0, 0, 0],
"north": {
"uv": [4.01, 5.01, 4.99, 7.99],
"texture": "#1"
},
"east": {
"uv": [8.01, 5.01, 9.99, 7.99],
"texture": "#1"
},
"south": {
"uv": [7.01, 5.01, 7.99, 7.99],
"texture": "#1"
},
"west": {
"uv": [5.01, 5.01, 6.99, 7.99],
"texture": "#1"
},
"up": {
"uv": [5.01, 4.01, 6.99, 4.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [7.01, 4.01, 8.99, 4.99],
"texture": "#1",
"rotation": 270
}
},
{
"size": [6.0, 6.0, 6.0],
"pos": [0, 9, 0],
"origin": [0, 9, 0],
"north": {
"uv": [0.01, 2.01, 1.99, 3.99],
"texture": "#1"
},
"east": {
2018-10-17 19:50:25 +02:00
"uv": [6.01, 2.01, 7.99, 3.99],
2017-10-26 19:00:52 +02:00
"texture": "#1"
},
"south": {
"uv": [4.01, 2.01, 5.99, 3.99],
"texture": "#1"
},
"west": {
"uv": [2.01, 2.01, 3.99, 3.99],
"texture": "#1"
},
"up": {
"uv": [2.01, 0.01, 3.99, 1.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [4.01, 0.01, 5.99, 1.99],
"texture": "#1",
"rotation": 90
}
},
{
"size": [6, 2, 2],
"pos": [-2.000000000000001, 5, -3],
"origin": [0, 0, 0],
"north": {
"uv": [12.01, 5.01, 12.99, 7.99],
"texture": "#1",
"rotation": 270
},
"east": {
"uv": [11.01, 4.01, 11.99, 4.99],
"texture": "#1",
"rotation": 180
},
"south": {
"uv": [10.01, 5.01, 10.99, 7.99],
"texture": "#1",
"rotation": 90
},
"west": {
"uv": [12.01, 4.01, 12.99, 4.99],
"texture": "#1",
"rotation": 180
},
"up": {
"uv": [11.01, 5.01, 11.99, 7.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [13.01, 5.01, 13.99, 7.99],
"texture": "#1",
2018-10-17 19:50:25 +02:00
"rotation": 90
2017-10-26 19:00:52 +02:00
}
},
{
"size": [6, 2, 2],
"pos": [-2.000000000000001, 5, 3],
"origin": [0, 0, 0],
"north": {
"uv": [10.01, 13.01, 10.99, 15.99],
"texture": "#1",
"rotation": 270
},
"east": {
"uv": [9.01, 12.01, 9.99, 12.99],
"texture": "#1",
"rotation": 180
},
"south": {
"uv": [8.01, 13.01, 8.99, 15.99],
"texture": "#1",
"rotation": 90
},
"west": {
"uv": [10.01, 12.01, 10.99, 12.99],
"texture": "#1",
"rotation": 180
},
"up": {
"uv": [9.01, 13.01, 9.99, 15.99],
"texture": "#1",
"rotation": 90
},
"down": {
"uv": [11.01, 13.01, 11.99, 15.99],
"texture": "#1",
2018-10-17 19:50:25 +02:00
"rotation": 90
2017-10-26 19:00:52 +02:00
}
}
], 'assets/zombie.png')
}
buildMonitor() {
this.buildModel([
2019-02-03 21:09:35 +01:00
{"size": [8, 8, 0.1], "pos": [0, 4.93, 31.20], "origin": [0, 0, 0], "north":{"uv":[0,0,0,0]},"east":{"uv":[0,0,0,0]},"south":{"uv":[0,0,0,0]},"west":{"uv":[0,0,16,16]},"up":{"uv":[0,0,0,0]},"down":{"uv":[0,0,0,0]}},
{"size": [8, 8, 0.1], "pos": [0, -4.93, 31.20], "origin": [0, 0, 0], "north":{"uv":[0,0,0,0]},"east":{"uv":[0,0,0,0]},"south":{"uv":[0,0,0,0]},"west":{"uv":[0,0,16,16]},"up":{"uv":[0,0,0,0]},"down":{"uv":[0,0,0,0]}},
{"size": [8, 8, 0.1], "pos": [5.65, 0, 31.2], "origin": [0, 0, 0], "north":{"uv":[0,0,0,0]},"east":{"uv":[0,0,0,0]},"south":{"uv":[0,0,0,0]},"west":{"uv":[0,0,16,16]},"up":{"uv":[0,0,0,0]},"down":{"uv":[0,0,0,0]}},
{"size": [8, 8, 0.1], "pos": [-5.65, 0, 31.2], "origin": [0, 0, 0], "north":{"uv":[0,0,0,0]},"east":{"uv":[0,0,0,0]},"south":{"uv":[0,0,0,0]},"west":{"uv":[0,0,16,16]},"up":{"uv":[0,0,0,0]},"down":{"uv":[0,0,0,0]}}
2017-10-26 19:00:52 +02:00
], 'black')
}
buildBlock() {
this.buildModel([
{"size": [16,16,16], "pos": [0, 0, 0], "origin": [0, 0, 0], "north":{"uv":[0,0,16,16]},"east":{"uv":[0,0,16,16]},"south":{"uv":[0,0,16,16]},"west":{"uv":[0,0,16,16]},"up":{"uv":[0,0,16,16]},"down":{"uv":[0,0,16,16]}}, //Right Arm
], 'assets/missing.png')
}
buildFrame() {
this.buildBlock()
this.buildModel([
{"size": [10,10,0.5], "pos": [0, 0, -8.25], "origin": [0, 0, 0], "north":{"uv":[3,3,13,13]},"east":{"uv":[0,0,0,0]},"south":{"uv":[0,0,0,0]},"west":{"uv":[0,0,0,0]},"up":{"uv":[0,0,0,0]},"down":{"uv":[0,0,0,0]}},
{"size": [1,12,1], "pos": [5.5, 0, -8.5], "origin": [0, 0, 0], "north":{"uv":[2,2,3,14]},"east":{"uv":[2,2,3,14]},"south":{"uv":[2,2,3,14]},"west":{"uv":[2,2,3,14]},"up":{"uv":[2,2,3,3]},"down":{"uv":[2,2,3,3]}},
{"size": [1,12,1], "pos": [-5.5, 0, -8.5], "origin": [0, 0, 0], "north":{"uv":[2,2,3,14]},"east":{"uv":[2,2,3,14]},"south":{"uv":[2,2,3,14]},"west":{"uv":[2,2,3,14]},"up":{"uv":[2,2,3,3]},"down":{"uv":[2,2,3,3]}},
{"size": [10,1,1], "pos": [0, 5.5, -8.5], "origin": [0, 0, 0], "north":{"uv":[3,2,13,3]},"east":{"uv":[3,2,13,3]},"south":{"uv":[3,2,13,3]},"west":{"uv":[3,2,13,3]},"up":{"uv":[3,2,13,3]},"down":{"uv":[3,2,13,3]}},
{"size": [10,1,1], "pos": [0, -5.5, -8.5], "origin": [0, 0, 0], "north":{"uv":[3,13,13,14]},"east":{"uv":[3,13,13,14]},"south":{"uv":[3,13,13,14]},"west":{"uv":[3,13,13,14]},"up":{"uv":[3,13,13,14]},"down":{"uv":[3,13,13,14]}}
], 'assets/item_frame.png')
}
}
2018-12-02 19:37:06 +01:00
window.displayReferenceObjects = {
2017-10-26 19:00:52 +02:00
refmodels: {
2018-10-17 19:50:25 +02:00
player: new refModel('player'),
zombie: new refModel('zombie'),
armor_stand: new refModel('armor_stand'),
baby_zombie: new refModel('baby_zombie'),
armor_stand_small: new refModel('armor_stand_small'),
monitor: new refModel('monitor'),
bow: new refModel('bow'),
block: new refModel('block'),
frame: new refModel('frame'),
inventory_nine: new refModel('inventory_nine'),
inventory_full: new refModel('inventory_full'),
hud: new refModel('hud')
2017-10-26 19:00:52 +02:00
},
active: '',
bar: function(buttons) {
$('#display_ref_bar').html('')
if (buttons.length === 10000) {
this.refmodels[buttons[0]].load()
return;
}
2017-11-16 22:23:41 +01:00
if (buttons.length < 2) {
$('.reference_model_bar').css('visibility', 'hidden')
} else {
$('.reference_model_bar').css('visibility', 'visible')
}
2017-10-26 19:00:52 +02:00
var i = 0;
while (i < buttons.length) {
var ref = this.refmodels[buttons[i]]
2018-04-15 16:06:43 +02:00
var icon = 'icon-'+ref.icon
switch (icon) {
case 'icon-monitor': icon = 'fa fa-asterisk'; break;
}
2017-10-26 19:00:52 +02:00
var button = $(
2019-02-03 21:09:35 +01:00
`<div>
<input class="hidden" type="radio" name="refmodel" id="${ref.id}"${ i === 0 ? ' selected' : '' }>
2019-03-09 22:06:35 +01:00
<label class="tool" onclick="displayReferenceObjects.refmodels.${ref.id}.load(${i})" for="${ref.id}">
2019-02-03 21:09:35 +01:00
<div class="tooltip">${ref.name}</div>
<i class="${icon}"></i>
</label>
</div>`
2017-10-26 19:00:52 +02:00
)
$('#display_ref_bar').append(button)
2019-03-09 22:06:35 +01:00
if (i === displayReferenceObjects.ref_indexes[display_slot]) {
ref.load(i)
2017-10-26 19:00:52 +02:00
button.find('input').prop("checked", true)
}
i++;
}
},
clear: function() {
display_scene.remove(displayReferenceObjects.active.model)
2018-10-17 19:50:25 +02:00
displayReferenceObjects.active = false
2017-10-26 19:00:52 +02:00
$('#donation_hint').hide()
},
2019-03-09 22:06:35 +01:00
ref_indexes: {
thirdperson_righthand: 0,
thirdperson_lefthand: 0,
firstperson_righthand: 0,
firstperson_lefthand: 0,
ground: 0,
gui: 0,
head: 0,
fixed: 0,
},
2018-10-17 19:50:25 +02:00
slots: [
'thirdperson_righthand',
'thirdperson_lefthand',
'firstperson_righthand',
2019-01-09 15:54:35 +01:00
'firstperson_lefthand',
2018-10-17 19:50:25 +02:00
'ground',
'gui',
'head',
'fixed',
]
2017-10-26 19:00:52 +02:00
}
2019-01-09 15:54:35 +01:00
DisplayMode.slots = displayReferenceObjects.slots
2017-10-26 19:00:52 +02:00
2018-12-02 19:37:06 +01:00
enterDisplaySettings = function() { //Enterung Display Setting Mode, changes the scene etc
2017-10-26 19:00:52 +02:00
display_mode = true;
2018-10-17 19:50:25 +02:00
2019-01-09 15:54:35 +01:00
selected.empty()
2017-10-26 19:00:52 +02:00
updateSelection()
2018-10-17 19:50:25 +02:00
2018-11-11 21:19:08 +01:00
if (!display_preview) {
display_preview = new Preview({id: 'display'})
}
2018-10-17 19:50:25 +02:00
if (quad_previews.enabled) {
quad_previews.enabled_before = true
}
2018-11-11 21:19:08 +01:00
display_preview.fullscreen()
display_preview.setNormalCamera()
display_preview.camPers.position.set(-80, 40, -30)
display_preview.camPers.setFocalLength(45)
2019-03-09 22:06:35 +01:00
lights.rotation.y = (Math.PI/4)*3
2018-10-17 19:50:25 +02:00
$('body').addClass('display_mode')
2017-10-26 19:00:52 +02:00
$('.m_edit').hide()
$('.m_disp').show()
$('#display_bar input#thirdperson_righthand').prop("checked", true)
2018-10-17 19:50:25 +02:00
2018-12-27 14:03:04 +01:00
2017-10-26 19:00:52 +02:00
buildGrid()
setShading()
2018-12-27 14:03:04 +01:00
DisplayMode.loadThirdRight()
2018-10-17 19:50:25 +02:00
Canvas.updateRenderSides()
2019-01-09 15:54:35 +01:00
2018-12-27 14:03:04 +01:00
display_area.updateMatrixWorld()
display_base.updateMatrixWorld()
DisplayMode.centerTransformer()
2018-04-28 00:11:32 +02:00
if (outlines.children.length) {
outlines.children.length = 0
Canvas.updateAllPositions()
}
2017-10-26 19:00:52 +02:00
}
2018-12-02 19:37:06 +01:00
exitDisplaySettings = function() { //Enterung Display Setting Mode, changes the scene etc
2018-10-17 19:50:25 +02:00
resetDisplayBase()
setDisplayArea(0,0,0, 0,0,0, 1,1,1)
2018-12-16 16:18:20 +01:00
display_area.updateMatrixWorld()
display_base.updateMatrixWorld()
2019-03-09 22:06:35 +01:00
lights.rotation.y = 0
2018-10-17 19:50:25 +02:00
2018-12-16 16:18:20 +01:00
display_mode = false;
main_preview.fullscreen()
2018-10-17 19:50:25 +02:00
2018-12-16 16:18:20 +01:00
$('.m_disp').hide()
$('.m_edit').show()
$('.selection_only').css('visibility', 'hidden')
$('body').removeClass('display_mode')
resizeWindow()
updateInterface()
if (quad_previews.enabled_before) {
openQuadView()
}
2018-12-27 14:03:04 +01:00
scene.add(Transformer)
2018-12-16 16:18:20 +01:00
buildGrid()
setShading()
Canvas.updateRenderSides()
2017-10-26 19:00:52 +02:00
}
function axisIndex(index) {
if (typeof index === 'number') {
if (index === 0) return 'x';
if (index === 1) return 'y';
if (index === 2) return 'z';
} else {
if (index === 'x') return 0;
if (index === 'y') return 1;
if (index === 'z') return 2;
}
}
function resetDisplayBase() {
2018-12-27 14:03:04 +01:00
display_base.rotation.x = Math.PI / (180 / 0.1);
display_base.rotation.y = Math.PI / (180 / 0.1);
display_base.rotation.z = Math.PI / (180 / 0.1);
display_base.position.x = 0;
display_base.position.y = 0;
display_base.position.z = 0;
display_base.scale.x = 1;
display_base.scale.y = 1;
display_base.scale.z = 1;
2017-10-26 19:00:52 +02:00
}
2018-12-27 14:03:04 +01:00
DisplayMode.centerTransformer = function() {
display_scene.add(Transformer)
Transformer.attach(display_base)
2017-10-26 19:00:52 +02:00
2018-12-27 14:03:04 +01:00
display_base.getWorldPosition(Transformer.position)
2017-10-26 19:00:52 +02:00
2018-12-27 14:03:04 +01:00
if (Toolbox.selected.transformerMode === 'translate') {
Transformer.rotation.copy(display_area.rotation)
} else if (Toolbox.selected.transformerMode === 'scale') {
var q = display_base.getWorldQuaternion(new THREE.Quaternion())
Transformer.rotation.setFromQuaternion(q)
2017-10-26 19:00:52 +02:00
} else {
2018-12-27 14:03:04 +01:00
Transformer.rotation.set(0, 0, 0)
2017-10-26 19:00:52 +02:00
}
2018-12-27 14:03:04 +01:00
Transformer.update()
2017-10-26 19:00:52 +02:00
}
2018-12-27 14:03:04 +01:00
DisplayMode.updateDisplayBase = function(slot) {
if (!slot) slot = display[display_slot]
2018-12-02 19:37:06 +01:00
2018-12-27 14:03:04 +01:00
display_base.rotation.x = Math.PI / (180 / slot.rotation[0]);
display_base.rotation.y = Math.PI / (180 / slot.rotation[1]) * (display_slot.includes('lefthand') ? -1 : 1);
display_base.rotation.z = Math.PI / (180 / slot.rotation[2]) * (display_slot.includes('lefthand') ? -1 : 1);
2017-10-26 19:00:52 +02:00
2018-12-27 14:03:04 +01:00
display_base.position.x = slot.translation[0] * (display_slot.includes('lefthand') ? -1 : 1);
display_base.position.y = slot.translation[1];
display_base.position.z = slot.translation[2];
display_base.scale.x = (slot.scale[0]||0.001) * (slot.mirror[0] ? -1 : 1);
display_base.scale.y = (slot.scale[1]||0.001) * (slot.mirror[1] ? -1 : 1);
display_base.scale.z = (slot.scale[2]||0.001) * (slot.mirror[2] ? -1 : 1);
DisplayMode.centerTransformer()
2017-10-26 19:00:52 +02:00
}
2018-12-27 14:03:04 +01:00
2018-12-02 19:37:06 +01:00
DisplayMode.applyPreset = function(preset, all) {
2017-10-26 19:00:52 +02:00
if (preset == undefined) return;
2018-10-17 19:50:25 +02:00
var slots = [display_slot]
if (all) {
slots = displayReferenceObjects.slots
} else if (preset.areas[display_slot] == undefined) {
Blockbench.showQuickMessage('message.preset_no_info')
2017-10-26 19:00:52 +02:00
return;
};
2018-12-27 14:03:04 +01:00
Undo.initEdit({display_slots: slots})
2018-10-17 19:50:25 +02:00
slots.forEach(function(sl) {
2019-01-09 15:54:35 +01:00
if (!display[sl]) {
display[sl] = new DisplaySlot()
}
display[sl].extend(preset.areas[sl])
2018-10-17 19:50:25 +02:00
})
2018-12-27 14:03:04 +01:00
DisplayMode.updateDisplayBase()
Undo.finishEdit('apply display preset')
2017-10-26 19:00:52 +02:00
}
2018-12-02 19:37:06 +01:00
DisplayMode.createPreset = function() {
2017-10-26 19:00:52 +02:00
var name = $('input#preset_name').val()
if (name == '') {
2018-11-11 21:19:08 +01:00
$('input#preset_name').val(tl('display.preset.blank_name'))
2017-10-26 19:00:52 +02:00
return;
} else {
$('input#preset_name').val('new preset')
}
2018-04-15 16:06:43 +02:00
var preset = {name: name, areas: {}}
display_presets.push(preset)
2017-10-26 19:00:52 +02:00
2018-10-17 19:50:25 +02:00
displayReferenceObjects.slots.forEach(function(s) {
2019-02-03 21:09:35 +01:00
if ($('#'+s+'_save').is(':checked') && display[s]) {
2018-12-27 14:03:04 +01:00
preset.areas[s] = display[s].copy()
2018-04-15 16:06:43 +02:00
}
})
2017-10-26 19:00:52 +02:00
hideDialog()
localStorage.setItem('display_presets', JSON.stringify(display_presets))
}
2018-12-27 14:03:04 +01:00
DisplayMode.loadJSON = function(data) {
for (var slot in data) {
if (displayReferenceObjects.slots.includes(slot)) {
display[slot] = new DisplaySlot().extend(data[slot])
}
}
}
2017-10-26 19:00:52 +02:00
2018-12-16 16:18:20 +01:00
var setDisplayArea = DisplayMode.setBase = function(x, y, z, rx, ry, rz, sx, sy, sz) {//Sets the Work Area to the given Space
2017-10-26 19:00:52 +02:00
display_area.rotation['x'] = Math.PI / (180 / rx);
display_area.rotation['y'] = Math.PI / (180 / ry);
display_area.rotation['z'] = Math.PI / (180 / rz);
display_area.position['x'] = x;
display_area.position['y'] = y;
display_area.position['z'] = z;
display_area.scale['x'] = sx;
display_area.scale['y'] = sy;
display_area.scale['z'] = sz;
2018-12-27 14:03:04 +01:00
display_area.updateMatrixWorld()
DisplayMode.centerTransformer()
2017-10-26 19:00:52 +02:00
}
2018-12-02 19:37:06 +01:00
DisplayMode.groundAnimation = function() {
2017-10-26 19:00:52 +02:00
display_area.rotation.y += 0.015
ground_timer += 1
2018-10-17 19:50:25 +02:00
display_area.position.y = 13.5 + Math.sin(Math.PI * (ground_timer / 100)) * Math.PI/2
2018-12-27 14:03:04 +01:00
DisplayMode.centerTransformer()
2017-10-26 19:00:52 +02:00
if (ground_timer === 200) ground_timer = 0;
}
2018-12-02 19:37:06 +01:00
function loadDisp(key) { //Loads The Menu and slider values, common for all Radio Buttons
2018-10-17 19:50:25 +02:00
display_slot = key
2018-12-27 14:03:04 +01:00
2018-11-11 21:19:08 +01:00
if (key !== 'gui' && display_preview.isOrtho === true) {
display_preview.setNormalCamera()
2017-10-26 19:00:52 +02:00
}
2018-11-11 21:19:08 +01:00
display_preview.controls.enabled = true;
2017-10-26 19:00:52 +02:00
ground_animation = false;
2018-12-02 19:37:06 +01:00
$('#display_crosshair').detach()
2018-11-11 21:19:08 +01:00
display_preview.camPers.setFocalLength(45)
2017-10-26 19:00:52 +02:00
if (display[key] == undefined) {
2018-12-27 14:03:04 +01:00
display[key] = new DisplaySlot()
2017-10-26 19:00:52 +02:00
}
2018-12-27 14:03:04 +01:00
DisplayMode.vue._data.slot = display[key]
DisplayMode.slot = display[key]
DisplayMode.updateDisplayBase()
2018-12-02 19:37:06 +01:00
2017-10-26 19:00:52 +02:00
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadThirdRight = function() { //Loader
loadDisp('thirdperson_righthand')
2017-10-26 19:00:52 +02:00
displayReferenceObjects.bar(['player', 'zombie', 'baby_zombie', 'armor_stand', 'armor_stand_small'])
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadThirdLeft = function() { //Loader
loadDisp('thirdperson_lefthand')
2017-10-26 19:00:52 +02:00
displayReferenceObjects.bar(['player', 'zombie', 'baby_zombie', 'armor_stand', 'armor_stand_small'])
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadFirstRight = function() { //Loader
2017-10-26 19:00:52 +02:00
loadDisp('firstperson_righthand')
2018-11-11 21:19:08 +01:00
display_preview.camPers.setFocalLength(12)
2019-02-03 21:09:35 +01:00
display_preview.camPers.position.set(0, 0, 32.4)
2018-11-11 21:19:08 +01:00
display_preview.controls.target.set(0,0,0)
display_preview.controls.enabled = false
2018-04-15 16:06:43 +02:00
displayReferenceObjects.bar(['monitor', 'bow'])
2018-12-02 19:37:06 +01:00
$('.single_canvas_wrapper').append('<div id="display_crosshair"></div>')
2017-10-26 19:00:52 +02:00
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadFirstLeft = function() { //Loader
2017-10-26 19:00:52 +02:00
loadDisp('firstperson_lefthand')
2018-11-11 21:19:08 +01:00
display_preview.camPers.setFocalLength(12)
2019-02-03 21:09:35 +01:00
display_preview.camPers.position.set(0, 0, 32.4)
2018-11-11 21:19:08 +01:00
display_preview.controls.target.set(0,0,0)
display_preview.controls.enabled = false
2018-04-15 16:06:43 +02:00
displayReferenceObjects.bar(['monitor', 'bow'])
2018-12-02 19:37:06 +01:00
$('.single_canvas_wrapper').append('<div id="display_crosshair"></div>')
2017-10-26 19:00:52 +02:00
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadHead = function() { //Loader
loadDisp('head')
2017-10-26 19:00:52 +02:00
displayReferenceObjects.bar(['player', 'zombie', 'baby_zombie', 'armor_stand', 'armor_stand_small'])
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadGUI = function() { //Loader
2017-10-26 19:00:52 +02:00
loadDisp('gui')
setDisplayArea(0, 0, 0, 0, 0, 0, 0.4, 0.4, 0.4)
2018-11-11 21:19:08 +01:00
display_preview.camOrtho.zoom = 1
display_preview.controls.target.set(0,0,0)
display_preview.setOrthographicCamera(2)
display_preview.camOrtho.position.set(0,0,32)
2017-10-26 19:00:52 +02:00
displayReferenceObjects.bar(['inventory_nine', 'inventory_full', 'hud'])
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadGround = function() { //Loader
2017-10-26 19:00:52 +02:00
loadDisp('ground')
setDisplayArea(0, 12, 0, 0, 0, 0, 1, 1, 1)
ground_animation = true;
ground_timer = 0
displayReferenceObjects.bar(['block'])
}
2018-12-02 19:37:06 +01:00
DisplayMode.loadFixed = function() { //Loader
2017-10-26 19:00:52 +02:00
loadDisp('fixed')
setDisplayArea(0, 0, -8.5, 0, 0, 0, 0.5, 0.5, 0.5)
displayReferenceObjects.bar(['frame'])
}
2018-12-02 19:37:06 +01:00
DisplayMode.load = function(slot) {
switch (slot) {
2017-10-26 19:00:52 +02:00
case 'thirdperson_righthand':
2018-12-02 19:37:06 +01:00
DisplayMode.loadThirdRight()
2017-10-26 19:00:52 +02:00
break;
case 'thirdperson_lefthand':
2018-12-02 19:37:06 +01:00
DisplayMode.loadThirdLeft()
2017-10-26 19:00:52 +02:00
break;
case 'firstperson_righthand':
2018-12-02 19:37:06 +01:00
DisplayMode.loadFirstRight()
2017-10-26 19:00:52 +02:00
break;
case 'firstperson_lefthand':
2018-12-02 19:37:06 +01:00
DisplayMode.loadFirstLeft()
2017-10-26 19:00:52 +02:00
break;
case 'head':
2018-12-02 19:37:06 +01:00
DisplayMode.loadHead()
2017-10-26 19:00:52 +02:00
break;
case 'gui':
2018-12-02 19:37:06 +01:00
DisplayMode.loadGUI()
2017-10-26 19:00:52 +02:00
break;
case 'ground':
2018-12-02 19:37:06 +01:00
DisplayMode.loadGround()
2017-10-26 19:00:52 +02:00
break;
case 'fixed':
2018-12-02 19:37:06 +01:00
DisplayMode.loadFixed()
2017-10-26 19:00:52 +02:00
break;
}
}
2018-12-16 16:18:20 +01:00
DisplayMode.copy = function() {
2019-01-09 15:54:35 +01:00
Clipbench.display_slot = DisplayMode.slot.copy()
2017-10-26 19:00:52 +02:00
}
2018-12-16 16:18:20 +01:00
DisplayMode.paste = function() {
2018-12-29 12:26:02 +01:00
Undo.initEdit({display_slots: [display_slot]})
2019-01-09 15:54:35 +01:00
DisplayMode.slot.extend(Clipbench.display_slot)
2018-12-27 14:03:04 +01:00
DisplayMode.updateDisplayBase()
2018-12-29 12:26:02 +01:00
Undo.finishEdit('paste display slot')
}
DisplayMode.scrollSlider = function(type, value, el) {
Undo.initEdit({display_slots: [display_slot]})
var [channel, axis] = type.split('.')
DisplayMode.slot[channel][parseInt(axis)] = value
DisplayMode.slot.update()
Undo.finishEdit('change display slot')
2018-10-17 19:50:25 +02:00
}
2018-12-02 19:37:06 +01:00
window.changeDisplaySkin = function() {
2018-11-11 21:19:08 +01:00
var buttons = [
tl('message.display_skin.upload'),
tl('message.display_skin.reset')
]
if (isApp) {
buttons.splice(1, 0, tl('message.display_skin.name'))
}
2018-10-17 19:50:25 +02:00
Blockbench.showMessageBox({
translateKey: 'display_skin',
icon: 'icon-player',
2018-11-11 21:19:08 +01:00
buttons: buttons,
2018-10-17 19:50:25 +02:00
confirm: 0,
2018-11-11 21:19:08 +01:00
cancel: isApp ? 2 : 1
2018-10-17 19:50:25 +02:00
}, function(result) {
2018-11-11 21:19:08 +01:00
if (result === 0) {
Blockbench.import({
extensions: ['png'],
type: 'PNG Player Skin',
readtype: 'image'
}, function(files) {
Blockbench.showMessageBox({
translateKey: 'display_skin_model',
icon: 'icon-player',
buttons: [
tl('message.display_skin_model.classic'),
tl('message.display_skin_model.slim')
]
}, function(slim) {
if (files.length) {
settings.display_skin.value = (slim?'S':'C') +','+ (isApp ? files[0].path : files[0].content)
updateDisplaySkin()
}
})
})
} else if (result === 1 && isApp) {
2018-10-17 19:50:25 +02:00
if (typeof settings.display_skin.value === 'string' && settings.display_skin.value.substr(0, 9) === 'username:') {
var before = settings.display_skin.value.replace('username:', '')
} else {
var before = ''
}
Blockbench.textPrompt(tl('message.display_skin.name'), before, function(text) {
settings.display_skin.value = 'username:'+text
updateDisplaySkin()
})
} else {
2018-11-11 21:19:08 +01:00
settings.display_skin.value = false
updateDisplaySkin()
2018-10-17 19:50:25 +02:00
}
})
2017-10-26 19:00:52 +02:00
}
2018-10-17 19:50:25 +02:00
function updateDisplaySkin() {
var val = settings.display_skin.value
var source;
2018-11-11 21:19:08 +01:00
function setPSkin(skin, slim) {
2018-10-17 19:50:25 +02:00
if (!displayReferenceObjects.refmodels.player.material) {
return;
}
var mat = displayReferenceObjects.refmodels.player.material
var img = new Image()
try {
img.src = skin
} catch(err) {
}
img.onload = function() {
mat.map.dispose()
var tex = new THREE.Texture(img)
img.tex = tex;
img.tex.magFilter = THREE.NearestFilter
img.tex.minFilter = THREE.NearestFilter
this.tex.needsUpdate = true;
2018-11-11 21:19:08 +01:00
mat.map = tex;
2017-10-26 19:00:52 +02:00
2018-11-11 21:19:08 +01:00
displayReferenceObjects.refmodels.player.setModelVariant(slim ? 'alex' : 'steve')
}
2018-10-17 19:50:25 +02:00
}
2018-11-11 21:19:08 +01:00
if (!val || typeof val !== 'string') {
2018-10-17 19:50:25 +02:00
setPSkin('assets/player_skin.png')
2017-10-26 19:00:52 +02:00
2018-11-11 21:19:08 +01:00
} else if (val.substr(0, 9) === 'username:') {
2018-10-17 19:50:25 +02:00
var username = val.substr(9)
$.getJSON('https://api.mojang.com/users/profiles/minecraft/'+username, function(uuid) {
if (uuid && uuid.id) {
2017-10-26 19:00:52 +02:00
2018-10-17 19:50:25 +02:00
$.getJSON('https://sessionserver.mojang.com/session/minecraft/profile/'+uuid.id, function(data) {
if (data && data.properties) {
var skin_path;
2018-11-11 21:19:08 +01:00
var is_slim = false;
2018-10-17 19:50:25 +02:00
try {
2018-11-11 21:19:08 +01:00
var parsed = JSON.parse(atob(data.properties[0].value))
skin_path = parsed.textures.SKIN.url
if (parsed.textures.SKIN.metadata && parsed.textures.SKIN.metadata.model === 'slim') {
is_slim = true
}
2018-10-17 19:50:25 +02:00
} catch (err) {}
2018-11-11 21:19:08 +01:00
setPSkin(skin_path, is_slim)
2018-10-17 19:50:25 +02:00
}
})
}
})
} else {
2018-11-11 21:19:08 +01:00
if (val.substr(1,1) === ',') {
var slim = val.substr(0,1) === 'S'
val = val.substr(2)
} else {
var slim = false
}
setPSkin(val, slim)
2018-10-17 19:50:25 +02:00
}
//displayReferenceObjects.refmodels.player.material
}
2019-02-03 21:09:35 +01:00
onVueSetup(function() {
DisplayMode.vue = new Vue({
el: '#display_sliders',
data: {
slot: new DisplaySlot()
},
methods: {
isMirrored: (axis) => {
if (display[display_slot]) {
return display[display_slot].scale[axis] < 0;
}
},
change: (axis, channel) => {
if (channel === 'scale') {
var val = limitNumber(DisplayMode.slot.scale[axis], 0, 4)
DisplayMode.slot.scale[axis] = val;
if (holding_shift) {
DisplayMode.slot.scale[0] = val;
DisplayMode.slot.scale[1] = val;
DisplayMode.slot.scale[2] = val;
}
} else if (channel === 'translation') {
DisplayMode.slot.translation[axis] = limitNumber(DisplayMode.slot.translation[axis], -80, 80)||0;
} else {
DisplayMode.slot.rotation[axis] = Math.trimDeg(DisplayMode.slot.rotation[axis])||0;
}
DisplayMode.updateDisplayBase()
},
resetChannel: (channel) => {
var v = channel === 'scale' ? 1 : 0;
Undo.initEdit({display_slots: [display_slot]})
DisplayMode.slot.extend({[channel]: [v, v, v]})
if (channel === 'scale') {
DisplayMode.slot.extend({mirror: [false, false, false]})
}
Undo.finishEdit('reset display')
},
invert: (axis) => {
Undo.initEdit({display_slots: [display_slot]})
DisplayMode.slot.mirror[axis] = !DisplayMode.slot.mirror[axis];
DisplayMode.slot.update()
Undo.finishEdit('mirror display')
},
start: () => {
Undo.initEdit({display_slots: [display_slot]})
},
save: () => {
Undo.finishEdit('change_display')
}
}
})
})
2018-11-11 21:19:08 +01:00
BARS.defineActions(function() {
new Action({
id: 'add_display_preset',
icon: 'add',
category: 'display',
2019-02-03 21:09:35 +01:00
condition: () => display_mode,
2018-11-11 21:19:08 +01:00
click: function () {showDialog('create_preset')}
})
})
2018-12-02 19:37:06 +01:00
})()