KubeJS Integrated - SAGESSE-CN/Armourers-Workshop GitHub Wiki

Wardrobe

AW add a wardrobe field to all entities in KubeJS

var wardrobe = entity.wardrobe;

Skin

Get skin file from sources:

skin_identifier = "ks:10830"; // from <GlobalSkinLibrary>/<globalSkinId>
skin_identifier = "db:xxxxx"; // from <WorldDir>/skin-database/objects/xxxxx
skin_identifier = "ws:/path/to/file.armour"; // from <GameDir>/skin-library/path/to/file.armour

Get a skin object:

skin = wardrobe.loadSkin(skin_identifier);
skin = wardrobe.loadSkinFromDB(skin_identifier);

That wardrobe.loadSkinFromDB will save the skin to the skin skin-database, and the returns a object referenced to skin-database. so you just call once at the right time, and then reuse this skin object.

skin_identifier = "ks:10830";
skin = all_loaded_skins[skin_identifier];
if (skin == null) {
    skin = wardrobe.loadSkinFromDB(skin_identifier);
    all_loaded_skins[skin_identifier] = skin;
    console.log("load skin from data base: " + skin_identifier);
}

Get a skin object from item stack:

skin = wardrobe.loadSkinByItem(itemStack);

Get a skin object to item stack:

itemStack = skin.asItemStack();

Get a skin object type:

skin_type = skin.type;

Get a skin object identifier:

skin_identifier = skin.identifier;

Add a skin into item stack:

skin.addTo(itemStack);

Clear a skin from item stack:

skin.removeFrom(itemStack);

Control

Although you can always get the wardrobe object, but you can't change wardrobe when AW unsupported entity, so you need check it first:

if (wardrobe.isValid()) {
    // dosomething.
}

Get a equipped skin item stack from entity:

itemStack = wardrobe.getItem("outfit", 0);

Equip a skin item stack into entity:

wardrobe.setItem(skin.type, 0, skin.asItemStack());

Unequip a skin item stack from entity, you need equip a empty item stack:

wardrobe.setItem("outfit", 0, Item.empty);

Unequip all skin item stack from entity:

wardrobe.clear();

Change the render optins:

wardrobe.enable("render.head");
wardrobe.enable("render.chest");
wardrobe.enable("render.legs");
wardrobe.enable("render.feet");
wardrobe.disable("render.extra");

Example

in the kubejs 6.x

var all_loaded_skins = {}
EntityEvents.spawned("minecraft:zombie", event => {
  var wardrobe = event.entity.wardrobe;
  if (wardrobe.isValid()) {
    var ids = ["ks:10830", "ks:13147"];
    var id = ids[Math.floor(Math.random()*ids.length)]; // random give skin
    var skin = all_loaded_skins[id];
    if (skin == null) {
      skin = wardrobe.loadSkinFromDB(id);
      all_loaded_skins[id] = skin;
      console.log("load skin from data base: " + id);
    }
    wardrobe.setItem(skin.type, 0, skin.asItemStack());
    console.log("set " + skin.type + " skin: " + id);
  }
})

in the kubejs 5.x

var all_loaded_skins = {}
onEvent("entity.spawned", event => {
  if (event.entity.type != "minecraft:zombie") {
    return
  }
  var wardrobe = event.entity.wardrobe;
  if (wardrobe.isValid()) {
    var ids = ["ks:10830", "ks:13147"];
    var id = ids[Math.floor(Math.random()*ids.length)]; // random give skin
    var skin = all_loaded_skins[id];
    if (skin == null) {
      skin = wardrobe.loadSkinFromDB(id);
      all_loaded_skins[id] = skin;
      console.log("load skin from data base: " + id);
    }
    wardrobe.setItem(skin.type, 0, skin.asItemStack());
    console.log("set " + skin.type + " skin: " + id);
  }
})
⚠️ **GitHub.com Fallback** ⚠️