1
0
Fork 0
mirror of https://github.com/haselkern/Minecraft-ArmorStand.git synced 2025-05-18 20:45:34 +00:00

Put armorstand in its own file

This commit is contained in:
Lars Martens 2021-08-28 12:32:24 +02:00
parent 3b54fdb5e3
commit 50c9566df7
2 changed files with 322 additions and 321 deletions

320
src/armorstand.js Normal file
View file

@ -0,0 +1,320 @@
import {generateIntArray, generateUUID, isXYZZero, xyzToTextArray} from "./util.js"
// The Armorstand will hold all attributes for an armor stand.
// TODO Move this to a different file
export class Armorstand {
constructor() {
// Rotation values for the body parts
this.rotation = 0
this.head = { x: 0, y: 0, z: 0 }
this.body = { x: 0, y: 0, z: 0 }
this.legLeft = { x: 0, y: 0, z: 0 }
this.legRight = { x: 0, y: 0, z: 0 }
this.armLeft = { x: 0, y: 0, z: 0 }
this.armRight = { x: 0, y: 0, z: 0 }
// Boolean attributes
this.invisible = false
this.invulnerable = false
this.persistenceRequired = false
this.noBasePlate = false
this.noGravity = false
this.showArms = false
this.small = false
this.marker = false
this.centerCorrected = false
this.enableEquipment = false
// Equipment attributes
this.equipHandRight = ""
this.equipHandLeft = ""
this.equipShoes = ""
this.equipLeggings = ""
this.equipChestplate = ""
this.equipHelmet = ""
// Valid values for this attribute are "item", "name", "url".
// TODO More explanation what each value does
this.helmetMode = "item"
// CustomName attributes
this.customName = ""
this.showCustomName = false
this.customNameColor = ""
this.customNameBold = false
this.customNameItalic = false
this.customNameObfuscated = false
this.customNameStrikethrough = false
}
getScale() {
if (this.small) {
return { x: 0.6, y: 0.6, z: 0.6 }
} else {
return { x: 1, y: 1, z: 1 }
}
}
// Return the code to generate this armorstand
getCode(mcVersion) {
//in 1.13, positions are no longer center-corrected. Adding .5 makes it centered. However for players it is already center-corrected
var code = "/summon armor_stand ~ ~ ~ {"
// if (!give) { // TODO
if (true) {
// Old entity name
if (mcVersion == "1.8" || mcVersion == "1.9"){
code = "/summon ArmorStand ~ ~ ~ {"
} else if (mcVersion == "1.11") {
code = "/summon armor_stand ~ ~ ~ {"
} else {
if (this.centerCorrected) {
code = "/summon armor_stand ~ ~-0.5 ~ {"
} else {
code = "/summon armor_stand ~ ~ ~ {"
}
}
} else {
if(mcVersion == "1.8" || mcVersion == "1.9" || mcVersion == "1.11"){
code = "/give @p minecraft:armor_stand 1 0 {EntityTag:{"
} else {
code = "/give @p armor_stand{EntityTag:{"
}
}
let tags = []
//CheckBoxes
if (this.invisible) {
tags.push("Invisible:1b")
}
if (this.invulnerable) {
tags.push("Invulnerable:1b")
}
if (this.persistenceRequired) {
tags.push("PersistenceRequired:1b")
}
if (this.noBasePlate) {
tags.push("NoBasePlate:1b")
}
if (this.noGravity) {
tags.push("NoGravity:1b")
}
if (this.showArms) {
tags.push("ShowArms:1b")
}
if (this.small) {
tags.push("Small:1b")
}
if (this.marker) {
tags.push("Marker:1b")
}
// Sliders
if(this.rotation != 0) {
tags.push("Rotation:["+this.rotation+"f]")
}
// Equipment
if (this.enableEquipment) {
if (mcVersion == "1.8") {
// Old 1.8 Equipment format
let armor = []
armor.push(this.getHandRightItem())
armor.push(this.getShoesItem())
armor.push(this.getLeggingsItem())
armor.push(this.getChestplateItem())
armor.push(this.getHeadItem(mcVersion))
tags.push("Equipment:["+armor.join(",")+"]")
} else {
// New 1.9+ Equipment format
let armor = []
armor.push(this.getShoesItem())
armor.push(this.getLeggingsItem())
armor.push(this.getChestplateItem())
armor.push(this.getHeadItem(mcVersion))
tags.push("ArmorItems:["+armor.join(",")+"]")
let hands = []
hands.push(this.getHandRightItem())
hands.push(this.getHandLeftItem())
tags.push("HandItems:["+hands.join(",")+"]")
}
}
// Custom name
if (this.customName) {
let name = []
if (mcVersion == "1.8" || mcVersion == "1.9" || mcVersion == "1.11") {
tags.push(`CustomName:"${this.customName}"`)
} else if (mcVersion == "1.13") {
name.push(this.getName())
name.push(this.getNameColor())
name.push(this.getNameBold())
name.push(this.getNameItalic())
name.push(this.getNameObfuscated())
name.push(this.getNameStrikethrough())
tags.push(`CustomName:"{${name.join("")}}"`)
} else {
// CustomNames from 1.14+ can now use single quotes to contain json
// Replace escaped double quotes with single quotes to make it look pretty
name.push(this.getName().replaceAll("\\", ""))
name.push(this.getNameColor().replaceAll("\\", ""))
name.push(this.getNameBold().replaceAll("\\", ""))
name.push(this.getNameItalic().replaceAll("\\", ""))
name.push(this.getNameObfuscated().replaceAll("\\", ""))
name.push(this.getNameStrikethrough().replaceAll("\\", ""))
tags.push(`CustomName:'{${name.join("")}}'`)
}
}
if (this.showCustomName) {
tags.push("CustomNameVisible:1b")
}
// DisabledSlots // TODO
// if(useDisabledSlots){
// tags.push("DisabledSlots:"+calculateDisabledSlotsFlag())
// }
// Now the pose
let pose = []
if (!isXYZZero(this.body)) {
pose.push("Body:"+xyzToTextArray(this.body))
}
if (!isXYZZero(this.head)) {
pose.push("Head:"+xyzToTextArray(this.head))
}
if (!isXYZZero(this.legLeft)) {
pose.push("LeftLeg:"+xyzToTextArray(this.legLeft))
}
if (!isXYZZero(this.legRight)) {
pose.push("RightLeg:"+xyzToTextArray(this.legRight))
}
if (this.showArms){
// Arms will also be added if they are 0, because if we omit them, Minecraft
// will give the arms a default rotation that does not match our version.
pose.push("LeftArm:"+xyzToTextArray(this.armLeft))
pose.push("RightArm:"+xyzToTextArray(this.armRight))
}
if (pose.length > 0) {
tags.push("Pose:{"+pose.join(",")+"}")
}
code += tags.join(",")
code += "}"
// if (give) { // TODO
// code += "}"
// if (mcVersion != "1.8" && mcVersion != "1.9" && mcVersion != "1.11") {
// code += " 1"
// }
// }
return code
}
getHandRightItem() {
if(this.equipHandRight == "") return "{}"
return "{id:\""+this.equipHandRight+"\",Count:1b}"
}
getHandLeftItem() {
if(this.equipHandLeft == "") return "{}"
return "{id:\""+this.equipHandLeft+"\",Count:1b}"
}
getShoesItem() {
if(this.equipShoes == "") return "{}"
return "{id:\""+this.equipShoes+"\",Count:1b"
// +getLeatherColorString($("#shoecolor"), isLeatherArmor(equipShoes)) // TODO Leather armor
+"}"
}
getLeggingsItem() {
if(this.equipLeggings == "") return "{}"
return "{id:\""+this.equipLeggings+"\",Count:1b"
// +getLeatherColorString($("#leggingscolor"), isLeatherArmor(this.equipLeggings))
+"}"
}
getChestplateItem() {
if(this.equipChestplate == "") return "{}"
return "{id:\""+this.equipChestplate+"\",Count:1b"
// +getLeatherColorString($("#chestplatecolor"), isLeatherArmor(this.equipChestplate))
+"}"
}
getHeadItem(mcVersion) {
if (this.equipHelmet == "") return "{}"
// Use input as item
if (this.helmetMode == "item") {
return "{id:\""+this.equipHelmet+"\",Count:1b"
// +getLeatherColorString($("#helmetcolor"), isLeatherArmor(equipHelmet))
+"}"
}
// Use input as player name
else if (this.helmetMode == "name") {
if (mcVersion == "1.8" || mcVersion == "1.10" || mcVersion == "1.11") {
return "{id:\"skull\",Count:1b,Damage:3b,tag:{SkullOwner:\""+this.equipHelmet+"\"}}"
} else {
return "{id:\"player_head\",Count:1b,tag:{SkullOwner:\""+this.equipHelmet+"\"}}"
}
}
// Use input as url
// Best reference: http://redd.it/24quwx
else if (this.helmetMode == "url") {
let base64Value = btoa('{"textures":{"SKIN":{"url":"'+this.equipHelmet+'"}}}')
if (mcVersion == "1.8" || mcVersion == "1.9" || mcVersion == "1.11"){
return '{id:"skull",Count:1b,Damage:3b,tag:{SkullOwner:{Id:"'+generateUUID()+'",Properties:{textures:[{Value:"'+base64Value+'"}]}}}}'
} else if (mcVersion == "1.14") {
return '{id:"minecraft:player_head",Count:1b,tag:{SkullOwner:{Id:"'+generateUUID()+'",Properties:{textures:[{Value:"'+base64Value+'"}]}}}}'
} else {
return '{id:"minecraft:player_head",Count:1b,tag:{SkullOwner:{Id:'+generateIntArray()+',Properties:{textures:[{Value:"'+base64Value+'"}]}}}}'
}
}
}
getName() {
if (this.customName == "") return ""
return `\\"text\\":\\"${this.customName}\\"`
}
getNameColor() {
if (this.customNameColor == "") return ""
return `,\\"color\\":\\"${this.customNameColor}\\"`
}
getNameBold() {
if (!this.customNameBold) return ""
return `,\\"bold\\":\\"true\\"`
}
getNameItalic() {
if (!this.customNameItalic) return ""
return `,\\"italic\\":\\"true\\"`
}
getNameStrikethrough() {
if (!this.customNameStrikethrough) return ""
return `,\\"strikethrough\\":\\"true\\"`
}
getNameObfuscated() {
if (!this.customNameObfuscated) return ""
return `,\\"obfuscated\\":\\"true\\"`
}
}