diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots.json new file mode 100644 index 0000000000..264198cc15 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/boots", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/boots_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/boots_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_boots" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots_1.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots_1.json new file mode 100644 index 0000000000..fe6a221473 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_boots" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots_2.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots_2.json new file mode 100644 index 0000000000..27a0c192a7 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/boots_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_boots" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood.json new file mode 100644 index 0000000000..d2218f4994 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/hood", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/hood_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/hood_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_hood" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood_1.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood_1.json new file mode 100644 index 0000000000..4631bfe281 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_hood" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood_2.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood_2.json new file mode 100644 index 0000000000..0761f55547 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/hood_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_hood" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs.json new file mode 100644 index 0000000000..03d57e0536 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/legs", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/legs_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/legs_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_legs" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs_1.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs_1.json new file mode 100644 index 0000000000..93054eafd4 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_legs" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs_2.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs_2.json new file mode 100644 index 0000000000..b5667a0aec --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/legs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_legs" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic.json new file mode 100644 index 0000000000..da671641b8 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/tunic", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/tunic_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/tunic_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_tunic" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic_1.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic_1.json new file mode 100644 index 0000000000..797dbbc608 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_tunic" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic_2.json b/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic_2.json new file mode 100644 index 0000000000..a665bce0cb --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/robes/tunic_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_tunic" + } +} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java b/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java index c0023ece4f..e25faade11 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java @@ -158,20 +158,6 @@ default FrozenPigment getColorizer(Player player) { return FrozenPigment.DEFAULT.get(); } - ArmorMaterial DUMMY_ARMOR_MATERIAL = new ArmorMaterial( - Collections.emptyMap(), - 0, - SoundEvents.ARMOR_EQUIP_LEATHER, - () -> Ingredient.EMPTY, - Collections.emptyList(), - 0, - 0 - ); - - default ArmorMaterial robesMaterial() { - return DUMMY_ARMOR_MATERIAL; - } - /** * Location in the userdata of the ravenmind */ diff --git a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java index 0fcaac0f46..70b12989bc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java @@ -67,6 +67,10 @@ public static void init() { registerVariantOverrides(HexItems.CYPHER.get(), HexItems.CYPHER.get()::getVariant); registerVariantOverrides(HexItems.TRINKET.get(), HexItems.TRINKET.get()::getVariant); registerVariantOverrides(HexItems.ARTIFACT.get(), HexItems.ARTIFACT.get()::getVariant); + registerVariantOverrides(HexItems.ROBES_HOOD.get(), HexItems.ROBES_HOOD.get()::getVariant); + registerVariantOverrides(HexItems.ROBES_TUNIC.get(), HexItems.ROBES_TUNIC.get()::getVariant); + registerVariantOverrides(HexItems.ROBES_LEGS.get(), HexItems.ROBES_LEGS.get()::getVariant); + registerVariantOverrides(HexItems.ROBES_BOOTS.get(), HexItems.ROBES_BOOTS.get()::getVariant); IClientXplatAbstractions.INSTANCE.registerItemProperty(HexItems.THOUGHT_KNOT.get(), ItemThoughtKnot.WRITTEN_PRED, (stack, level, holder, holderID) -> { if (stack.has(HexDataComponents.IOTA_HOLDER_IOTA.get())) { diff --git a/Common/src/main/java/at/petrak/hexcasting/client/model/HexModelLayers.java b/Common/src/main/java/at/petrak/hexcasting/client/model/HexModelLayers.java index 11dc412327..eeeee86310 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/model/HexModelLayers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/model/HexModelLayers.java @@ -13,7 +13,9 @@ public class HexModelLayers { public static final ModelLayerLocation ALTIORA = make("altiora"); - public static final ModelLayerLocation ROBES = make("robes"); + public static final ModelLayerLocation ROBES_0 = make("robes_0"); + public static final ModelLayerLocation ROBES_1 = make("robes_1"); + public static final ModelLayerLocation ROBES_2 = make("robes_2"); private static ModelLayerLocation make(String name) { return make(name, "main"); @@ -29,6 +31,8 @@ private static ModelLayerLocation make(String name, String layer) { // https://github.com/VazkiiMods/Botania/blob/1.19.x/Xplat/src/main/java/vazkii/botania/client/model/BotaniaLayerDefinitions.java public static void init(BiConsumer> consumer) { consumer.accept(ALTIORA, ElytraModel::createLayer); - consumer.accept(ROBES, HexRobesModels::variant1); + consumer.accept(ROBES_0, HexRobesModel::variant0); + consumer.accept(ROBES_1, HexRobesModel::variant1); + consumer.accept(ROBES_2, HexRobesModel::variant2); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/model/HexRobesModel.java b/Common/src/main/java/at/petrak/hexcasting/client/model/HexRobesModel.java new file mode 100644 index 0000000000..c9c24a28dc --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/client/model/HexRobesModel.java @@ -0,0 +1,315 @@ +package at.petrak.hexcasting.client.model; + +// Made with Blockbench 4.6.1 +// Exported for Minecraft version 1.17 or later with Mojang mappings +// Paste this class into your mod and generate all required imports + +import at.petrak.hexcasting.api.HexAPI; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.HumanoidArmorModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; + +public class HexRobesModel extends HumanoidArmorModel { + // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into + // this model's constructor + // public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(modLoc("robes"), "main"); + + final EquipmentSlot slot; + + public final ModelPart head; + public final ModelPart body; + public final ModelPart rightArm; + public final ModelPart leftArm; + public final ModelPart rightLeg; + public final ModelPart leftLeg; + + public HexRobesModel(ModelPart root, EquipmentSlot slot) { + super(root); + this.slot = slot; + + this.head = root.getChild("head"); + this.body = root.getChild("body"); + this.rightArm = root.getChild("right_arm"); + this.leftArm = root.getChild("left_arm"); + this.rightLeg = root.getChild("right_leg"); + this.leftLeg = root.getChild("left_leg"); + } + + public static LayerDefinition variant0() { + MeshDefinition meshdef = new MeshDefinition(); + PartDefinition root = meshdef.getRoot(); + + root.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO); + + var head = root.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO); + + head.addOrReplaceChild("hood", + CubeListBuilder.create() + .texOffs(0, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.3F)) + .texOffs(0, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.4F)), + PartPose.offset(4.0F, -8.0F, -4.0F)); + + head.addOrReplaceChild("horns", + CubeListBuilder.create() + .texOffs(24, 0).addBox(8.5F, 0.0F, 0.0F, 8.0F, 4.0F, 0.0F, new CubeDeformation(0.3F)) + .texOffs(24, 0).mirror().addBox(-7F, 0.0F, 0.0F, 8.0F, 4.0F, 0.0F, new CubeDeformation(0.3F)) + .mirror(false), + PartPose.offset(-4.8F, -8.2F, 0.0F)); + + var body = root.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO); + + body.addOrReplaceChild("tunic", + CubeListBuilder.create() + .texOffs(40, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)) + .texOffs(40, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.4F)), + PartPose.offset(4.0F, 0.0F, -2.0F)); + + var rightArm = root.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); + + rightArm.addOrReplaceChild("right_sleeve", + CubeListBuilder.create() + .texOffs(0, 32).addBox(0.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(-3.0F, -2.0F, -2.0F)); + + var leftArm = root.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); + + leftArm.addOrReplaceChild("left_sleeve", + CubeListBuilder.create() + .texOffs(0, 32).mirror().addBox(0, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)) + .mirror(false), + PartPose.offset(-1.0F, -2.0F, -2.0F)); + + var rightLeg = root.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO); + + PartDefinition Right_r1 = rightLeg.addOrReplaceChild("right_skirt", + CubeListBuilder.create() + .texOffs(48, 32).mirror().addBox(-2.2F, -0.5F, -6.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.4F)) + .mirror(false), + PartPose.offsetAndRotation(0.0F, 0.0F, 4.0F, 0.0F, 0.0F, 0.1309F)); + + rightLeg.addOrReplaceChild("right_boot", + CubeListBuilder.create() + .texOffs(16, 41).addBox(-4.0F, 0.0F, 0.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(2.0F, 9.0F, -2.0F)); + + var leftLeg = root.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO); + + PartDefinition Left_r1 = leftLeg.addOrReplaceChild("left_skirt", + CubeListBuilder.create() + .texOffs(48, 32).addBox(-1.8F, -0.5F, -6.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.4F)), + PartPose.offsetAndRotation(0.0F, 0.0F, 4.0F, 0.0F, 0.0F, -0.1309F)); + + leftLeg.addOrReplaceChild("left_boot", + CubeListBuilder.create() + .texOffs(16, 41).addBox(0.0F, 0.0F, 0.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(-2.0F, 9.0F, -2.0F)); + + return LayerDefinition.create(meshdef, 64, 64); + } + + public static LayerDefinition variant1() { + MeshDefinition meshdef = new MeshDefinition(); + PartDefinition root = meshdef.getRoot(); + + root.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO); + + var head = root.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO); + + head.addOrReplaceChild("hood", + CubeListBuilder.create() + .texOffs(0, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.3F)) + .texOffs(0, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.4F)), + PartPose.offset(4.0F, -8.0F, -4.0F)); + + head.addOrReplaceChild("right_horn", + CubeListBuilder.create() + .texOffs(24, 0).addBox(-4.0F, -2.0F, 0.0F, 8.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)), + PartPose.offsetAndRotation(4.25F, -12.25F, 0.0F, 0.0F, 0.0F, -1.5708F)); + + head.addOrReplaceChild("left_horn", + CubeListBuilder.create() + .texOffs(24, 0).mirror().addBox(-4.0F, -2.0F, 0.0F, 8.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)) + .mirror(false), + PartPose.offsetAndRotation(-4.25F, -12.25F, 0.0F, 0.0F, 0.0F, 1.5708F)); + + var body = root.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO); + + body.addOrReplaceChild("tunic", + CubeListBuilder.create() + .texOffs(40, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)) + .texOffs(40, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.4F)), + PartPose.offset(4.0F, 0.0F, -2.0F)); + + var rightArm = root.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); + + rightArm.addOrReplaceChild("right_sleeve", + CubeListBuilder.create() + .texOffs(0, 32).addBox(0.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(-3.0F, -2.0F, -2.0F)); + + var leftArm = root.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); + + leftArm.addOrReplaceChild("left_sleeve", + CubeListBuilder.create() + .texOffs(0, 32).mirror().addBox(0, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)) + .mirror(false), + PartPose.offset(-1.0F, -2.0F, -2.0F)); + + var rightLeg = root.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO); + + rightLeg.addOrReplaceChild("right_skirt", + CubeListBuilder.create() + .texOffs(48, 32).mirror().addBox(-4.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.4F)) + .mirror(false), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + rightLeg.addOrReplaceChild("right_boot", + CubeListBuilder.create() + .texOffs(16, 40).addBox(-4.0F, 8.0F, 0.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + var leftLeg = root.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO); + + leftLeg.addOrReplaceChild("left_skirt", + CubeListBuilder.create() + .texOffs(48, 32).addBox(-4.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.4F)), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + leftLeg.addOrReplaceChild("left_boot", + CubeListBuilder.create() + .texOffs(16, 40).addBox(-4.0F, 8.0F, 0.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + return LayerDefinition.create(meshdef, 64, 64); + } + + public static LayerDefinition variant2() { + MeshDefinition meshdef = new MeshDefinition(); + PartDefinition root = meshdef.getRoot(); + + root.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO); + + var head = root.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO); + + head.addOrReplaceChild("hood", + CubeListBuilder.create() + .texOffs(0, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.3F)) + .texOffs(0, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.4F)), + PartPose.offset(4.0F, -8.0F, -4.0F)); + + head.addOrReplaceChild("right_horn", + CubeListBuilder.create() + .texOffs(24, 0).mirror().addBox(-7.0F, -4.0F, 0.0F, 8.0F, 8.0F, 0.0F, new CubeDeformation(0.3F, 0.3F, 0.0F)) + .mirror(false), + PartPose.offsetAndRotation(-5.0F, -8.7F, 0.0F, 0.0F, 0.0F, 1.309F)); + + head.addOrReplaceChild("left_horn", + CubeListBuilder.create() + .texOffs(24, 0).addBox(-1.0F, -4.0F, 0.0F, 8.0F, 8.0F, 0.0F, new CubeDeformation(0.3F, 0.3F, 0.0F)), + PartPose.offsetAndRotation(5.0F, -8.7F, 0.0F, 0.0F, 0.0F, -1.309F)); + + var body = root.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO); + + body.addOrReplaceChild("tunic", + CubeListBuilder.create() + .texOffs(40, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)) + .texOffs(40, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.4F)), + PartPose.offset(4.0F, 0.0F, -2.0F)); + + var sash = body.addOrReplaceChild("sash", + CubeListBuilder.create() + .texOffs(32, 48).mirror().addBox(7.4F, -3.9F, 0.0F, 3.0F, 3.0F, 6.0F, new CubeDeformation(0.1F)) + .mirror(false), + PartPose.offset(-5.45F, 10.8F, -3.0F)); + + sash.addOrReplaceChild("strap", + CubeListBuilder.create() + .texOffs(0, 48).mirror().addBox(-0.95F, -13.2F, -3.0F, 10.0F, 3.0F, 6.0F, new CubeDeformation(0.0F)) + .mirror(false), + PartPose.offsetAndRotation(6.2F, 11.45F, 3.0F, 0.0F, 0.0F, -0.3927F)); + + var rightArm = root.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); + + rightArm.addOrReplaceChild("right_sleeve", + CubeListBuilder.create() + .texOffs(0, 32).addBox(0.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(-3.0F, -2.0F, -2.0F)); + + var leftArm = root.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); + + leftArm.addOrReplaceChild("left_sleeve", + CubeListBuilder.create() + .texOffs(0, 32).mirror().addBox(0, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.3F)) + .mirror(false), + PartPose.offset(-1.0F, -2.0F, -2.0F)); + + var rightLeg = root.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO); + + rightLeg.addOrReplaceChild("right_skirt", + CubeListBuilder.create() + .texOffs(48, 32).addBox(-4.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.35F)), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + rightLeg.addOrReplaceChild("right_boot", + CubeListBuilder.create() + .texOffs(16, 40).addBox(-4.0F, 8.0F, 0.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + var leftLeg = root.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO); + + leftLeg.addOrReplaceChild("left_skirt", + CubeListBuilder.create() + .texOffs(48, 32).mirror().addBox(-4.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.35F)) + .mirror(false), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + leftLeg.addOrReplaceChild("left_boot", + CubeListBuilder.create() + .texOffs(16, 40).addBox(-4.0F, 8.0F, 0.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.3F)), + PartPose.offset(2.0F, 0.0F, -2.0F)); + + return LayerDefinition.create(meshdef, 64, 64); + } + + @Override + public void renderToBuffer(PoseStack ms, VertexConsumer buffer, int light, int overlay, int color) { + renderArmorPart(slot); + super.renderToBuffer(ms, buffer, light, overlay, color); + } + + private void renderArmorPart(EquipmentSlot slot) { + setAllVisible(false); + rightLeg.getChild("right_skirt").visible = false; + leftLeg.getChild("left_skirt").visible = false; + rightLeg.getChild("right_boot").visible = false; + leftLeg.getChild("left_boot").visible = false; + + switch (slot) { + case HEAD -> head.visible = true; + case CHEST -> { + body.visible = true; + rightArm.visible = true; + leftArm.visible = true; + } + case LEGS -> { + rightLeg.visible = true; + leftLeg.visible = true; + rightLeg.getChild("right_skirt").visible = true; + leftLeg.getChild("left_skirt").visible = true; + } + case FEET -> { + rightLeg.visible = true; + leftLeg.visible = true; + rightLeg.getChild("right_boot").visible = true; + leftLeg.getChild("left_boot").visible = true; + } + case MAINHAND, OFFHAND -> { + } + } + } +} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/client/model/HexRobesModels.java b/Common/src/main/java/at/petrak/hexcasting/client/model/HexRobesModels.java deleted file mode 100644 index 7f35494cab..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/client/model/HexRobesModels.java +++ /dev/null @@ -1,70 +0,0 @@ -package at.petrak.hexcasting.client.model; - -// Made with Blockbench 4.6.1 -// Exported for Minecraft version 1.17 or later with Mojang mappings -// Paste this class into your mod and generate all required imports - -import net.minecraft.client.model.geom.ModelLayerLocation; -import net.minecraft.client.model.geom.PartPose; -import net.minecraft.client.model.geom.builders.*; - -import static at.petrak.hexcasting.api.HexAPI.modLoc; - -public class HexRobesModels { - // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into - // this model's constructor - public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(modLoc("robes"), "main"); - - public static LayerDefinition variant1() { - MeshDefinition meshdefinition = new MeshDefinition(); - PartDefinition partdefinition = meshdefinition.getRoot(); - - PartDefinition Hood = partdefinition.addOrReplaceChild("Hood", - CubeListBuilder.create() - .texOffs(0, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F)) - .texOffs(0, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F)), - PartPose.offset(4.0F, -8.0F, -4.0F)); - - PartDefinition Horns = partdefinition.addOrReplaceChild("Horns", - CubeListBuilder.create() - .texOffs(24, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)) - .texOffs(24, 0).mirror().addBox(9.5F, 0.0F, 0.0F, 8.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)) - .mirror(false), - PartPose.offset(-4.8F, -8.2F, 0.0F)); - - PartDefinition Torso = partdefinition.addOrReplaceChild("Torso", - CubeListBuilder.create() - .texOffs(40, 0).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(40, 16).addBox(-8.0F, 0.0F, 0.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)), - PartPose.offset(4.0F, 0.0F, -2.0F)); - - PartDefinition Arms = partdefinition.addOrReplaceChild("Arms", - CubeListBuilder.create() - .texOffs(0, 32).addBox(-4.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(0, 32).mirror().addBox(8.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)) - .mirror(false), - PartPose.offset(-4.0F, 0.0F, -2.0F)); - - PartDefinition Skirt = partdefinition.addOrReplaceChild("Skirt", CubeListBuilder.create(), - PartPose.offset(0.0F, 12.0F, -2.0F)); - - PartDefinition Left_r1 = Skirt.addOrReplaceChild("Left_r1", - CubeListBuilder.create() - .texOffs(48, 32).mirror().addBox(0.1F, 0.0F, -4.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)) - .mirror(false), - PartPose.offsetAndRotation(0.0F, 0.0F, 4.0F, 0.0F, 0.0F, -0.1309F)); - - PartDefinition Right_r1 = Skirt.addOrReplaceChild("Right_r1", - CubeListBuilder.create() - .texOffs(48, 32).addBox(-4.0F, 0.0F, -4.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)), - PartPose.offsetAndRotation(0.0F, 0.0F, 4.0F, 0.0F, 0.0F, 0.1309F)); - - PartDefinition Legs = partdefinition.addOrReplaceChild("Legs", - CubeListBuilder.create().texOffs(16, 41) - .addBox(-4.0F, 0.0F, 0.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(16, 41).addBox(0.0F, 0.0F, 0.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.0F)), - PartPose.offset(0.0F, 21.0F, -2.0F)); - - return LayerDefinition.create(meshdefinition, 64, 64); - } -} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java index 471e5861bd..0e461a6df1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Collections; +import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.function.Consumer; @@ -111,19 +112,4 @@ public Consumer defaultBrainsweepingBehavior() { public FrozenPigment getColorizer(Player player) { return IXplatAbstractions.INSTANCE.getPigment(player); } - - ArmorMaterial ARMOR_MATERIAL = new ArmorMaterial( - Collections.emptyMap(), - 0, - SoundEvents.ARMOR_EQUIP_LEATHER, - () -> Ingredient.EMPTY, - Collections.emptyList(), // TODO check textures. If not - use robes here from original code - 0, - 0 - ); - - @Override - public ArmorMaterial robesMaterial() { - return ARMOR_MATERIAL; - } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java b/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java index fbe194e85f..0e3d52798f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java @@ -1,19 +1,67 @@ package at.petrak.hexcasting.common.items.armor; +import at.petrak.hexcasting.annotations.SoftImplement; import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.item.VariantItem; +import at.petrak.hexcasting.client.model.HexModelLayers; +import at.petrak.hexcasting.client.model.HexRobesModel; +import at.petrak.hexcasting.common.lib.HexArmorMaterials; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; /** * To get the armor model in; - * On forge: cursed self-mixin - * On fabric: hook in ClientInit + * On forge: client item extension in ForgeHexClientInitializer (line 161) + * On fabric: custom HexRobesRenderer set up from FabricHexClientInitializer (line 60) */ -public class ItemRobes extends ArmorItem { - public final ArmorItem.Type type; +public class ItemRobes extends ArmorItem implements VariantItem { + public final Type type; + private @Nullable HexRobesModel[] models; - public ItemRobes(ArmorItem.Type type, Properties properties) { - super(Holder.direct(HexAPI.instance().robesMaterial()), type, properties); + public ItemRobes(Type type, Properties properties) { + super(HexArmorMaterials.ROBES, type, properties); this.type = type; } + + public static HexRobesModel[] provideArmorModelsForSlot(EquipmentSlot slot) { + EntityModelSet models = Minecraft.getInstance().getEntityModels(); + return new HexRobesModel[] { + new HexRobesModel(models.bakeLayer(HexModelLayers.ROBES_0), slot), + new HexRobesModel(models.bakeLayer(HexModelLayers.ROBES_1), slot), + new HexRobesModel(models.bakeLayer(HexModelLayers.ROBES_2), slot) + }; + } + + public HexRobesModel[] getArmorModels() { + if (models == null) models = provideArmorModelsForSlot(getEquipmentSlot()); + return models; + } + + @SoftImplement("IItemExtension") + public ResourceLocation getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, ArmorMaterial.Layer layer, boolean innerModel) { + return HexAPI.modLoc("textures/armor/robes"+getVariant(stack)+".png"); + } + + @Override + public Component getName(ItemStack pStack) { + var descID = this.getDescriptionId(pStack); + var robesItem = (ItemRobes) pStack.getItem(); + if (robesItem.type == Type.LEGGINGS) { + return Component.translatable(descID + "." + robesItem.getVariant(pStack)); + } else { + return Component.translatable(descID); + } + } + + @Override + public int numVariants() { return 3; } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexArmorMaterials.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexArmorMaterials.java new file mode 100644 index 0000000000..f2cfd6b1f0 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexArmorMaterials.java @@ -0,0 +1,36 @@ +package at.petrak.hexcasting.common.lib; + +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.xplat.IXplatAbstractions; +import at.petrak.hexcasting.xplat.IXplatRegister; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.item.ArmorItem.Type; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ArmorMaterials; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.crafting.Ingredient; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class HexArmorMaterials { + private static final IXplatRegister REGISTER = IXplatAbstractions.INSTANCE.createRegistar(Registries.ARMOR_MATERIAL); + + public static void register() { + REGISTER.registerAll(); + } + + public static final Holder ROBES = REGISTER.registerHolder("robes", () -> + new ArmorMaterial( + Map.of(), // no defense here since it's specified with the other attributes in ItemRobes + ArmorMaterials.GOLD.value().enchantmentValue(), + SoundEvents.ARMOR_EQUIP_LEATHER, + () -> Ingredient.EMPTY, // TODO: repair with whatever it's crafted with + List.of(new ArmorMaterial.Layer(HexAPI.modLoc("robes"))), + 0, 0 // no toughness or knockback resistance + )); +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index e54537b9c7..16d4c1cdfa 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -8,6 +8,7 @@ import at.petrak.hexcasting.common.items.ItemLens; import at.petrak.hexcasting.common.items.ItemLoreFragment; import at.petrak.hexcasting.common.items.ItemStaff; +import at.petrak.hexcasting.common.items.armor.ItemRobes; import at.petrak.hexcasting.common.items.magic.*; import at.petrak.hexcasting.common.items.pigment.*; import at.petrak.hexcasting.common.items.storage.*; @@ -75,6 +76,11 @@ public static void registerItemsForCreativeTab(ResourceKey tabK IXplatAbstractions.INSTANCE.addEquipSlotFabric(EquipmentSlot.HEAD) .stacksTo(1).attributes(ItemLens.MODIFIERS))); + public static final Supplier ROBES_HOOD = make("robes/hood", () -> new ItemRobes(ArmorItem.Type.HELMET, unstackable())); + public static final Supplier ROBES_TUNIC = make("robes/tunic", () -> new ItemRobes(ArmorItem.Type.CHESTPLATE, unstackable())); + public static final Supplier ROBES_LEGS = make("robes/legs", () -> new ItemRobes(ArmorItem.Type.LEGGINGS, unstackable())); + public static final Supplier ROBES_BOOTS = make("robes/boots", () -> new ItemRobes(ArmorItem.Type.BOOTS, unstackable())); + public static final Supplier ABACUS = make("abacus", () -> new ItemAbacus(unstackable())); public static final Supplier THOUGHT_KNOT = make("thought_knot", () -> new ItemThoughtKnot(unstackable())); public static final Supplier FOCUS = make("focus", () -> new ItemFocus(unstackable())); diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 4cbf32ca26..58045bf734 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -62,6 +62,15 @@ abacus: "Abacus", jeweler_hammer: "Jeweler's Hammer", sub_sandwich: "Submarine Sandwich", + + robes: { + hood: "Grand Caster Hood", + tunic: "Grand Caster Tunic", + "legs.0": "Grand Caster Robe", + "legs.1": "Grand Caster Pants", + "legs.2": "Grand Caster Leggings", + boots: "Grand Caster Boots", + }, dye_colorizer_: { white: "White Pigment", diff --git a/Common/src/main/resources/assets/hexcasting/textures/armor/robes0.png b/Common/src/main/resources/assets/hexcasting/textures/armor/robes0.png new file mode 100644 index 0000000000..2218a6e628 Binary files /dev/null and b/Common/src/main/resources/assets/hexcasting/textures/armor/robes0.png differ diff --git a/Common/src/main/resources/assets/hexcasting/textures/armor/robes1.png b/Common/src/main/resources/assets/hexcasting/textures/armor/robes1.png index 2218a6e628..cb621b6072 100644 Binary files a/Common/src/main/resources/assets/hexcasting/textures/armor/robes1.png and b/Common/src/main/resources/assets/hexcasting/textures/armor/robes1.png differ diff --git a/Common/src/main/resources/assets/hexcasting/textures/armor/robes2.png b/Common/src/main/resources/assets/hexcasting/textures/armor/robes2.png index cb621b6072..cde5477699 100644 Binary files a/Common/src/main/resources/assets/hexcasting/textures/armor/robes2.png and b/Common/src/main/resources/assets/hexcasting/textures/armor/robes2.png differ diff --git a/Common/src/main/resources/assets/hexcasting/textures/armor/robes3.png b/Common/src/main/resources/assets/hexcasting/textures/armor/robes3.png deleted file mode 100644 index cde5477699..0000000000 Binary files a/Common/src/main/resources/assets/hexcasting/textures/armor/robes3.png and /dev/null differ diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/1-boots.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/0_boots.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/1-boots.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/0_boots.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/1-helmet.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/0_hood.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/1-helmet.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/0_hood.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/1-leggings.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/0_legs.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/1-leggings.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/0_legs.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/1-chestplate.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/0_tunic.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/1-chestplate.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/0_tunic.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/2-boots.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/1_boots.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/2-boots.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/1_boots.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/2-helmet.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/1_hood.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/2-helmet.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/1_hood.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/2-leggings.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/1_legs.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/2-leggings.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/1_legs.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/2-chestplate.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/1_tunic.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/2-chestplate.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/1_tunic.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/3-boots.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/2_boots.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/3-boots.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/2_boots.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/3-helmet.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/2_hood.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/3-helmet.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/2_hood.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/3-leggings.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/2_legs.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/3-leggings.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/2_legs.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/robes/3-chestplate.png b/Common/src/main/resources/assets/hexcasting/textures/item/robes/2_tunic.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/item/robes/3-chestplate.png rename to Common/src/main/resources/assets/hexcasting/textures/item/robes/2_tunic.png diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt index 76130ce49a..6ad22c56f1 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt @@ -9,6 +9,7 @@ import at.petrak.hexcasting.client.model.HexModelLayers import at.petrak.hexcasting.client.render.HexAdditionalRenderers import at.petrak.hexcasting.common.casting.PatternRegistryManifest import at.petrak.hexcasting.common.lib.HexParticles +import at.petrak.hexcasting.fabric.client.HexRobesRenderer import at.petrak.hexcasting.fabric.event.MouseScrollCallback import at.petrak.hexcasting.fabric.network.FabricPacketHandler import at.petrak.hexcasting.interop.HexInterop @@ -56,7 +57,7 @@ object FabricHexClientInitializer : ClientModInitializer { RegisterClientStuff.init() HexModelLayers.init { loc, defn -> EntityModelLayerRegistry.registerModelLayer(loc, defn::get) } - + HexRobesRenderer.init() HexParticles.FactoryHandler.registerFactories(object : HexParticles.FactoryHandler.Consumer { override fun register(type: ParticleType, constructor: Function>) { diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index 878e371aeb..505cb68926 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -5,11 +5,7 @@ import at.petrak.hexcasting.api.addldata.ADMediaHolder import at.petrak.hexcasting.api.advancements.HexAdvancementTriggers import at.petrak.hexcasting.api.casting.ActionRegistryEntry import at.petrak.hexcasting.api.casting.iota.DoubleIota -import at.petrak.hexcasting.api.item.HexHolderItem -import at.petrak.hexcasting.api.item.IotaHolderItem -import at.petrak.hexcasting.api.item.MediaHolderItem -import at.petrak.hexcasting.api.item.PigmentItem -import at.petrak.hexcasting.api.item.VariantItem +import at.petrak.hexcasting.api.item.* import at.petrak.hexcasting.api.misc.MediaConstants import at.petrak.hexcasting.api.mod.HexConfig import at.petrak.hexcasting.api.mod.HexStatistics @@ -23,7 +19,6 @@ import at.petrak.hexcasting.common.casting.actions.spells.great.OpAltiora import at.petrak.hexcasting.common.command.PatternResKeyArgument import at.petrak.hexcasting.common.entities.HexEntities import at.petrak.hexcasting.common.items.ItemJewelerHammer -import at.petrak.hexcasting.common.items.magic.ItemMediaBattery import at.petrak.hexcasting.common.items.storage.ItemScroll import at.petrak.hexcasting.common.lib.* import at.petrak.hexcasting.common.lib.hex.* @@ -32,8 +27,6 @@ import at.petrak.hexcasting.common.misc.BrainsweepingEvents import at.petrak.hexcasting.common.misc.PlayerPositionRecorder import at.petrak.hexcasting.common.misc.RegisterMisc import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry -import at.petrak.hexcasting.common.lib.HexBrainsweepeeIngredients -import at.petrak.hexcasting.common.lib.HexStateIngredients import at.petrak.hexcasting.fabric.cc.HexCardinalComponents import at.petrak.hexcasting.fabric.cc.adimpl.* import at.petrak.hexcasting.fabric.event.VillagerConversionCallback @@ -215,6 +208,7 @@ object FabricHexInitializer : ModInitializer { HexRecipeStuffRegistry.register() HexParticles.register() + HexArmorMaterials.register() HexLootFunctions.register() diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/client/HexRobesRenderer.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/client/HexRobesRenderer.java new file mode 100644 index 0000000000..48607da62c --- /dev/null +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/client/HexRobesRenderer.java @@ -0,0 +1,34 @@ +package at.petrak.hexcasting.fabric.client; + +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.common.items.armor.ItemRobes; +import at.petrak.hexcasting.common.lib.HexArmorMaterials; +import at.petrak.hexcasting.common.lib.HexItems; +import net.fabricmc.fabric.api.client.rendering.v1.ArmorRenderer; +import net.minecraft.world.item.Item; + +import java.util.List; + +public class HexRobesRenderer { + public static final List ROBE_ITEMS = + List.of( + HexItems.ROBES_HOOD.get(), + HexItems.ROBES_TUNIC.get(), + HexItems.ROBES_LEGS.get(), + HexItems.ROBES_BOOTS.get() + ); + + public static void init() { + ArmorRenderer renderer = (matrices, vertexConsumers, stack, entity, slot, light, contextModel) -> { + + ItemRobes armor = (ItemRobes) stack.getItem(); + var model = armor.getArmorModels()[armor.getVariant(stack)]; + var texture = armor.getArmorTexture(stack, entity, slot, HexArmorMaterials.ROBES.value().layers().getFirst(), false); + contextModel.copyPropertiesTo(model); + + ArmorRenderer.renderPart(matrices, vertexConsumers, light, stack, model, texture); + + }; + ArmorRenderer.register(renderer, ROBE_ITEMS.toArray(new Item[0])); + } +} diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots.json new file mode 100644 index 0000000000..264198cc15 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/boots", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/boots_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/boots_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_boots" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots_1.json new file mode 100644 index 0000000000..fe6a221473 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_boots" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots_2.json new file mode 100644 index 0000000000..27a0c192a7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/boots_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_boots" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood.json new file mode 100644 index 0000000000..d2218f4994 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/hood", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/hood_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/hood_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_hood" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood_1.json new file mode 100644 index 0000000000..4631bfe281 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_hood" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood_2.json new file mode 100644 index 0000000000..0761f55547 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/hood_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_hood" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs.json new file mode 100644 index 0000000000..03d57e0536 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/legs", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/legs_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/legs_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_legs" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs_1.json new file mode 100644 index 0000000000..93054eafd4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_legs" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs_2.json new file mode 100644 index 0000000000..b5667a0aec --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/legs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_legs" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic.json new file mode 100644 index 0000000000..da671641b8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic.json @@ -0,0 +1,26 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/robes/tunic", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/robes/tunic_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/robes/tunic_2", + "predicate": { + "hexcasting:variant": 2.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/robes/0_tunic" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic_1.json new file mode 100644 index 0000000000..797dbbc608 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/1_tunic" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic_2.json new file mode 100644 index 0000000000..a665bce0cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/robes/tunic_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/robes/2_tunic" + } +} \ No newline at end of file diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java index 3e30a6c875..b6233f91bf 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java @@ -10,6 +10,8 @@ import at.petrak.hexcasting.client.render.HexAdditionalRenderers; import at.petrak.hexcasting.client.render.shader.HexShaders; import at.petrak.hexcasting.common.casting.PatternRegistryManifest; +import at.petrak.hexcasting.common.items.armor.ItemRobes; +import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexParticles; import at.petrak.hexcasting.common.misc.PatternTooltip; import at.petrak.hexcasting.forge.lib.ForgeHexAttachments; @@ -17,6 +19,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.color.item.ItemColors; +import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.PlayerModel; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.ParticleProvider; @@ -25,10 +28,15 @@ import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.*; +import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; +import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; import net.neoforged.neoforge.common.NeoForge; import java.io.IOException; @@ -147,6 +155,17 @@ public static void addPlayerLayers(EntityRenderersEvent.AddLayers evt) { }); } + @SubscribeEvent + public static void registerArmorRenderer(RegisterClientExtensionsEvent evt) { + evt.registerItem(new IClientItemExtensions() { + @Override + public HumanoidModel getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel original) { + ItemRobes armor = (ItemRobes) itemStack.getItem(); + return armor.getArmorModels()[armor.getVariant(itemStack)]; + } + }, HexItems.ROBES_HOOD.get(), HexItems.ROBES_TUNIC.get(), HexItems.ROBES_LEGS.get(), HexItems.ROBES_BOOTS.get()); + } + @SubscribeEvent public static void registerBinds(RegisterKeyMappingsEvent event) { Keybinds.ALL_BINDS.forEach(event::register); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index 73c5f84471..d07bdeaef5 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -131,6 +131,7 @@ private static void initRegistry() { HexMobEffects.register(); HexPotions.register(); HexParticles.register(); + HexArmorMaterials.register(); HexAdvancementTriggers.register(); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java index 864fb611ca..8e7f349111 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java @@ -80,6 +80,11 @@ protected void registerModels() { .translation(-2.5f, 0f, -8f) .scale(0.4f); + buildRobes(HexItems.ROBES_HOOD.get(), "hood", HexItems.ROBES_HOOD.get().numVariants()); + buildRobes(HexItems.ROBES_TUNIC.get(), "tunic", HexItems.ROBES_HOOD.get().numVariants()); + buildRobes(HexItems.ROBES_LEGS.get(), "legs", HexItems.ROBES_HOOD.get().numVariants()); + buildRobes(HexItems.ROBES_BOOTS.get(), "boots", HexItems.ROBES_HOOD.get().numVariants()); + singleTexture("old_staff", ResourceLocation.withDefaultNamespace("item/handheld_rod"), "layer0", modLoc("item/staff/old")); singleTexture("cherry_staff", ResourceLocation.withDefaultNamespace("item/handheld_rod"), @@ -276,6 +281,19 @@ private void buildStaff(Item item, String name) { .end(); } + private void buildRobes(Item item, String type, int numVariants) { + var name = "item/" + getPath(item); + var builder = getBuilder(name); + for (int i = 0; i < numVariants; i++) { + var parent_tag = "item/generated"; + var model = i == 0 ? singleTexture(name, ResourceLocation.withDefaultNamespace(parent_tag), + "layer0", modLoc("item/robes/" + i + "_" + type)) + : withExistingParent(name + "_" + i, ResourceLocation.withDefaultNamespace(parent_tag)) + .texture("layer0", modLoc("item/robes/" + i + "_" + type)); + builder.override().predicate(ItemFocus.VARIANT_PRED, i).model(model).end(); + } + } + private void buildPackagedSpell(Item item, String stub, int numVariants) { var name = getPath(item); var builder = getBuilder(name); diff --git a/art/robes/Robes0.bbmodel b/art/robes/Robes0.bbmodel new file mode 100644 index 0000000000..61a422e741 --- /dev/null +++ b/art/robes/Robes0.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"5.0","model_format":"modded_entity","box_uv":true},"name":"Robes1","model_identifier":"","modded_entity_entity_class":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","multi_file_ruleset":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"hood_outer","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,24,-4],"to":[4,32,4],"autouv":0,"color":7,"inflate":0.4,"origin":[0,0,0],"uv_offset":[0,16],"faces":{"north":{"uv":[8,24,16,32],"texture":0},"east":{"uv":[0,24,8,32],"texture":0},"south":{"uv":[24,24,32,32],"texture":0},"west":{"uv":[16,24,24,32],"texture":0},"up":{"uv":[16,24,8,16],"texture":0},"down":{"uv":[24,16,16,24],"texture":0}},"type":"cube","uuid":"1581b57e-00c2-c3a2-d822-b969220a28d4"},{"name":"hood_inner","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,24,-4],"to":[4,32,4],"autouv":0,"color":3,"inflate":0.3,"origin":[0,0,0],"faces":{"north":{"uv":[8,8,16,16],"texture":0},"east":{"uv":[0,8,8,16],"texture":0},"south":{"uv":[24,8,32,16],"texture":0},"west":{"uv":[16,8,24,16],"texture":0},"up":{"uv":[16,8,8,0],"texture":0},"down":{"uv":[24,0,16,8],"texture":0}},"type":"cube","uuid":"c5b38b99-6a56-d9ff-e64c-7b6f865f9a78"},{"name":"left_horn","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-11.7,28.2,0],"to":[-3.7,32.2,0],"autouv":0,"color":2,"inflate":0.3,"origin":[0,0,0],"uv_offset":[24,0],"faces":{"north":{"uv":[24,0,32,4],"texture":0},"east":{"uv":[24,0,24,4],"texture":0},"south":{"uv":[32,0,40,4],"texture":0},"west":{"uv":[32,0,32,4],"texture":0},"up":{"uv":[32,0,24,0],"texture":0},"down":{"uv":[40,0,32,0],"texture":0}},"type":"cube","uuid":"6964045e-8723-0987-f243-5ea5477fe7de"},{"name":"right_horn","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[3.8,28.2,0],"to":[11.8,32.2,0],"autouv":0,"color":0,"mirror_uv":true,"inflate":0.3,"origin":[0,0,0],"uv_offset":[24,0],"faces":{"north":{"uv":[32,0,24,4],"texture":0},"east":{"uv":[32,0,32,4],"texture":0},"south":{"uv":[40,0,32,4],"texture":0},"west":{"uv":[24,0,24,4],"texture":0},"up":{"uv":[24,0,32,0],"texture":0},"down":{"uv":[32,0,40,0],"texture":0}},"type":"cube","uuid":"f33f09f2-5156-ad5f-6a83-b6ec43dd94ba"},{"name":"tunic_outer","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,12,-2],"to":[4,24,2],"autouv":0,"color":4,"inflate":0.4,"origin":[0,0,0],"uv_offset":[40,16],"faces":{"north":{"uv":[44,20,52,32],"texture":0},"east":{"uv":[40,20,44,32],"texture":0},"south":{"uv":[56,20,64,32],"texture":0},"west":{"uv":[52,20,56,32],"texture":0},"up":{"uv":[52,20,44,16],"texture":0},"down":{"uv":[60,16,52,20],"texture":0}},"type":"cube","uuid":"e8531e9d-18f6-891f-90e4-7521fdc4d333"},{"name":"tunic_inner","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,12,-2],"to":[4,24,2],"autouv":0,"color":7,"inflate":0.3,"origin":[0,0,0],"uv_offset":[40,0],"faces":{"north":{"uv":[44,4,52,16],"texture":0},"east":{"uv":[40,4,44,16],"texture":0},"south":{"uv":[56,4,64,16],"texture":0},"west":{"uv":[52,4,56,16],"texture":0},"up":{"uv":[52,4,44,0],"texture":0},"down":{"uv":[60,0,52,4],"texture":0}},"type":"cube","uuid":"39cd0047-8c4e-0c56-9ba0-6821e5288d85"},{"name":"right_sleeve","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[4,12,-2],"to":[8,24,2],"autouv":0,"color":3,"inflate":0.3,"origin":[0,0,0],"uv_offset":[0,32],"faces":{"north":{"uv":[4,36,8,48],"texture":0},"east":{"uv":[0,36,4,48],"texture":0},"south":{"uv":[12,36,16,48],"texture":0},"west":{"uv":[8,36,12,48],"texture":0},"up":{"uv":[8,36,4,32],"texture":0},"down":{"uv":[12,32,8,36],"texture":0}},"type":"cube","uuid":"980d2769-4452-dfb8-65e0-279fe928b4dc"},{"name":"left_sleeve","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-8,12,-2],"to":[-4,24,2],"autouv":0,"color":0,"mirror_uv":true,"inflate":0.3,"origin":[0,0,0],"uv_offset":[0,32],"faces":{"north":{"uv":[8,36,4,48],"texture":0},"east":{"uv":[12,36,8,48],"texture":0},"south":{"uv":[16,36,12,48],"texture":0},"west":{"uv":[4,36,0,48],"texture":0},"up":{"uv":[4,36,8,32],"texture":0},"down":{"uv":[8,32,12,36],"texture":0}},"type":"cube","uuid":"a67ab72a-fddc-6238-2450-0efdf132c8f1"},{"name":"right_skirt","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[1.75,0.25,-2],"to":[5.75,12.25,2],"autouv":0,"color":1,"mirror_uv":true,"inflate":0.4,"rotation":[0,0,7.5],"origin":[1.75,0.25,0],"uv_offset":[48,32],"faces":{"north":{"uv":[56,36,52,48],"texture":0},"east":{"uv":[60,36,56,48],"texture":0},"south":{"uv":[64,36,60,48],"texture":0},"west":{"uv":[52,36,48,48],"texture":0},"up":{"uv":[52,36,56,32],"texture":0},"down":{"uv":[56,32,60,36],"texture":0}},"type":"cube","uuid":"9f17843d-d8f7-54ed-8955-46c9f9b16c58"},{"name":"left_skirt","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-5.85,0.25,-2],"to":[-1.85,12.25,2],"autouv":0,"color":6,"inflate":0.4,"rotation":[0,0,-7.5],"origin":[-1.75,-0.25,0],"uv_offset":[48,32],"faces":{"north":{"uv":[52,36,56,48],"texture":0},"east":{"uv":[48,36,52,48],"texture":0},"south":{"uv":[60,36,64,48],"texture":0},"west":{"uv":[56,36,60,48],"texture":0},"up":{"uv":[56,36,52,32],"texture":0},"down":{"uv":[60,32,56,36],"texture":0}},"type":"cube","uuid":"948db43e-cb45-4d54-b8c9-2fff5114297d"},{"name":"left_boot","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,0,-2],"to":[0,3,2],"autouv":0,"color":9,"inflate":0.3,"origin":[0,0,0],"uv_offset":[16,41],"faces":{"north":{"uv":[20,45,24,48],"texture":0},"east":{"uv":[16,45,20,48],"texture":0},"south":{"uv":[28,45,32,48],"texture":0},"west":{"uv":[24,45,28,48],"texture":0},"up":{"uv":[24,45,20,41],"texture":0},"down":{"uv":[28,41,24,45],"texture":0}},"type":"cube","uuid":"79498393-90f7-57dc-503c-6574ada461b9"},{"name":"right_boot","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[0,0,-2],"to":[4,3,2],"autouv":0,"color":2,"inflate":0.3,"origin":[0,0,0],"uv_offset":[16,41],"faces":{"north":{"uv":[20,45,24,48],"texture":0},"east":{"uv":[16,45,20,48],"texture":0},"south":{"uv":[28,45,32,48],"texture":0},"west":{"uv":[24,45,28,48],"texture":0},"up":{"uv":[24,45,20,41],"texture":0},"down":{"uv":[28,41,24,45],"texture":0}},"type":"cube","uuid":"ef919b63-e2e6-f0f2-daa2-f3617e632db6"}],"groups":[{"name":"head","uuid":"fd15bc83-0616-6b91-4dc0-205078c28696","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,32,-4],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"horns","uuid":"392fe1f0-1ca6-16cb-3fdf-f4df1acbea50","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[4.8,32.2,0],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":false,"primary_selected":false},{"name":"body","uuid":"3ce8c80e-9c6b-c2c7-d890-65103951659b","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"leftArm","uuid":"8b7e8f66-6842-18bf-5ec6-ed8186b30dcc","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[4,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"rightArm","uuid":"3f6f3a5d-40f0-79e0-f4c7-8260f3f17f66","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-8,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"rightLeg","uuid":"ad7f6d7b-a515-346a-234d-92719a8f6f03","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[2,12.25,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"leftLeg","uuid":"89bec69e-bfd8-c0e8-d1df-5948a74a5ae4","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4.1,12.5,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false}],"outliner":[{"uuid":"fd15bc83-0616-6b91-4dc0-205078c28696","isOpen":true,"children":["c5b38b99-6a56-d9ff-e64c-7b6f865f9a78","1581b57e-00c2-c3a2-d822-b969220a28d4",{"uuid":"392fe1f0-1ca6-16cb-3fdf-f4df1acbea50","isOpen":false,"children":["6964045e-8723-0987-f243-5ea5477fe7de","f33f09f2-5156-ad5f-6a83-b6ec43dd94ba"]}]},{"uuid":"3ce8c80e-9c6b-c2c7-d890-65103951659b","isOpen":true,"children":["39cd0047-8c4e-0c56-9ba0-6821e5288d85","e8531e9d-18f6-891f-90e4-7521fdc4d333"]},{"uuid":"3f6f3a5d-40f0-79e0-f4c7-8260f3f17f66","isOpen":true,"children":["980d2769-4452-dfb8-65e0-279fe928b4dc"]},{"uuid":"8b7e8f66-6842-18bf-5ec6-ed8186b30dcc","isOpen":true,"children":["a67ab72a-fddc-6238-2450-0efdf132c8f1"]},{"uuid":"ad7f6d7b-a515-346a-234d-92719a8f6f03","isOpen":true,"children":["9f17843d-d8f7-54ed-8955-46c9f9b16c58","ef919b63-e2e6-f0f2-daa2-f3617e632db6"]},{"uuid":"89bec69e-bfd8-c0e8-d1df-5948a74a5ae4","isOpen":true,"children":["948db43e-cb45-4d54-b8c9-2fff5114297d","79498393-90f7-57dc-503c-6574ada461b9"]}],"textures":[{"name":"","path":"","folder":"","namespace":"","id":"0","group":"","scope":0,"width":64,"height":64,"uv_width":64,"uv_height":64,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","file_format":"png","render_mode":"default","render_sides":"auto","wrap_mode":"limited","pbr_channel":"color","fps":7,"frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"76798d81-bebb-9cf7-cb53-4b3c6019c51a","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/art/robes/Robes1.bbmodel b/art/robes/Robes1.bbmodel new file mode 100644 index 0000000000..690b827aa2 --- /dev/null +++ b/art/robes/Robes1.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"5.0","model_format":"modded_entity","box_uv":true},"name":"Robes2","model_identifier":"","modded_entity_entity_class":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","multi_file_ruleset":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"hood_outer","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,24,-4],"to":[4,32,4],"autouv":0,"color":3,"inflate":0.4,"origin":[0,0,0],"uv_offset":[0,16],"faces":{"north":{"uv":[8,24,16,32],"texture":0},"east":{"uv":[0,24,8,32],"texture":0},"south":{"uv":[24,24,32,32],"texture":0},"west":{"uv":[16,24,24,32],"texture":0},"up":{"uv":[16,24,8,16],"texture":0},"down":{"uv":[24,16,16,24],"texture":0}},"type":"cube","uuid":"b2301383-7b8a-8d9f-c284-318663224705"},{"name":"hood_inner","box_uv":true,"render_order":"behind","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,24,-4],"to":[4,32,4],"autouv":0,"color":0,"inflate":0.3,"origin":[0,0,0],"faces":{"north":{"uv":[8,8,16,16],"texture":0},"east":{"uv":[0,8,8,16],"texture":0},"south":{"uv":[24,8,32,16],"texture":0},"west":{"uv":[16,8,24,16],"texture":0},"up":{"uv":[16,8,8,0],"texture":0},"down":{"uv":[24,0,16,8],"texture":0}},"type":"cube","uuid":"cec6b116-5e7e-77d1-1f1a-e56dfe32702c"},{"name":"right_horn","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-8.25,34.25,0],"to":[-0.25,38.25,0],"autouv":0,"color":6,"rotation":[0,0,-90],"origin":[-4.25,36.25,0],"uv_offset":[24,0],"faces":{"north":{"uv":[24,0,32,4],"texture":0},"east":{"uv":[24,0,24,4],"texture":0},"south":{"uv":[32,0,40,4],"texture":0},"west":{"uv":[32,0,32,4],"texture":0},"up":{"uv":[32,0,24,0],"texture":0},"down":{"uv":[40,0,32,0],"texture":0}},"type":"cube","uuid":"cae1f41b-7569-26aa-acc4-3ed8d8815444"},{"name":"tunic_outer","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,12,-2],"to":[4,24,2],"autouv":0,"color":7,"inflate":0.4,"origin":[0,0,0],"uv_offset":[40,16],"faces":{"north":{"uv":[44,20,52,32],"texture":0},"east":{"uv":[40,20,44,32],"texture":0},"south":{"uv":[56,20,64,32],"texture":0},"west":{"uv":[52,20,56,32],"texture":0},"up":{"uv":[52,20,44,16],"texture":0},"down":{"uv":[60,16,52,20],"texture":0}},"type":"cube","uuid":"a19f6d42-3fe9-bb4c-480e-d6574977d99f"},{"name":"tunic_inner","box_uv":true,"render_order":"behind","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,12,-2],"to":[4,24,2],"autouv":0,"color":3,"inflate":0.3,"origin":[0,0,0],"uv_offset":[40,0],"faces":{"north":{"uv":[44,4,52,16],"texture":0},"east":{"uv":[40,4,44,16],"texture":0},"south":{"uv":[56,4,64,16],"texture":0},"west":{"uv":[52,4,56,16],"texture":0},"up":{"uv":[52,4,44,0],"texture":0},"down":{"uv":[60,0,52,4],"texture":0}},"type":"cube","uuid":"d6c0c5b1-527b-cf1f-061a-36c7e9bb98db"},{"name":"left_sleeve","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-8,12,-2],"to":[-4,24,2],"autouv":0,"color":3,"mirror_uv":true,"inflate":0.3,"origin":[0,0,0],"uv_offset":[0,32],"faces":{"north":{"uv":[8,36,4,48],"texture":0},"east":{"uv":[12,36,8,48],"texture":0},"south":{"uv":[16,36,12,48],"texture":0},"west":{"uv":[4,36,0,48],"texture":0},"up":{"uv":[4,36,8,32],"texture":0},"down":{"uv":[8,32,12,36],"texture":0}},"type":"cube","uuid":"818aa72b-cef1-58e9-725c-5eaa37f7b9dc"},{"name":"right_sleeve","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[4,12,-2],"to":[8,24,2],"autouv":0,"color":7,"inflate":0.3,"origin":[0,0,0],"uv_offset":[0,32],"faces":{"north":{"uv":[4,36,8,48],"texture":0},"east":{"uv":[0,36,4,48],"texture":0},"south":{"uv":[12,36,16,48],"texture":0},"west":{"uv":[8,36,12,48],"texture":0},"up":{"uv":[8,36,4,32],"texture":0},"down":{"uv":[12,32,8,36],"texture":0}},"type":"cube","uuid":"dbf8c827-9338-7729-bb47-4f346cdf3592"},{"name":"left_skirt","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,0,-2],"to":[0,12,2],"autouv":0,"color":8,"inflate":0.4,"origin":[-4,0,0],"uv_offset":[48,32],"faces":{"north":{"uv":[52,36,56,48],"texture":0},"east":{"uv":[48,36,52,48],"texture":0},"south":{"uv":[60,36,64,48],"texture":0},"west":{"uv":[56,36,60,48],"texture":0},"up":{"uv":[56,36,52,32],"texture":0},"down":{"uv":[60,32,56,36],"texture":0}},"type":"cube","uuid":"22bfadf3-71a3-962a-553b-5d9aff88ddc3"},{"name":"right_skirt","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[0,0,-2],"to":[4,12,2],"autouv":0,"color":8,"mirror_uv":true,"inflate":0.4,"origin":[4,0,0],"uv_offset":[48,32],"faces":{"north":{"uv":[56,36,52,48],"texture":0},"east":{"uv":[60,36,56,48],"texture":0},"south":{"uv":[64,36,60,48],"texture":0},"west":{"uv":[52,36,48,48],"texture":0},"up":{"uv":[52,36,56,32],"texture":0},"down":{"uv":[56,32,60,36],"texture":0}},"type":"cube","uuid":"1f6091bd-5faa-e333-da79-c6c57a92952a"},{"name":"left_boot","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,0,-2],"to":[0,4,2],"autouv":0,"color":8,"inflate":0.3,"origin":[0,0,0],"uv_offset":[16,40],"faces":{"north":{"uv":[20,44,24,48],"texture":0},"east":{"uv":[16,44,20,48],"texture":0},"south":{"uv":[28,44,32,48],"texture":0},"west":{"uv":[24,44,28,48],"texture":0},"up":{"uv":[24,44,20,40],"texture":0},"down":{"uv":[28,40,24,44],"texture":0}},"type":"cube","uuid":"5a38ae46-c69d-e663-6bf0-db99aa735735"},{"name":"right_boot","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[0,0,-2],"to":[4,4,2],"autouv":0,"color":4,"inflate":0.3,"origin":[0,0,0],"uv_offset":[16,40],"faces":{"north":{"uv":[20,44,24,48],"texture":0},"east":{"uv":[16,44,20,48],"texture":0},"south":{"uv":[28,44,32,48],"texture":0},"west":{"uv":[24,44,28,48],"texture":0},"up":{"uv":[24,44,20,40],"texture":0},"down":{"uv":[28,40,24,44],"texture":0}},"type":"cube","uuid":"60e41237-317f-4c78-8b20-dab88a2ba123"},{"name":"left_horn","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[0.25,34.25,0],"to":[8.25,38.25,0],"autouv":0,"color":7,"mirror_uv":true,"rotation":[0,0,90],"origin":[4.25,36.25,0],"uv_offset":[24,0],"faces":{"north":{"uv":[32,0,24,4],"texture":0},"east":{"uv":[32,0,32,4],"texture":0},"south":{"uv":[40,0,32,4],"texture":0},"west":{"uv":[24,0,24,4],"texture":0},"up":{"uv":[24,0,32,0],"texture":0},"down":{"uv":[32,0,40,0],"texture":0}},"type":"cube","uuid":"c3b4c436-d99b-e573-ef06-7f6c2bd3370f"}],"groups":[{"name":"head","uuid":"a98bbf19-0b66-952c-1616-51351bc4fde0","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,32,-4],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"body","uuid":"a946c104-4b18-70b2-14d4-8c06829849be","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"rightArm","uuid":"26a798c8-f71d-51b0-0be9-e11439c93c86","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[4,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"leftArm","uuid":"759c4eae-7953-1987-4504-74b1555e5c39","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-8,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"leftLeg","uuid":"46e6c36b-8782-ecc4-f6be-415512f92d4a","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,12,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"rightLeg","uuid":"e5bb982a-468b-c3e8-d99f-7b7a594eefed","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[0,12,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"horns","uuid":"5e0675dc-8bb1-c564-3970-d9333592e0b3","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4.25,36.25,0],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false}],"outliner":[{"uuid":"a98bbf19-0b66-952c-1616-51351bc4fde0","isOpen":true,"children":["cec6b116-5e7e-77d1-1f1a-e56dfe32702c","b2301383-7b8a-8d9f-c284-318663224705",{"uuid":"5e0675dc-8bb1-c564-3970-d9333592e0b3","isOpen":true,"children":["cae1f41b-7569-26aa-acc4-3ed8d8815444","c3b4c436-d99b-e573-ef06-7f6c2bd3370f"]}]},{"uuid":"a946c104-4b18-70b2-14d4-8c06829849be","isOpen":true,"children":["d6c0c5b1-527b-cf1f-061a-36c7e9bb98db","a19f6d42-3fe9-bb4c-480e-d6574977d99f"]},{"uuid":"26a798c8-f71d-51b0-0be9-e11439c93c86","isOpen":true,"children":["dbf8c827-9338-7729-bb47-4f346cdf3592"]},{"uuid":"759c4eae-7953-1987-4504-74b1555e5c39","isOpen":true,"children":["818aa72b-cef1-58e9-725c-5eaa37f7b9dc"]},{"uuid":"e5bb982a-468b-c3e8-d99f-7b7a594eefed","isOpen":true,"children":["1f6091bd-5faa-e333-da79-c6c57a92952a","60e41237-317f-4c78-8b20-dab88a2ba123"]},{"uuid":"46e6c36b-8782-ecc4-f6be-415512f92d4a","isOpen":true,"children":["22bfadf3-71a3-962a-553b-5d9aff88ddc3","5a38ae46-c69d-e663-6bf0-db99aa735735"]}],"textures":[{"name":"","path":"","folder":"","namespace":"","id":"0","group":"","scope":0,"width":64,"height":64,"uv_width":64,"uv_height":64,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","file_format":"png","render_mode":"default","render_sides":"auto","wrap_mode":"limited","pbr_channel":"color","fps":7,"frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"ae10bf54-61f3-91d7-642d-574fba3483bc","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/art/robes/Robes2.bbmodel b/art/robes/Robes2.bbmodel new file mode 100644 index 0000000000..62efa53758 --- /dev/null +++ b/art/robes/Robes2.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"5.0","model_format":"modded_entity","box_uv":true},"name":"Robes2","model_identifier":"","modded_entity_entity_class":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","multi_file_ruleset":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"hood_outer","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,24,-4],"to":[4,32,4],"autouv":0,"color":4,"inflate":0.4,"origin":[0,0,0],"uv_offset":[0,16],"faces":{"north":{"uv":[8,24,16,32],"texture":0},"east":{"uv":[0,24,8,32],"texture":0},"south":{"uv":[24,24,32,32],"texture":0},"west":{"uv":[16,24,24,32],"texture":0},"up":{"uv":[16,24,8,16],"texture":0},"down":{"uv":[24,16,16,24],"texture":0}},"type":"cube","uuid":"bb31bdb7-b4f5-8fd6-0631-ad789263fce7"},{"name":"hood_inner","box_uv":true,"render_order":"behind","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,24,-4],"to":[4,32,4],"autouv":0,"color":8,"inflate":0.3,"origin":[0,0,0],"faces":{"north":{"uv":[8,8,16,16],"texture":0},"east":{"uv":[0,8,8,16],"texture":0},"south":{"uv":[24,8,32,16],"texture":0},"west":{"uv":[16,8,24,16],"texture":0},"up":{"uv":[16,8,8,0],"texture":0},"down":{"uv":[24,0,16,8],"texture":0}},"type":"cube","uuid":"7c76db23-25f3-7b95-ac9f-2e9bcf0f9759"},{"name":"body_outer","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,12,-2],"to":[4,24,2],"autouv":0,"color":5,"inflate":0.4,"origin":[0,0,0],"uv_offset":[40,16],"faces":{"north":{"uv":[44,20,52,32],"texture":0},"east":{"uv":[40,20,44,32],"texture":0},"south":{"uv":[56,20,64,32],"texture":0},"west":{"uv":[52,20,56,32],"texture":0},"up":{"uv":[52,20,44,16],"texture":0},"down":{"uv":[60,16,52,20],"texture":0}},"type":"cube","uuid":"94261ed0-a8a6-8d18-ac42-13127515d848"},{"name":"body_inner","box_uv":true,"render_order":"behind","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,12,-2],"to":[4,24,2],"autouv":0,"color":3,"inflate":0.3,"origin":[0,0,0],"uv_offset":[40,0],"faces":{"north":{"uv":[44,4,52,16],"texture":0},"east":{"uv":[40,4,44,16],"texture":0},"south":{"uv":[56,4,64,16],"texture":0},"west":{"uv":[52,4,56,16],"texture":0},"up":{"uv":[52,4,44,0],"texture":0},"down":{"uv":[60,0,52,4],"texture":0}},"type":"cube","uuid":"bd4844dd-2a0e-3f4e-fa0b-7da3d2887e40"},{"name":"left_sleeve","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-8,12,-2],"to":[-4,24,2],"autouv":0,"color":3,"mirror_uv":true,"inflate":0.3,"origin":[0,0,0],"uv_offset":[0,32],"faces":{"north":{"uv":[8,36,4,48],"texture":0},"east":{"uv":[12,36,8,48],"texture":0},"south":{"uv":[16,36,12,48],"texture":0},"west":{"uv":[4,36,0,48],"texture":0},"up":{"uv":[4,36,8,32],"texture":0},"down":{"uv":[8,32,12,36],"texture":0}},"type":"cube","uuid":"9c87cab3-03d4-97ee-21bd-9815d0e98d53"},{"name":"right_sleeve","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[4,12,-2],"to":[8,24,2],"autouv":0,"color":0,"inflate":0.3,"origin":[0,0,0],"uv_offset":[0,32],"faces":{"north":{"uv":[4,36,8,48],"texture":0},"east":{"uv":[0,36,4,48],"texture":0},"south":{"uv":[12,36,16,48],"texture":0},"west":{"uv":[8,36,12,48],"texture":0},"up":{"uv":[8,36,4,32],"texture":0},"down":{"uv":[12,32,8,36],"texture":0}},"type":"cube","uuid":"fd5e025b-d5f6-8bd3-d981-66783aa2a923"},{"name":"right_legging","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[0,0,-2],"to":[4,12,2],"autouv":0,"color":3,"inflate":0.35,"origin":[0,0,0],"uv_offset":[48,32],"faces":{"north":{"uv":[52,36,56,48],"texture":0},"east":{"uv":[48,36,52,48],"texture":0},"south":{"uv":[60,36,64,48],"texture":0},"west":{"uv":[56,36,60,48],"texture":0},"up":{"uv":[56,36,52,32],"texture":0},"down":{"uv":[60,32,56,36],"texture":0}},"type":"cube","uuid":"e035f1e5-f5da-d86a-efe6-d73b506ae82e"},{"name":"left_legging","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,0,-2],"to":[0,12,2],"autouv":0,"color":9,"mirror_uv":true,"inflate":0.35,"origin":[0,0,0],"uv_offset":[48,32],"faces":{"north":{"uv":[56,36,52,48],"texture":0},"east":{"uv":[60,36,56,48],"texture":0},"south":{"uv":[64,36,60,48],"texture":0},"west":{"uv":[52,36,48,48],"texture":0},"up":{"uv":[52,36,56,32],"texture":0},"down":{"uv":[56,32,60,36],"texture":0}},"type":"cube","uuid":"92e4165d-8268-5063-8211-7221aae1b76e"},{"name":"left_boot","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4,0,-2],"to":[0,4,2],"autouv":0,"color":2,"inflate":0.3,"origin":[0,0,0],"uv_offset":[16,40],"faces":{"north":{"uv":[20,44,24,48],"texture":0},"east":{"uv":[16,44,20,48],"texture":0},"south":{"uv":[28,44,32,48],"texture":0},"west":{"uv":[24,44,28,48],"texture":0},"up":{"uv":[24,44,20,40],"texture":0},"down":{"uv":[28,40,24,44],"texture":0}},"type":"cube","uuid":"0c26f55d-2961-ea9c-ea83-843b23d37a98"},{"name":"right_boot","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[0,0,-2],"to":[4,4,2],"autouv":0,"color":3,"inflate":0.3,"origin":[0,0,0],"uv_offset":[16,40],"faces":{"north":{"uv":[20,44,24,48],"texture":0},"east":{"uv":[16,44,20,48],"texture":0},"south":{"uv":[28,44,32,48],"texture":0},"west":{"uv":[24,44,28,48],"texture":0},"up":{"uv":[24,44,20,40],"texture":0},"down":{"uv":[28,40,24,44],"texture":0}},"type":"cube","uuid":"3bb185dc-1abc-3fe5-b883-7af7889a4f3f"},{"name":"strap","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-9.8,11.95,-3],"to":[0.2,14.95,3],"autouv":0,"color":2,"mirror_uv":true,"rotation":[0,0,-22.5],"origin":[-0.75,1.75,0],"uv_offset":[0,48],"faces":{"north":{"uv":[16,54,6,57],"texture":0},"east":{"uv":[22,54,16,57],"texture":0},"south":{"uv":[32,54,22,57],"texture":0},"west":{"uv":[6,54,0,57],"texture":0},"up":{"uv":[6,54,16,48],"texture":0},"down":{"uv":[16,48,26,54],"texture":0}},"type":"cube","uuid":"5595171c-e809-03ca-68ed-7115d9ffbb94"},{"name":"buckle","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-4.95,14.1,-3],"to":[-1.95,17.1,3],"autouv":0,"color":6,"mirror_uv":true,"inflate":0.1,"origin":[-0.75,0,0],"uv_offset":[32,48],"faces":{"north":{"uv":[41,54,38,57],"texture":0},"east":{"uv":[47,54,41,57],"texture":0},"south":{"uv":[50,54,47,57],"texture":0},"west":{"uv":[38,54,32,57],"texture":0},"up":{"uv":[38,54,41,48],"texture":0},"down":{"uv":[41,48,44,54],"texture":0}},"type":"cube","uuid":"4cb47817-d5c8-81f7-ce53-eddcf011ee3e"},{"name":"right_horn","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[4,28.5,0],"to":[12,36.5,0],"autouv":0,"color":0,"mirror_uv":true,"rotation":[0,0,75],"origin":[5,32.5,0],"uv_offset":[24,0],"faces":{"north":{"uv":[32,0,24,8],"texture":0},"east":{"uv":[32,0,32,8],"texture":0},"south":{"uv":[40,0,32,8],"texture":0},"west":{"uv":[24,0,24,8],"texture":0},"up":{"uv":[24,0,32,0],"texture":0},"down":{"uv":[32,0,40,0],"texture":0}},"type":"cube","uuid":"00b324ac-7d37-b5d8-4201-5e85760400af"},{"name":"left_horn","box_uv":true,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[-12,28.6,0],"to":[-4,36.6,0],"autouv":0,"color":0,"rotation":[0,0,-75],"origin":[-5,32.6,0],"uv_offset":[24,0],"faces":{"north":{"uv":[24,0,32,8],"texture":0},"east":{"uv":[24,0,24,8],"texture":0},"south":{"uv":[32,0,40,8],"texture":0},"west":{"uv":[32,0,32,8],"texture":0},"up":{"uv":[32,0,24,0],"texture":0},"down":{"uv":[40,0,32,0],"texture":0}},"type":"cube","uuid":"a9e5e1e6-b585-094b-da8c-835678984610"}],"groups":[{"name":"head","uuid":"340a6871-310d-6a24-43ff-ddf85346d82f","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,32,-4],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"body","uuid":"303b4664-b31a-5ba5-b6bf-ed9ee71370bb","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"rightArm","uuid":"d74e7c20-c22d-d9d4-9aef-4faded63fc4e","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[4,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"leftArm","uuid":"63506f26-b3de-59cb-b312-386615c5bc0d","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-8,24,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"rightLeg","uuid":"e46d3e87-8f26-2f4d-963a-bdf55792cfa6","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[0,12,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"leftLeg","uuid":"39fd2105-d958-5410-6032-afffb1ec9e1d","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[-4,12,-2],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false},{"name":"sash","uuid":"01148eb6-5484-1b29-ae31-deabde803a47","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[5.45,13.2,-3],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":false,"primary_selected":true},{"name":"horns","uuid":"05a5b561-43ff-8683-4ce7-978731e9d8c5","export":true,"locked":false,"scope":0,"selected":false,"_static":{"properties":{},"temp_data":{}},"origin":[5,32.5,0],"rotation":[0,0,0],"color":0,"children":[],"reset":false,"shade":true,"mirror_uv":false,"visibility":true,"autouv":0,"isOpen":true,"primary_selected":false}],"outliner":[{"uuid":"340a6871-310d-6a24-43ff-ddf85346d82f","isOpen":true,"children":[{"uuid":"05a5b561-43ff-8683-4ce7-978731e9d8c5","isOpen":true,"children":["00b324ac-7d37-b5d8-4201-5e85760400af","a9e5e1e6-b585-094b-da8c-835678984610"]},"7c76db23-25f3-7b95-ac9f-2e9bcf0f9759","bb31bdb7-b4f5-8fd6-0631-ad789263fce7"]},{"uuid":"303b4664-b31a-5ba5-b6bf-ed9ee71370bb","isOpen":true,"children":["bd4844dd-2a0e-3f4e-fa0b-7da3d2887e40","94261ed0-a8a6-8d18-ac42-13127515d848",{"uuid":"01148eb6-5484-1b29-ae31-deabde803a47","isOpen":false,"children":["5595171c-e809-03ca-68ed-7115d9ffbb94","4cb47817-d5c8-81f7-ce53-eddcf011ee3e"]}]},{"uuid":"d74e7c20-c22d-d9d4-9aef-4faded63fc4e","isOpen":true,"children":["fd5e025b-d5f6-8bd3-d981-66783aa2a923"]},{"uuid":"63506f26-b3de-59cb-b312-386615c5bc0d","isOpen":true,"children":["9c87cab3-03d4-97ee-21bd-9815d0e98d53"]},{"uuid":"e46d3e87-8f26-2f4d-963a-bdf55792cfa6","isOpen":true,"children":["e035f1e5-f5da-d86a-efe6-d73b506ae82e","3bb185dc-1abc-3fe5-b883-7af7889a4f3f"]},{"uuid":"39fd2105-d958-5410-6032-afffb1ec9e1d","isOpen":true,"children":["92e4165d-8268-5063-8211-7221aae1b76e","0c26f55d-2961-ea9c-ea83-843b23d37a98"]}],"textures":[{"name":"","path":"","folder":"","namespace":"","id":"0","group":"","scope":0,"width":64,"height":64,"uv_width":64,"uv_height":64,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","file_format":"png","render_mode":"default","render_sides":"auto","wrap_mode":"limited","pbr_channel":"color","fps":7,"frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":false,"uuid":"af3aae18-9f98-d4de-7b0f-c58cd9965743","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAHOUlEQVR4XmNcE7ny/9NP7xjeffvG8Ozja4YXH94wbL43h5EBCuode/8zUAAa9xczYtP+5M6Z/zIqJoykGi3MqUGRe95+v4FiJ0vwsjCGh+/fM3z89JlBX0GekYHG4PKJbf8FRcQYRKTkyLaJn0OEQYBdEK7/w8/3YPbHH2/ANCF5ZIuZfn5/zcDy7h4D04urDMe2Lv5Pbf+DYvrHt1f/YVhVzwTseQ4uMYoCG+ZpkHuRAwPmfkLyMHWM//8++P/vRz3D34evGd7fPs3w+ek/hmvn/jEcPvKRofvGP0ZCSQ4U2vgCbeP2KgaQp0Fq3jx7BFYKS/qgQCE1IKidBRiNJHz/g0ILlHzQ8wfItZQGwL33RxhBqQBbkgcFCKFygFIPE0rRTOdebGYEORKb56mVHWCeBMX27UtnGEAeB9HEFoKgVIac0mBsZHF0eWLVszDQCYA8TE6Sp7XzmCi1AFbyYjMHWU7XwosRFAig7ECqnaBCDrmgw1boocsTq54FVM9POTGbonDAFQg5Fqkgc+E1y5rK60D+dQbktgWudgIxDoJ5El8kIJuDTT3RWeDi5SXwuhuUh/V1YxgGEsjzq8KtR2bjchMu9URlgQP7+xge3bwOLrxAngexQWIMwwCAAwBWmmKjYX70DWllwMYmRi8twunhx9twY5HZuOzCpZ5p8YX1eN0H8uDnt28ZQDH+/s0rBhAGsUFihBpBhMymNGBA7RfkFh8h87CpJyoLIMc+tlTAQGOA7nBsnkYWI0U9UQEASwUwfxIT+wxDBOANAFD1AqtiYmJmMoA8DsIgNsh/yPK09C+6PTA3IYsjV4WkqCfYIyNmPAA0joAtAKT4RRkoqeexmTnRe/p/aT4hhssvnjBUbo0FK2n3XsygKyHDABrXyN+aSVIvk6SmsBAXF9hC0OAJzHG4PA+SxydHjRQD611SYhZRAQDzOMwibAHBMADAzrQAbGusQSDZthMsBNE9j2wTPjlahQdy6kO3A58cLvewMAxyAMrzyE4EeRKU10Fizoo2DHvvHwFLw8TQ1RPyHtNgDwDkWAWxCaVIdPVDPgCQPYBcqCIHBK5AQVYPChgYRjaTYAoglOdAVR2uUMYnR2zKI7UmwaUeOZCQ/cSCXs+TUrDB1ApxycP9gx5g2NoRyHYQU28Tmw2wRRauCISJoxSCuDwPUozeoAF5DJt6kBi+VENInlDKAMUwcoBjyyLI9oPU40qJIDl4AGBLIjAxbK05kBiuEhebJ2FJ89lHhJOpkUVApr2DzmrhCjxYIKBnD5D9dKkGseVLanke5OlzD6/D/S4hIIISDqCpPpAAiEaWg9kPDgCQA0ExoyMpj6IZFLLElAmwJCeE1FSGeRpkEaWexZaM8WUzbAEO8hi6O0DqsNYCxBZSuAowbA6ABPJrBhjNQCJANpNQkifFaBZYyIAsuPL8IQN6KiBkGLbYh+kBhTiu2MAljm4fLAkji8PEkGax/2sLaoCVYFMPSvrYYh+klgWWvGCOBQUCiE1KaQ1Ti5zsQa4h1pP4Ahl5qh6XOtDMFhDjNMZXKeU/toABmY3RdwaV7Mj5i9r9eQYag1SjCpQZ7tnnOvCOD2CUAfgKF4ZhCJgYRjjACABSmsLDIeww8gfymiF8HgQFFGhsLmR5OONABgRsyQ3IDaA5CxANWoJDLB+jJQgaWAB5jFBZAFIDG4QYyAAATbgKcT0EOwFRJRPPxxp7oFQAGnXF5zHQKOxAxz7IfVRPATBP42sHDKZygtIUgLUzRCgbkJL8Sa2XSc1OIe2aDKTkefQyAmsAgNr4oGyALRXAYp/UCQhalRM0SQEgx+JKBYOl8IMFKE1SAMhwbKlgsMU+yJ00SwHIqQAW2uTEPra2OGyckBr9DEpTAMFGDGwyEhYg6Hkf5BliPQLzOHKvkdJAQB6bxNU1F0Kb00TmE9WKg439YSv4QKU8rPsMCiTkAVR0x2HrHhPqrTHQGFDcjEWv5kDuhQ2qgMYWsLk/b5odWHhS1iGGQRsA2Ja1EzsdjbwuGKQH1EYHLZQkJTJBK9d5hYXBizJA+mBsK+9YqvY98I4Koy9whvFhnkJugODaAwDSA+ukkBIAIA/DzAfpQ2ZTM1fgDADYEnfQ8lZkC5Edgu4xWMAgqweZAzOLFIejByglGyzw2Uv0gAjMI/hiEyRHrocZBgjgTAGg2ASFOizGYXyQB2FlAWjBFCx/gmjkjRHIKYWcpSywgEYOcHKyEqFwxRkAsEWR6EkRWzIHWQJzHCjQkMsK9CxEbETDAhdGg/Qhs6mVYBhxlfYgD2Er2GABAHOMnLomA7ZSH+RAcvSD9GFLMehlALoacnaggexC2c4CMxTmeeRQJuQA9EBAjyFc+nENY8GyFHIKQu/2IqshtZqFuY8FOamD2MhJD1QVoXsEPR/C1CMHGswcYvWD1CGbCzMT5HnkcoaQGoZRMBoCoyEwGgKjITAaAqMhQEoIAAB2ILuJX6i+1wAAAABJRU5ErkJggg=="}]} \ No newline at end of file