From f02d189c5bee08e300d8251bd62d08e6e1a9e01b Mon Sep 17 00:00:00 2001 From: Lenny Lord <32369619+thelennylord@users.noreply.github.com> Date: Mon, 2 Nov 2020 20:39:15 +0530 Subject: [PATCH] Change UUID representation for heads in 1.16 Fixes #32 --- js/main.js | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/js/main.js b/js/main.js index 3baeada..8c14f64 100644 --- a/js/main.js +++ b/js/main.js @@ -738,13 +738,18 @@ function getHeadItem(){ // Use input as url // Best reference: http://redd.it/24quwx else if(equipCustomHeadMode == "url"){ - var uuid = generateUUID(); - var base64Value = btoa('{textures:{SKIN:{url:"'+equipHelmet+'"}}}'); + var base64Value = btoa('{"textures":{"SKIN":{"url":"'+equipHelmet+'"}}}'); - if (mcVersion == "1.8" || mcVersion == "1.10" || mcVersion == "1.11") { - return '{id:"skull",Count:1b,Damage:3b,tag:{SkullOwner:{Id:'+uuid+',Properties:{textures:[{Value:'+base64Value+'}]}}}}'; - } else { - return '{id:"player_head",Count:1b,tag:{SkullOwner:{Id:'+uuid+',Properties:{textures:[{Value:'+base64Value+'}]}}}}'; + switch (mcVersion) { + case "1.8": + case "1.9": + case "1.11": + return '{id:"skull",Count:1b,Damage:3b,tag:{SkullOwner:{Id:"'+generateUUID()+'",Properties:{textures:[{Value:"'+base64Value+'"}]}}}}'; + case "1.13": + case "1.14": + return '{id:"minecraft:player_head",Count:1b,tag:{SkullOwner:{Id:"'+generateUUID()+'",Properties:{textures:[{Value:"'+base64Value+'"}]}}}}'; + default: + return '{id:"minecraft:player_head",Count:1b,tag:{SkullOwner:{Id:'+generateIntArray()+',Properties:{textures:[{Value:"'+base64Value+'"}]}}}}'; } } @@ -900,6 +905,23 @@ function generateUUID(){ return uuid; } +function generateIntArray() { + const buffer = new Uint32Array(4); + const UUID = new DataView(buffer.buffer); + const paddings = [8, 4, 4, 4, 12]; + + let hexUUID = generateUUID().split("-").map((val, i) => val.padStart(paddings[i], "0")).join(""); + let ints = []; + + for (let i = 0; i < 4; i++) { + num = Number("0x" + hexUUID.substring(i*8, (i+1)*8)); + UUID.setInt32(i*4, num); + ints.push(UUID.getInt32(i*4)); + } + + return '[I;' + ints.join(",") + ']'; +} + function getDecimalRGB(rgb){ //The string has the format 'rgb(r, g, b)' @@ -1162,4 +1184,4 @@ function deleteSave(data) { localStorage.removeItem(data); loadScreen(); alert(`${data} has been deleted!`); -}; +}; \ No newline at end of file