From e7af04418be7948417a2358babc885c09f55dced Mon Sep 17 00:00:00 2001 From: zxq5 Date: Mon, 13 Jul 2026 23:28:54 +0100 Subject: [PATCH] basically done with data generation now. model generation is pretty much fully working/automated --- .../zxq5/client/FantasysmpDataGenerator.kt | 60 +++++++++- .../fantasysmp/equipment/dragonite.json | 20 ++++ .../assets/fantasysmp/equipment/ender.json} | 6 +- .../fantasysmp/equipment/witherite.json} | 6 +- .../fantasysmp/items/dragon_scale.json} | 4 +- .../fantasysmp/items/dragonite_boots.json} | 4 +- .../items/dragonite_chestplate.json | 6 + .../fantasysmp/items/dragonite_helmet.json} | 4 +- .../fantasysmp/items/dragonite_ingot.json | 6 + .../fantasysmp/items/dragonite_leggings.json | 6 + .../fantasysmp/items/dragonite_sword.json | 6 + .../assets/fantasysmp/items/ender_boots.json | 6 + .../fantasysmp/items/ender_chestplate.json | 6 + .../assets/fantasysmp/items/ender_helmet.json | 6 + .../assets/fantasysmp/items/ender_ingot.json | 6 + .../fantasysmp/items/ender_leggings.json | 6 + .../assets/fantasysmp/items/ender_sword.json | 6 + .../fantasysmp/items/witherite_axe.json | 6 + .../fantasysmp/items/witherite_boots.json | 6 + .../items/witherite_chestplate.json | 6 + .../fantasysmp/items/witherite_helmet.json | 6 + .../fantasysmp/items/witherite_leggings.json | 6 + .../fantasysmp/items/witherite_shield.json | 6 + .../fantasysmp/items/witherite_sword.json | 6 + .../assets/fantasysmp/lang/en_us.json | 40 +++++++ .../fantasysmp/models/item/dragon_scale.json | 6 + .../models/item/dragonite_boots.json | 6 + .../models/item/dragonite_chestplate.json | 6 + .../models/item/dragonite_helmet.json | 6 + .../models/item/dragonite_ingot.json | 6 + .../models/item/dragonite_leggings.json | 6 + .../models/item/dragonite_sword.json | 6 + .../fantasysmp/models/item/ender_boots.json | 6 + .../models/item/ender_chestplate.json | 6 + .../fantasysmp/models/item/ender_helmet.json | 6 + .../fantasysmp/models/item/ender_ingot.json | 6 + .../models/item/ender_leggings.json | 6 + .../fantasysmp/models/item/ender_sword.json | 6 + .../fantasysmp/models/item/witherite_axe.json | 6 + .../models/item/witherite_boots.json | 6 + .../models/item/witherite_chestplate.json | 6 + .../models/item/witherite_helmet.json | 6 + .../models/item/witherite_leggings.json | 6 + .../models/item/witherite_shield.json | 6 + .../models/item/witherite_sword.json | 6 + .../recipes/combat/ender_boots.json | 32 ++++++ .../recipes/combat/ender_chestplate.json | 32 ++++++ .../recipes/combat/ender_helmet.json | 32 ++++++ .../recipes/combat/ender_leggings.json | 32 ++++++ .../recipes/combat/ender_sword.json | 32 ++++++ .../advancement/recipes/misc/ender_ingot.json | 35 ++++++ .../data/fantasysmp/recipe/ender_boots.json | 9 ++ .../fantasysmp/recipe/ender_chestplate.json | 9 ++ .../data/fantasysmp/recipe/ender_helmet.json | 9 ++ .../data/fantasysmp/recipe/ender_ingot.json | 16 +++ .../fantasysmp/recipe/ender_leggings.json | 9 ++ .../data/fantasysmp/recipe/ender_sword.json | 9 ++ .../data/minecraft/tags/item/axes.json | 0 .../data/minecraft/tags/item/chest_armor.json | 7 ++ .../data/minecraft/tags/item/foot_armor.json | 7 ++ .../data/minecraft/tags/item/head_armor.json | 7 ++ .../data/minecraft/tags/item/leg_armor.json | 7 ++ .../data/minecraft/tags/item/swords.json | 7 ++ src/main/kotlin/dev/zxq5/Fantasysmp.kt | 31 +++++- .../dev/zxq5/items/FantasysmpItemRegistry.kt | 2 +- .../kotlin/dev/zxq5/items/sets/Dragonite.kt | 44 ++++++-- src/main/kotlin/dev/zxq5/items/sets/Ender.kt | 24 +++- .../kotlin/dev/zxq5/items/sets/Witherite.kt | 31 +++++- .../dev/zxq5/items/template/GenericGearSet.kt | 11 +- .../dev/zxq5/items/template/GenericItemSet.kt | 105 +++++++++++++----- .../assets/fantasysmp/equipment/crimson.json | 14 --- .../fantasysmp/equipment/dragonite.json | 20 ---- .../assets/fantasysmp/equipment/ender.json | 14 --- .../fantasysmp/equipment/mechanist.json | 14 --- .../assets/fantasysmp/equipment/poseidon.json | 14 --- .../fantasysmp/equipment/true_netherite.json | 14 --- .../fantasysmp/equipment/witherite.json | 14 --- src/main/resources/assets/fantasysmp/icon.png | Bin 3636 -> 115551 bytes .../items/alchemist_chestplate.json | 6 - .../fantasysmp/items/alchemist_leggings.json | 6 - .../fantasysmp/items/blazing_boots.json | 6 - .../fantasysmp/items/blazing_chestplate.json | 6 - .../fantasysmp/items/blazing_helmet.json | 6 - .../fantasysmp/items/blazing_leggings.json | 6 - .../fantasysmp/items/blazing_sword.json | 6 - .../fantasysmp/items/crimson_sword.json | 6 - .../assets/fantasysmp/items/dragon_scale.json | 6 - .../fantasysmp/items/dragonite_boots.json | 6 - .../items/dragonite_chestplate.json | 6 - .../fantasysmp/items/dragonite_helmet.json | 6 - .../fantasysmp/items/dragonite_ingot.json | 6 - .../fantasysmp/items/dragonite_leggings.json | 6 - .../fantasysmp/items/dragonite_sword.json | 6 - .../assets/fantasysmp/items/ender_boots.json | 6 - .../fantasysmp/items/ender_chestplate.json | 6 - .../assets/fantasysmp/items/ender_helmet.json | 6 - .../fantasysmp/items/ender_leggings.json | 6 - .../assets/fantasysmp/items/ender_sword.json | 6 - .../fantasysmp/items/lightning_sword.json | 6 - .../fantasysmp/items/poseidons_boots.json | 6 - .../items/poseidons_chestplate.json | 6 - .../fantasysmp/items/poseidons_helmet.json | 6 - .../fantasysmp/items/poseidons_leggings.json | 6 - .../fantasysmp/items/poseidons_trident.json | 6 - .../fantasysmp/items/stevens_wrath.json | 6 - .../items/true_netherite_boots.json | 6 - .../items/true_netherite_chestplate.json | 6 - .../items/true_netherite_helmet.json | 6 - .../items/true_netherite_leggings.json | 6 - .../items/true_netherite_sword.json | 6 - .../fantasysmp/items/witherite_axe.json | 6 - .../fantasysmp/items/witherite_boots.json | 6 - .../items/witherite_chestplate.json | 6 - .../fantasysmp/items/witherite_helmet.json | 6 - .../fantasysmp/items/witherite_leggings.json | 6 - .../fantasysmp/items/witherite_shield.json | 44 -------- .../fantasysmp/items/witherite_sword.json | 6 - .../assets/fantasysmp/lang/en_us.json | 16 --- .../models/item/alchemist_boots.json | 6 - .../models/item/alchemist_chestplate.json | 6 - .../models/item/alchemist_helmet.json | 6 - .../models/item/alchemist_leggings.json | 6 - .../models/item/alchemist_sword.json | 6 - .../fantasysmp/models/item/blazing_boots.json | 6 - .../models/item/blazing_chestplate.json | 6 - .../models/item/blazing_helmet.json | 6 - .../models/item/blazing_leggings.json | 6 - .../fantasysmp/models/item/blazing_sword.json | 6 - .../fantasysmp/models/item/crimson_sword.json | 6 - .../fantasysmp/models/item/dragon_scale.json | 6 - .../models/item/dragonite_boots.json | 6 - .../models/item/dragonite_chestplate.json | 6 - .../models/item/dragonite_helmet.json | 6 - .../models/item/dragonite_ingot.json | 6 - .../models/item/dragonite_leggings.json | 6 - .../models/item/dragonite_sword.json | 6 - .../fantasysmp/models/item/ender_boots.json | 6 - .../models/item/ender_chestplate.json | 6 - .../fantasysmp/models/item/ender_helmet.json | 6 - .../models/item/ender_leggings.json | 6 - .../fantasysmp/models/item/ender_sword.json | 6 - .../models/item/lightning_sword.json | 7 -- .../models/item/poseidons_boots.json | 6 - .../models/item/poseidons_chestplate.json | 6 - .../models/item/poseidons_helmet.json | 6 - .../models/item/poseidons_leggings.json | 6 - .../models/item/poseidons_trident.json | 6 - .../fantasysmp/models/item/stevens_wrath.json | 28 ----- .../models/item/true_netherite_boots.json | 6 - .../item/true_netherite_chestplate.json | 6 - .../models/item/true_netherite_helmet.json | 6 - .../models/item/true_netherite_leggings.json | 6 - .../models/item/true_netherite_sword.json | 6 - .../fantasysmp/models/item/witherite_axe.json | 6 - .../models/item/witherite_boots.json | 6 - .../models/item/witherite_chestplate.json | 6 - .../models/item/witherite_helmet.json | 6 - .../models/item/witherite_leggings.json | 6 - .../models/item/witherite_sword.json | 6 - .../tags/item/enchantable/armor.json | 12 -- .../tags/item/enchantable/chest_armor.json | 6 - .../tags/item/enchantable/durability.json | 12 -- .../tags/item/enchantable/foot_armor.json | 6 - .../tags/item/enchantable/head_armor.json | 6 - .../tags/item/enchantable/leg_armor.json | 6 - .../data/minecraft/tags/item/swords.json | 6 - .../minecraft/tags/item/trimmable_armor.json | 12 -- 167 files changed, 840 insertions(+), 792 deletions(-) create mode 100644 src/main/generated/assets/fantasysmp/equipment/dragonite.json rename src/main/{resources/assets/fantasysmp/equipment/blazing.json => generated/assets/fantasysmp/equipment/ender.json} (57%) rename src/main/{resources/assets/fantasysmp/equipment/alchemist.json => generated/assets/fantasysmp/equipment/witherite.json} (56%) rename src/main/{resources/assets/fantasysmp/items/alchemist_boots.json => generated/assets/fantasysmp/items/dragon_scale.json} (50%) rename src/main/{resources/assets/fantasysmp/items/alchemist_sword.json => generated/assets/fantasysmp/items/dragonite_boots.json} (50%) create mode 100644 src/main/generated/assets/fantasysmp/items/dragonite_chestplate.json rename src/main/{resources/assets/fantasysmp/items/alchemist_helmet.json => generated/assets/fantasysmp/items/dragonite_helmet.json} (50%) create mode 100644 src/main/generated/assets/fantasysmp/items/dragonite_ingot.json create mode 100644 src/main/generated/assets/fantasysmp/items/dragonite_leggings.json create mode 100644 src/main/generated/assets/fantasysmp/items/dragonite_sword.json create mode 100644 src/main/generated/assets/fantasysmp/items/ender_boots.json create mode 100644 src/main/generated/assets/fantasysmp/items/ender_chestplate.json create mode 100644 src/main/generated/assets/fantasysmp/items/ender_helmet.json create mode 100644 src/main/generated/assets/fantasysmp/items/ender_ingot.json create mode 100644 src/main/generated/assets/fantasysmp/items/ender_leggings.json create mode 100644 src/main/generated/assets/fantasysmp/items/ender_sword.json create mode 100644 src/main/generated/assets/fantasysmp/items/witherite_axe.json create mode 100644 src/main/generated/assets/fantasysmp/items/witherite_boots.json create mode 100644 src/main/generated/assets/fantasysmp/items/witherite_chestplate.json create mode 100644 src/main/generated/assets/fantasysmp/items/witherite_helmet.json create mode 100644 src/main/generated/assets/fantasysmp/items/witherite_leggings.json create mode 100644 src/main/generated/assets/fantasysmp/items/witherite_shield.json create mode 100644 src/main/generated/assets/fantasysmp/items/witherite_sword.json create mode 100644 src/main/generated/assets/fantasysmp/lang/en_us.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/dragon_scale.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/dragonite_boots.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/dragonite_chestplate.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/dragonite_helmet.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/dragonite_ingot.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/dragonite_leggings.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/dragonite_sword.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/ender_boots.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/ender_chestplate.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/ender_helmet.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/ender_ingot.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/ender_leggings.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/ender_sword.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/witherite_axe.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/witherite_boots.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/witherite_chestplate.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/witherite_helmet.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/witherite_leggings.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/witherite_shield.json create mode 100644 src/main/generated/assets/fantasysmp/models/item/witherite_sword.json create mode 100644 src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_boots.json create mode 100644 src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_chestplate.json create mode 100644 src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_helmet.json create mode 100644 src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_leggings.json create mode 100644 src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_sword.json create mode 100644 src/main/generated/data/fantasysmp/advancement/recipes/misc/ender_ingot.json create mode 100644 src/main/generated/data/fantasysmp/recipe/ender_boots.json create mode 100644 src/main/generated/data/fantasysmp/recipe/ender_chestplate.json create mode 100644 src/main/generated/data/fantasysmp/recipe/ender_helmet.json create mode 100644 src/main/generated/data/fantasysmp/recipe/ender_ingot.json create mode 100644 src/main/generated/data/fantasysmp/recipe/ender_leggings.json create mode 100644 src/main/generated/data/fantasysmp/recipe/ender_sword.json rename src/main/{resources => generated}/data/minecraft/tags/item/axes.json (100%) create mode 100644 src/main/generated/data/minecraft/tags/item/chest_armor.json create mode 100644 src/main/generated/data/minecraft/tags/item/foot_armor.json create mode 100644 src/main/generated/data/minecraft/tags/item/head_armor.json create mode 100644 src/main/generated/data/minecraft/tags/item/leg_armor.json create mode 100644 src/main/generated/data/minecraft/tags/item/swords.json delete mode 100644 src/main/resources/assets/fantasysmp/equipment/crimson.json delete mode 100644 src/main/resources/assets/fantasysmp/equipment/dragonite.json delete mode 100644 src/main/resources/assets/fantasysmp/equipment/ender.json delete mode 100644 src/main/resources/assets/fantasysmp/equipment/mechanist.json delete mode 100644 src/main/resources/assets/fantasysmp/equipment/poseidon.json delete mode 100644 src/main/resources/assets/fantasysmp/equipment/true_netherite.json delete mode 100644 src/main/resources/assets/fantasysmp/equipment/witherite.json mode change 100644 => 100755 src/main/resources/assets/fantasysmp/icon.png delete mode 100644 src/main/resources/assets/fantasysmp/items/alchemist_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/items/alchemist_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/items/blazing_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/items/blazing_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/items/blazing_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/items/blazing_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/items/blazing_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/items/crimson_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/items/dragon_scale.json delete mode 100644 src/main/resources/assets/fantasysmp/items/dragonite_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/items/dragonite_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/items/dragonite_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/items/dragonite_ingot.json delete mode 100644 src/main/resources/assets/fantasysmp/items/dragonite_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/items/dragonite_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/items/ender_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/items/ender_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/items/ender_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/items/ender_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/items/ender_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/items/lightning_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_trident.json delete mode 100644 src/main/resources/assets/fantasysmp/items/stevens_wrath.json delete mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/items/witherite_axe.json delete mode 100644 src/main/resources/assets/fantasysmp/items/witherite_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/items/witherite_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/items/witherite_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/items/witherite_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/items/witherite_shield.json delete mode 100644 src/main/resources/assets/fantasysmp/items/witherite_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/lang/en_us.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/crimson_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/dragon_scale.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/dragonite_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/dragonite_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/dragonite_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/dragonite_ingot.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/dragonite_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/dragonite_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/lightning_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_trident.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/stevens_wrath.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_sword.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_axe.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_boots.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_chestplate.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_helmet.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_leggings.json delete mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_sword.json delete mode 100644 src/main/resources/data/minecraft/tags/item/enchantable/armor.json delete mode 100644 src/main/resources/data/minecraft/tags/item/enchantable/chest_armor.json delete mode 100644 src/main/resources/data/minecraft/tags/item/enchantable/durability.json delete mode 100644 src/main/resources/data/minecraft/tags/item/enchantable/foot_armor.json delete mode 100644 src/main/resources/data/minecraft/tags/item/enchantable/head_armor.json delete mode 100644 src/main/resources/data/minecraft/tags/item/enchantable/leg_armor.json delete mode 100644 src/main/resources/data/minecraft/tags/item/swords.json delete mode 100644 src/main/resources/data/minecraft/tags/item/trimmable_armor.json diff --git a/src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt b/src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt index 780b18f..e1b26bc 100644 --- a/src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt +++ b/src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt @@ -1,6 +1,13 @@ package dev.zxq5.client +import com.google.gson.JsonArray +import com.google.gson.JsonObject +import dev.zxq5.Fantasysmp +import dev.zxq5.ModItemTagProvider +import dev.zxq5.ModLanguageProvider import dev.zxq5.ModRecipeProvider +import dev.zxq5.items.template.CustomItemBuilder +import dev.zxq5.items.template.GenericGearSet import dev.zxq5.items.template.GenericItemSet import dev.zxq5.items.template.ModelSpec import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider @@ -10,13 +17,21 @@ import net.fabricmc.fabric.api.datagen.v1.FabricPackOutput import net.minecraft.client.data.models.BlockModelGenerators import net.minecraft.client.data.models.ItemModelGenerators import net.minecraft.client.data.models.model.ModelTemplates +import net.minecraft.data.CachedOutput +import net.minecraft.data.DataProvider +import net.minecraft.data.PackOutput +import java.util.concurrent.CompletableFuture object FantasysmpDataGenerator : DataGeneratorEntrypoint { override fun onInitializeDataGenerator(fabricDataGenerator: FabricDataGenerator) { val pack = fabricDataGenerator.createPack() - pack.addProvider(::ModRecipeProvider) // main-safe, can live in either sourceSet -// pack.addProvider(::ModItemTagProvider) // main-safe - pack.addProvider(::ModModelProvider) // needs client, since ItemModelGenerators is client-only + pack.addProvider(::ModRecipeProvider) + pack.addProvider(::ModItemTagProvider) // TODO! fix impl. + pack.addProvider(::ModLanguageProvider) + + // runs only in the client as it requires client only libs! + pack.addProvider(::ModModelProvider) + pack.addProvider(::ModEquipmentAssetProvider) } } @@ -25,13 +40,48 @@ class ModModelProvider(output: FabricPackOutput) : FabricModelProvider(output) { override fun generateBlockStateModels(blockModels: BlockModelGenerators) {} override fun generateItemModels(itemModels: ItemModelGenerators) { - GenericItemSet.all.forEach { it.generateModels(itemModels) } + println("Generating item models") + GenericItemSet.all.forEach { + println("doing $it") + it.generateModels(itemModels) + } } } +class ModEquipmentAssetProvider(private val output: FabricPackOutput) : DataProvider { + override fun run(writer: CachedOutput): CompletableFuture<*> { + val futures = GenericItemSet.all + .filterIsInstance() + .map { set -> writeAsset(writer, set) } + return CompletableFuture.allOf(*futures.toTypedArray()) + } + + private fun writeAsset(writer: CachedOutput, set: GenericGearSet): CompletableFuture<*> { + val json = JsonObject() + val layersJson = JsonObject() + set.equipmentAssetSpec.layers.forEach { (layerType, layers) -> + val arr = JsonArray() + layers.forEach { layer -> + val entry = JsonObject() + entry.addProperty("texture", layer.texture) + if (!layer.usePlayerTexture) entry.addProperty("use_player_texture", false) + arr.add(entry) + } + layersJson.add(layerType, arr) + } + json.add("layers", layersJson) + + val path = output.outputFolder + .resolve("assets/${Fantasysmp.MOD_ID}/equipment/${set.materialName}.json") + + return DataProvider.saveStable(writer, json, path) + } + + override fun getName() = "Fantasysmp Equipment Assets" +} + // client sourceSet fun GenericItemSet.generateModels(itemModels: ItemModelGenerators) { - if (this !is GenericItemSet) return modelSpecs.forEach { (item, spec) -> when (spec) { ModelSpec.Generated -> itemModels.generateFlatItem(item, ModelTemplates.FLAT_ITEM) diff --git a/src/main/generated/assets/fantasysmp/equipment/dragonite.json b/src/main/generated/assets/fantasysmp/equipment/dragonite.json new file mode 100644 index 0000000..2822df9 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/equipment/dragonite.json @@ -0,0 +1,20 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:dragonite" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:dragonite" + } + ], + "wings": [ + { + "texture": "fantasysmp:dragonite", + "use_player_texture": false + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/fantasysmp/equipment/blazing.json b/src/main/generated/assets/fantasysmp/equipment/ender.json similarity index 57% rename from src/main/resources/assets/fantasysmp/equipment/blazing.json rename to src/main/generated/assets/fantasysmp/equipment/ender.json index 076e1bf..13b3894 100644 --- a/src/main/resources/assets/fantasysmp/equipment/blazing.json +++ b/src/main/generated/assets/fantasysmp/equipment/ender.json @@ -2,13 +2,13 @@ "layers": { "humanoid": [ { - "texture": "fantasysmp:blazing" + "texture": "fantasysmp:ender" } ], "humanoid_leggings": [ { - "texture": "fantasysmp:blazing" + "texture": "fantasysmp:ender" } ] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/fantasysmp/equipment/alchemist.json b/src/main/generated/assets/fantasysmp/equipment/witherite.json similarity index 56% rename from src/main/resources/assets/fantasysmp/equipment/alchemist.json rename to src/main/generated/assets/fantasysmp/equipment/witherite.json index 2c8c097..9145e43 100644 --- a/src/main/resources/assets/fantasysmp/equipment/alchemist.json +++ b/src/main/generated/assets/fantasysmp/equipment/witherite.json @@ -2,13 +2,13 @@ "layers": { "humanoid": [ { - "texture": "fantasysmp:alchemist" + "texture": "fantasysmp:witherite" } ], "humanoid_leggings": [ { - "texture": "fantasysmp:alchemist" + "texture": "fantasysmp:witherite" } ] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/fantasysmp/items/alchemist_boots.json b/src/main/generated/assets/fantasysmp/items/dragon_scale.json similarity index 50% rename from src/main/resources/assets/fantasysmp/items/alchemist_boots.json rename to src/main/generated/assets/fantasysmp/items/dragon_scale.json index b4aaa59..6c6fa54 100644 --- a/src/main/resources/assets/fantasysmp/items/alchemist_boots.json +++ b/src/main/generated/assets/fantasysmp/items/dragon_scale.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "fantasysmp:item/alchemist_boots" + "model": "fantasysmp:item/dragon_scale" } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/fantasysmp/items/alchemist_sword.json b/src/main/generated/assets/fantasysmp/items/dragonite_boots.json similarity index 50% rename from src/main/resources/assets/fantasysmp/items/alchemist_sword.json rename to src/main/generated/assets/fantasysmp/items/dragonite_boots.json index b0307d9..da6fe97 100644 --- a/src/main/resources/assets/fantasysmp/items/alchemist_sword.json +++ b/src/main/generated/assets/fantasysmp/items/dragonite_boots.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "fantasysmp:item/alchemist_sword" + "model": "fantasysmp:item/dragonite_boots" } -} +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/dragonite_chestplate.json b/src/main/generated/assets/fantasysmp/items/dragonite_chestplate.json new file mode 100644 index 0000000..97d6f05 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/dragonite_chestplate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/dragonite_chestplate" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/fantasysmp/items/alchemist_helmet.json b/src/main/generated/assets/fantasysmp/items/dragonite_helmet.json similarity index 50% rename from src/main/resources/assets/fantasysmp/items/alchemist_helmet.json rename to src/main/generated/assets/fantasysmp/items/dragonite_helmet.json index 9cf4c33..4150b33 100644 --- a/src/main/resources/assets/fantasysmp/items/alchemist_helmet.json +++ b/src/main/generated/assets/fantasysmp/items/dragonite_helmet.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "fantasysmp:item/alchemist_helmet" + "model": "fantasysmp:item/dragonite_helmet" } -} +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/dragonite_ingot.json b/src/main/generated/assets/fantasysmp/items/dragonite_ingot.json new file mode 100644 index 0000000..4b354b9 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/dragonite_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/dragonite_ingot" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/dragonite_leggings.json b/src/main/generated/assets/fantasysmp/items/dragonite_leggings.json new file mode 100644 index 0000000..d571e3a --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/dragonite_leggings.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/dragonite_leggings" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/dragonite_sword.json b/src/main/generated/assets/fantasysmp/items/dragonite_sword.json new file mode 100644 index 0000000..da1605a --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/dragonite_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/dragonite_sword" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/ender_boots.json b/src/main/generated/assets/fantasysmp/items/ender_boots.json new file mode 100644 index 0000000..fe51e92 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/ender_boots.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/ender_boots" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/ender_chestplate.json b/src/main/generated/assets/fantasysmp/items/ender_chestplate.json new file mode 100644 index 0000000..51a4d22 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/ender_chestplate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/ender_chestplate" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/ender_helmet.json b/src/main/generated/assets/fantasysmp/items/ender_helmet.json new file mode 100644 index 0000000..67fb4c1 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/ender_helmet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/ender_helmet" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/ender_ingot.json b/src/main/generated/assets/fantasysmp/items/ender_ingot.json new file mode 100644 index 0000000..237794c --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/ender_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/ender_ingot" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/ender_leggings.json b/src/main/generated/assets/fantasysmp/items/ender_leggings.json new file mode 100644 index 0000000..8e4c170 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/ender_leggings.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/ender_leggings" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/ender_sword.json b/src/main/generated/assets/fantasysmp/items/ender_sword.json new file mode 100644 index 0000000..bf4fbca --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/ender_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/ender_sword" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/witherite_axe.json b/src/main/generated/assets/fantasysmp/items/witherite_axe.json new file mode 100644 index 0000000..fabb24f --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/witherite_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/witherite_axe" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/witherite_boots.json b/src/main/generated/assets/fantasysmp/items/witherite_boots.json new file mode 100644 index 0000000..0b5a585 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/witherite_boots.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/witherite_boots" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/witherite_chestplate.json b/src/main/generated/assets/fantasysmp/items/witherite_chestplate.json new file mode 100644 index 0000000..86f4cfb --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/witherite_chestplate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/witherite_chestplate" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/witherite_helmet.json b/src/main/generated/assets/fantasysmp/items/witherite_helmet.json new file mode 100644 index 0000000..e204673 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/witherite_helmet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/witherite_helmet" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/witherite_leggings.json b/src/main/generated/assets/fantasysmp/items/witherite_leggings.json new file mode 100644 index 0000000..00862e3 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/witherite_leggings.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/witherite_leggings" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/witherite_shield.json b/src/main/generated/assets/fantasysmp/items/witherite_shield.json new file mode 100644 index 0000000..1f13776 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/witherite_shield.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/witherite_shield" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/items/witherite_sword.json b/src/main/generated/assets/fantasysmp/items/witherite_sword.json new file mode 100644 index 0000000..0c64311 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/items/witherite_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "fantasysmp:item/witherite_sword" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/lang/en_us.json b/src/main/generated/assets/fantasysmp/lang/en_us.json new file mode 100644 index 0000000..7b5319f --- /dev/null +++ b/src/main/generated/assets/fantasysmp/lang/en_us.json @@ -0,0 +1,40 @@ +{ + "item.fantasysmp.dragon_scale": "Dragon Scale", + "item.fantasysmp.dragonite_boots": "Dragonite Boots", + "item.fantasysmp.dragonite_boots.lore.line1": "Boots forged from the essence of dragons", + "item.fantasysmp.dragonite_chestplate": "Dragonite Chestplate", + "item.fantasysmp.dragonite_chestplate.lore.line1": "A chestplate forged from the essence of dragons", + "item.fantasysmp.dragonite_helmet": "Dragonite Helmet", + "item.fantasysmp.dragonite_helmet.lore.line1": "A helmet forged from the essence of dragons", + "item.fantasysmp.dragonite_ingot": "Dragonite Ingot", + "item.fantasysmp.dragonite_leggings": "Dragonite Leggings", + "item.fantasysmp.dragonite_leggings.lore.line1": "Leggings forged from the essence of dragons", + "item.fantasysmp.dragonite_sword": "Dragonite Sword", + "item.fantasysmp.dragonite_sword.lore.line1": "A sword forged from the essence of dragons", + "item.fantasysmp.ender_boots": "Ender Boots", + "item.fantasysmp.ender_boots.lore.line1": "Crafted from the essence of endermen", + "item.fantasysmp.ender_chestplate": "Ender Chestplate", + "item.fantasysmp.ender_chestplate.lore.line1": "Crafted from the essence of endermen", + "item.fantasysmp.ender_helmet": "Ender Helmet", + "item.fantasysmp.ender_helmet.lore.line1": "Crafted from the essence of endermen", + "item.fantasysmp.ender_ingot": "Ender Ingot", + "item.fantasysmp.ender_ingot.lore.line1": "Crafted from the essence of endermen", + "item.fantasysmp.ender_leggings": "Ender Leggings", + "item.fantasysmp.ender_leggings.lore.line1": "Crafted from the essence of endermen", + "item.fantasysmp.ender_sword": "Ender Sword", + "item.fantasysmp.ender_sword.lore.line1": "Crafted from the essence of endermen", + "item.fantasysmp.witherite_axe": "Witherite Axe", + "item.fantasysmp.witherite_axe.lore.line1": "An axe forged with the skulls of wither skeletons.", + "item.fantasysmp.witherite_boots": "Witherite Boots", + "item.fantasysmp.witherite_boots.lore.line1": "Boots forged with the skulls of wither skeletons.", + "item.fantasysmp.witherite_chestplate": "Witherite Chestplate", + "item.fantasysmp.witherite_chestplate.lore.line1": "A chestplate forged with the skulls of wither skeletons.", + "item.fantasysmp.witherite_helmet": "Witherite Helmet", + "item.fantasysmp.witherite_helmet.lore.line1": "A helmet forged with the skulls of wither skeletons.", + "item.fantasysmp.witherite_leggings": "Witherite Leggings", + "item.fantasysmp.witherite_leggings.lore.line1": "Leggings forged with the skulls of wither skeletons.", + "item.fantasysmp.witherite_shield": "Witherite Shield", + "item.fantasysmp.witherite_shield.lore.line1": "A shield forged with the skulls of wither skeletons.", + "item.fantasysmp.witherite_sword": "Witherite Sword", + "item.fantasysmp.witherite_sword.lore.line1": "A sword forged with the skulls of wither skeletons." +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/dragon_scale.json b/src/main/generated/assets/fantasysmp/models/item/dragon_scale.json new file mode 100644 index 0000000..17ee2e2 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/dragon_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/dragon_scale" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/dragonite_boots.json b/src/main/generated/assets/fantasysmp/models/item/dragonite_boots.json new file mode 100644 index 0000000..f6f9a74 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/dragonite_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/dragonite_boots" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/dragonite_chestplate.json b/src/main/generated/assets/fantasysmp/models/item/dragonite_chestplate.json new file mode 100644 index 0000000..ad39bf9 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/dragonite_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/dragonite_chestplate" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/dragonite_helmet.json b/src/main/generated/assets/fantasysmp/models/item/dragonite_helmet.json new file mode 100644 index 0000000..4034ea4 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/dragonite_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/dragonite_helmet" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/dragonite_ingot.json b/src/main/generated/assets/fantasysmp/models/item/dragonite_ingot.json new file mode 100644 index 0000000..8e40c91 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/dragonite_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/dragonite_ingot" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/dragonite_leggings.json b/src/main/generated/assets/fantasysmp/models/item/dragonite_leggings.json new file mode 100644 index 0000000..62379c0 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/dragonite_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/dragonite_leggings" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/dragonite_sword.json b/src/main/generated/assets/fantasysmp/models/item/dragonite_sword.json new file mode 100644 index 0000000..30659fd --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/dragonite_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "fantasysmp:item/dragonite_sword" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/ender_boots.json b/src/main/generated/assets/fantasysmp/models/item/ender_boots.json new file mode 100644 index 0000000..431a0e4 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/ender_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/ender_boots" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/ender_chestplate.json b/src/main/generated/assets/fantasysmp/models/item/ender_chestplate.json new file mode 100644 index 0000000..2fec55e --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/ender_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/ender_chestplate" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/ender_helmet.json b/src/main/generated/assets/fantasysmp/models/item/ender_helmet.json new file mode 100644 index 0000000..da69545 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/ender_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/ender_helmet" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/ender_ingot.json b/src/main/generated/assets/fantasysmp/models/item/ender_ingot.json new file mode 100644 index 0000000..ab2d972 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/ender_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/ender_ingot" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/ender_leggings.json b/src/main/generated/assets/fantasysmp/models/item/ender_leggings.json new file mode 100644 index 0000000..a1cd79f --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/ender_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/ender_leggings" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/ender_sword.json b/src/main/generated/assets/fantasysmp/models/item/ender_sword.json new file mode 100644 index 0000000..29ddf89 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/ender_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/ender_sword" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/witherite_axe.json b/src/main/generated/assets/fantasysmp/models/item/witherite_axe.json new file mode 100644 index 0000000..12bc05b --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/witherite_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "fantasysmp:item/witherite_axe" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/witherite_boots.json b/src/main/generated/assets/fantasysmp/models/item/witherite_boots.json new file mode 100644 index 0000000..ad9c11a --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/witherite_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/witherite_boots" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/witherite_chestplate.json b/src/main/generated/assets/fantasysmp/models/item/witherite_chestplate.json new file mode 100644 index 0000000..0dbdb46 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/witherite_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/witherite_chestplate" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/witherite_helmet.json b/src/main/generated/assets/fantasysmp/models/item/witherite_helmet.json new file mode 100644 index 0000000..014f679 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/witherite_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/witherite_helmet" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/witherite_leggings.json b/src/main/generated/assets/fantasysmp/models/item/witherite_leggings.json new file mode 100644 index 0000000..50b263d --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/witherite_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/witherite_leggings" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/witherite_shield.json b/src/main/generated/assets/fantasysmp/models/item/witherite_shield.json new file mode 100644 index 0000000..5dee843 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/witherite_shield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "fantasysmp:item/witherite_shield" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/fantasysmp/models/item/witherite_sword.json b/src/main/generated/assets/fantasysmp/models/item/witherite_sword.json new file mode 100644 index 0000000..815f2a2 --- /dev/null +++ b/src/main/generated/assets/fantasysmp/models/item/witherite_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "fantasysmp:item/witherite_sword" + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_boots.json b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_boots.json new file mode 100644 index 0000000..6ac2df9 --- /dev/null +++ b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_boots.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_addition": { + "conditions": { + "items": [ + { + "items": "fantasysmp:ender_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "fantasysmp:ender_boots" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_addition" + ] + ], + "rewards": { + "recipes": [ + "fantasysmp:ender_boots" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_chestplate.json b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_chestplate.json new file mode 100644 index 0000000..26d2f1f --- /dev/null +++ b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_chestplate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_addition": { + "conditions": { + "items": [ + { + "items": "fantasysmp:ender_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "fantasysmp:ender_chestplate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_addition" + ] + ], + "rewards": { + "recipes": [ + "fantasysmp:ender_chestplate" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_helmet.json b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_helmet.json new file mode 100644 index 0000000..b765fc6 --- /dev/null +++ b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_helmet.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_addition": { + "conditions": { + "items": [ + { + "items": "fantasysmp:ender_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "fantasysmp:ender_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_addition" + ] + ], + "rewards": { + "recipes": [ + "fantasysmp:ender_helmet" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_leggings.json b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_leggings.json new file mode 100644 index 0000000..a899d5f --- /dev/null +++ b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_leggings.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_addition": { + "conditions": { + "items": [ + { + "items": "fantasysmp:ender_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "fantasysmp:ender_leggings" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_addition" + ] + ], + "rewards": { + "recipes": [ + "fantasysmp:ender_leggings" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_sword.json b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_sword.json new file mode 100644 index 0000000..a5bdbc8 --- /dev/null +++ b/src/main/generated/data/fantasysmp/advancement/recipes/combat/ender_sword.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_addition": { + "conditions": { + "items": [ + { + "items": "fantasysmp:ender_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "fantasysmp:ender_sword" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_addition" + ] + ], + "rewards": { + "recipes": [ + "fantasysmp:ender_sword" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/advancement/recipes/misc/ender_ingot.json b/src/main/generated/data/fantasysmp/advancement/recipes/misc/ender_ingot.json new file mode 100644 index 0000000..2b03c38 --- /dev/null +++ b/src/main/generated/data/fantasysmp/advancement/recipes/misc/ender_ingot.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ingredient": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:ender_eye", + "minecraft:diamond" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "fantasysmp:ender_ingot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ingredient" + ] + ], + "rewards": { + "recipes": [ + "fantasysmp:ender_ingot" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/recipe/ender_boots.json b/src/main/generated/data/fantasysmp/recipe/ender_boots.json new file mode 100644 index 0000000..d8733cf --- /dev/null +++ b/src/main/generated/data/fantasysmp/recipe/ender_boots.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "fantasysmp:ender_ingot", + "base": "minecraft:diamond_boots", + "result": { + "id": "fantasysmp:ender_boots" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/recipe/ender_chestplate.json b/src/main/generated/data/fantasysmp/recipe/ender_chestplate.json new file mode 100644 index 0000000..a87047e --- /dev/null +++ b/src/main/generated/data/fantasysmp/recipe/ender_chestplate.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "fantasysmp:ender_ingot", + "base": "minecraft:diamond_chestplate", + "result": { + "id": "fantasysmp:ender_chestplate" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/recipe/ender_helmet.json b/src/main/generated/data/fantasysmp/recipe/ender_helmet.json new file mode 100644 index 0000000..49cfa9e --- /dev/null +++ b/src/main/generated/data/fantasysmp/recipe/ender_helmet.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "fantasysmp:ender_ingot", + "base": "minecraft:diamond_helmet", + "result": { + "id": "fantasysmp:ender_helmet" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/recipe/ender_ingot.json b/src/main/generated/data/fantasysmp/recipe/ender_ingot.json new file mode 100644 index 0000000..bc9f862 --- /dev/null +++ b/src/main/generated/data/fantasysmp/recipe/ender_ingot.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "D": "minecraft:diamond", + "E": "minecraft:ender_eye" + }, + "pattern": [ + "EDE", + "DED", + "EDE" + ], + "result": { + "id": "fantasysmp:ender_ingot" + } +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/recipe/ender_leggings.json b/src/main/generated/data/fantasysmp/recipe/ender_leggings.json new file mode 100644 index 0000000..14d5c26 --- /dev/null +++ b/src/main/generated/data/fantasysmp/recipe/ender_leggings.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "fantasysmp:ender_ingot", + "base": "minecraft:diamond_leggings", + "result": { + "id": "fantasysmp:ender_leggings" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/src/main/generated/data/fantasysmp/recipe/ender_sword.json b/src/main/generated/data/fantasysmp/recipe/ender_sword.json new file mode 100644 index 0000000..37f0688 --- /dev/null +++ b/src/main/generated/data/fantasysmp/recipe/ender_sword.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "fantasysmp:ender_ingot", + "base": "minecraft:diamond_sword", + "result": { + "id": "fantasysmp:ender_sword" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/item/axes.json b/src/main/generated/data/minecraft/tags/item/axes.json similarity index 100% rename from src/main/resources/data/minecraft/tags/item/axes.json rename to src/main/generated/data/minecraft/tags/item/axes.json diff --git a/src/main/generated/data/minecraft/tags/item/chest_armor.json b/src/main/generated/data/minecraft/tags/item/chest_armor.json new file mode 100644 index 0000000..2569b95 --- /dev/null +++ b/src/main/generated/data/minecraft/tags/item/chest_armor.json @@ -0,0 +1,7 @@ +{ + "values": [ + "fantasysmp:witherite_chestplate", + "fantasysmp:dragonite_chestplate", + "fantasysmp:ender_chestplate" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/item/foot_armor.json b/src/main/generated/data/minecraft/tags/item/foot_armor.json new file mode 100644 index 0000000..8c2a475 --- /dev/null +++ b/src/main/generated/data/minecraft/tags/item/foot_armor.json @@ -0,0 +1,7 @@ +{ + "values": [ + "fantasysmp:witherite_boots", + "fantasysmp:dragonite_boots", + "fantasysmp:ender_boots" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/item/head_armor.json b/src/main/generated/data/minecraft/tags/item/head_armor.json new file mode 100644 index 0000000..addebae --- /dev/null +++ b/src/main/generated/data/minecraft/tags/item/head_armor.json @@ -0,0 +1,7 @@ +{ + "values": [ + "fantasysmp:witherite_helmet", + "fantasysmp:dragonite_helmet", + "fantasysmp:ender_helmet" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/item/leg_armor.json b/src/main/generated/data/minecraft/tags/item/leg_armor.json new file mode 100644 index 0000000..bb5d32d --- /dev/null +++ b/src/main/generated/data/minecraft/tags/item/leg_armor.json @@ -0,0 +1,7 @@ +{ + "values": [ + "fantasysmp:witherite_leggings", + "fantasysmp:dragonite_leggings", + "fantasysmp:ender_leggings" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/item/swords.json b/src/main/generated/data/minecraft/tags/item/swords.json new file mode 100644 index 0000000..39cd165 --- /dev/null +++ b/src/main/generated/data/minecraft/tags/item/swords.json @@ -0,0 +1,7 @@ +{ + "values": [ + "fantasysmp:witherite_sword", + "fantasysmp:dragonite_sword", + "fantasysmp:ender_sword" + ] +} \ No newline at end of file diff --git a/src/main/kotlin/dev/zxq5/Fantasysmp.kt b/src/main/kotlin/dev/zxq5/Fantasysmp.kt index a63abed..2912d73 100644 --- a/src/main/kotlin/dev/zxq5/Fantasysmp.kt +++ b/src/main/kotlin/dev/zxq5/Fantasysmp.kt @@ -1,15 +1,18 @@ package dev.zxq5 -import dev.zxq5.items.template.GenericItemSet -import dev.zxq5.items.template.ItemTagAdder import dev.zxq5.items.ModItems +import dev.zxq5.items.template.GenericItemSet import net.fabricmc.api.ModInitializer import net.fabricmc.fabric.api.datagen.v1.FabricPackOutput +import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagsProvider import net.minecraft.core.HolderLookup +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries import net.minecraft.data.recipes.RecipeOutput import net.minecraft.data.recipes.RecipeProvider +import net.minecraft.resources.ResourceKey import org.slf4j.LoggerFactory import java.util.concurrent.CompletableFuture @@ -34,9 +37,7 @@ class ModRecipeProvider( ): RecipeProvider { return object : RecipeProvider(registries, exporter) { override fun buildRecipes() { - print("GENERATING ALL RECIPES") GenericItemSet.all.forEach { - print("GENERATING RECIPES FOR" + it.items.toString()) it.generateRecipes(registries, exporter) } } @@ -49,7 +50,25 @@ class ModRecipeProvider( class ModItemTagProvider(output: FabricPackOutput, registriesFuture: CompletableFuture) : FabricTagsProvider.ItemTagsProvider(output, registriesFuture) { override fun addTags(provider: HolderLookup.Provider) { - val adder = ItemTagAdder(this) - GenericItemSet.all.forEach { it.generateItemTags(adder) } + GenericItemSet.all.forEach { + it.generateItemTags(provider).forEach { (item, keys) -> + keys.forEach { key -> + builder(key) + .add(ResourceKey.create(Registries.ITEM, BuiltInRegistries.ITEM.getKey(item))) + } + } + } + } +} + +class ModLanguageProvider( + output: FabricPackOutput, registriesFuture: CompletableFuture) : + FabricLanguageProvider(output, registriesFuture) { + + override fun generateTranslations( + registryLookup: HolderLookup.Provider, + translationBuilder: TranslationBuilder + ) { + GenericItemSet.all.forEach { it.generateTranslations(translationBuilder) } } } \ No newline at end of file diff --git a/src/main/kotlin/dev/zxq5/items/FantasysmpItemRegistry.kt b/src/main/kotlin/dev/zxq5/items/FantasysmpItemRegistry.kt index 7f3a80e..a5121b9 100644 --- a/src/main/kotlin/dev/zxq5/items/FantasysmpItemRegistry.kt +++ b/src/main/kotlin/dev/zxq5/items/FantasysmpItemRegistry.kt @@ -1,10 +1,10 @@ package dev.zxq5.items import dev.zxq5.Fantasysmp -import dev.zxq5.items.template.GenericItemSet import dev.zxq5.items.sets.Dragonite import dev.zxq5.items.sets.Ender import dev.zxq5.items.sets.Witherite +import dev.zxq5.items.template.GenericItemSet import net.fabricmc.fabric.api.creativetab.v1.FabricCreativeModeTab import net.minecraft.core.Registry import net.minecraft.core.registries.BuiltInRegistries diff --git a/src/main/kotlin/dev/zxq5/items/sets/Dragonite.kt b/src/main/kotlin/dev/zxq5/items/sets/Dragonite.kt index 21082b0..bd109c2 100644 --- a/src/main/kotlin/dev/zxq5/items/sets/Dragonite.kt +++ b/src/main/kotlin/dev/zxq5/items/sets/Dragonite.kt @@ -1,11 +1,12 @@ package dev.zxq5.items.sets +import dev.zxq5.Fantasysmp import dev.zxq5.items.template.ArmorSet +import dev.zxq5.items.template.EquipmentLayer import dev.zxq5.items.template.GenericGearSet -import dev.zxq5.items.ModItems.register -import dev.zxq5.items.template.registerItem -import dev.zxq5.items.template.provideDelegate +import dev.zxq5.items.template.ModelSpec import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents +import net.minecraft.ChatFormatting import net.minecraft.core.component.DataComponents import net.minecraft.core.particles.ParticleTypes import net.minecraft.core.particles.PowerParticleOption @@ -16,7 +17,6 @@ import net.minecraft.util.Unit import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult import net.minecraft.world.damagesource.DamageSource -import net.minecraft.world.damagesource.DamageSources import net.minecraft.world.damagesource.DamageTypes import net.minecraft.world.entity.Entity import net.minecraft.world.entity.player.Player @@ -24,9 +24,8 @@ import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.ToolMaterial import net.minecraft.world.item.component.UseCooldown -import net.minecraft.world.item.equipment.* +import net.minecraft.world.item.equipment.ArmorType import net.minecraft.world.level.Level -import kotlin.getValue object Dragonite: GenericGearSet() { @@ -34,9 +33,24 @@ object Dragonite: GenericGearSet() { override val materialDefinition get() = super.materialDefinition.copy(assetId = materialKey) - val SCALE by registerItem("dragon_scale", ::Item) + override val equipmentAssetSpec = super.equipmentAssetSpec.copy( + layers = super.equipmentAssetSpec.layers + ("wings" to listOf( + EquipmentLayer( + "${Fantasysmp.MOD_ID}:dragonite", + usePlayerTexture = false + ) + )) + ) + + const val LORE = " forged from the essence of dragons" + override val lore_style = ChatFormatting.DARK_PURPLE + + val SCALE by registerItem("dragon_scale", ::Item) { + name("Dragon Scale") + } val INGOT by registerItem("dragonite_ingot", ::Item) { + name("Dragonite Ingot") shapedRecipe("SBS", "CXC", "SBS", key=mapOf( 'S' to Items.SHULKER_SHELL, 'X' to SCALE, @@ -46,42 +60,58 @@ object Dragonite: GenericGearSet() { } val SWORD by registerItem("dragonite_sword", ::DragoniteSword) { + name("Dragonite Sword") + lore("A sword$LORE") + model(ModelSpec.Handheld) properties { enchantable(armorMaterial.enchantmentValue) .component(DataComponents.USE_COOLDOWN, UseCooldown(2f)) .sword(ToolMaterial.NETHERITE, 3F, -2.4F) } smithingUpgrade(Items.END_CRYSTAL, Items.NETHERITE_SWORD, INGOT) + tags("swords") } val HELMET by registerItem("dragonite_helmet", ::Item) { + name("Dragonite Helmet") + lore("A helmet$LORE") properties { humanoidArmor(armorMaterial, ArmorType.HELMET) } smithingUpgrade(Items.DRAGON_HEAD, Items.NETHERITE_HELMET, INGOT) + tags("head_armor") } val CHESTPLATE by registerItem("dragonite_chestplate", ::Item) { + name("Dragonite Chestplate") + lore("A chestplate$LORE") properties { humanoidArmor(armorMaterial, ArmorType.CHESTPLATE) .component(DataComponents.GLIDER, Unit.INSTANCE) .component(DataComponents.UNBREAKABLE, Unit.INSTANCE) } smithingUpgrade(Items.ELYTRA, Items.NETHERITE_CHESTPLATE, INGOT) + tags("chest_armor") } val LEGGINGS by registerItem("dragonite_leggings", ::Item) { + name("Dragonite Leggings") + lore("Leggings$LORE") properties { humanoidArmor(armorMaterial, ArmorType.LEGGINGS) } smithingUpgrade(Items.CRYING_OBSIDIAN, Items.NETHERITE_LEGGINGS, INGOT) + tags("leg_armor") } val BOOTS by registerItem("dragonite_boots", ::Item) { + name("Dragonite Boots") + lore("Boots$LORE") properties { humanoidArmor(armorMaterial, ArmorType.BOOTS) } smithingUpgrade(Items.CRYING_OBSIDIAN, Items.NETHERITE_BOOTS, INGOT) + tags("foot_armor") } override val armorSet: ArmorSet = ArmorSet(HELMET, CHESTPLATE, LEGGINGS, BOOTS) diff --git a/src/main/kotlin/dev/zxq5/items/sets/Ender.kt b/src/main/kotlin/dev/zxq5/items/sets/Ender.kt index 9f25e91..f8a060b 100644 --- a/src/main/kotlin/dev/zxq5/items/sets/Ender.kt +++ b/src/main/kotlin/dev/zxq5/items/sets/Ender.kt @@ -3,9 +3,8 @@ package dev.zxq5.items.sets import dev.zxq5.items.template.ArmorSet import dev.zxq5.items.template.GearMaterialDef import dev.zxq5.items.template.GenericGearSet -import dev.zxq5.items.template.provideDelegate -import dev.zxq5.items.template.registerItem import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents +import net.minecraft.ChatFormatting import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponents import net.minecraft.core.particles.ParticleTypes @@ -32,7 +31,13 @@ object Ender: GenericGearSet() { override val materialDefinition get() = GearMaterialDef.DIAMOND.copy(assetId = materialKey) + const val LORE = "Crafted from the essence of endermen" + override val lore_style: ChatFormatting + get() = ChatFormatting.AQUA + val ENDER_INGOT by registerItem("ender_ingot", ::Item) { + name("Ender Ingot") + lore(LORE) shapedRecipe("EDE", "DED", "EDE", key=mapOf( 'E' to Items.ENDER_EYE, 'D' to Items.DIAMOND, @@ -40,40 +45,55 @@ object Ender: GenericGearSet() { } val SWORD by registerItem("ender_sword", ::EnderSword) { + name("Ender Sword") + lore(LORE) properties { enchantable(armorMaterial.enchantmentValue) .component(DataComponents.USE_COOLDOWN, UseCooldown(3f)) .sword(ToolMaterial.DIAMOND, 3F, -2.4F) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.DIAMOND_SWORD, ENDER_INGOT) + tags("swords") } val HELMET by registerItem("ender_helmet", ::Item) { + name("Ender Helmet") + lore(LORE) properties { humanoidArmor(armorMaterial, ArmorType.HELMET) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.DIAMOND_HELMET, ENDER_INGOT) + tags("head_armor") } val CHESTPLATE by registerItem("ender_chestplate", ::Item) { + name("Ender Chestplate") + lore(LORE) properties { humanoidArmor(armorMaterial, ArmorType.CHESTPLATE) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.DIAMOND_CHESTPLATE, ENDER_INGOT) + tags("chest_armor") } val LEGGINGS by registerItem("ender_leggings", ::Item) { + name("Ender Leggings") + lore(LORE) properties { humanoidArmor(armorMaterial, ArmorType.LEGGINGS) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.DIAMOND_LEGGINGS, ENDER_INGOT) + tags("leg_armor") } val BOOTS by registerItem("ender_boots", ::Item) { + name("Ender Boots") + lore(LORE) properties { humanoidArmor(armorMaterial, ArmorType.BOOTS) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.DIAMOND_BOOTS, ENDER_INGOT) + tags("foot_armor") } override val armorSet: ArmorSet = ArmorSet(HELMET, CHESTPLATE, LEGGINGS, BOOTS) diff --git a/src/main/kotlin/dev/zxq5/items/sets/Witherite.kt b/src/main/kotlin/dev/zxq5/items/sets/Witherite.kt index d013aff..468574c 100644 --- a/src/main/kotlin/dev/zxq5/items/sets/Witherite.kt +++ b/src/main/kotlin/dev/zxq5/items/sets/Witherite.kt @@ -2,9 +2,9 @@ package dev.zxq5.items.sets import dev.zxq5.items.template.ArmorSet import dev.zxq5.items.template.GenericGearSet -import dev.zxq5.items.template.registerItem -import dev.zxq5.items.template.provideDelegate +import dev.zxq5.items.template.ModelSpec import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents +import net.minecraft.ChatFormatting import net.minecraft.core.component.DataComponents import net.minecraft.sounds.SoundEvents import net.minecraft.world.InteractionHand @@ -31,7 +31,14 @@ object Witherite: GenericGearSet() { override val materialDefinition get() = super.materialDefinition.copy(assetId = materialKey) + const val LORE = " forged with the skulls of wither skeletons." + + override val lore_style + get() = ChatFormatting.BLACK + val SHIELD by registerItem("witherite_shield", ::Item) { + name("Witherite Shield") + lore("A shield$LORE") properties { component(DataComponents.BLOCKS_ATTACKS, BlocksAttacks( 0.25f, // 5 tick warmup @@ -54,49 +61,69 @@ object Witherite: GenericGearSet() { } val SWORD by registerItem("witherite_sword", ::WitheriteSword) { + name("Witherite Sword") + lore("A sword$LORE") + model(ModelSpec.Handheld) properties { enchantable(armorMaterial.enchantmentValue) .component(DataComponents.USE_COOLDOWN, UseCooldown(2f)) .sword(ToolMaterial.NETHERITE, 3F, -2.4F) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.NETHERITE_SWORD, Items.WITHER_SKELETON_SKULL) + tags("swords") } val AXE by registerItem("witherite_axe", ::WitheriteWeapon) { + name("Witherite Axe") + lore("An axe$LORE") + model(ModelSpec.Handheld) properties { enchantable(armorMaterial.enchantmentValue) .component(DataComponents.USE_COOLDOWN, UseCooldown(2f)) .axe(ToolMaterial.NETHERITE, 3F, -3F) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.NETHERITE_AXE, Items.WITHER_SKELETON_SKULL) + tags("axes") } val HELMET by registerItem("witherite_helmet", ::Item) { + name("Witherite Helmet") + lore("A helmet$LORE") properties { humanoidArmor(armorMaterial, ArmorType.HELMET) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.NETHERITE_HELMET, Items.WITHER_SKELETON_SKULL) + tags("head_armor") } val CHESTPLATE by registerItem("witherite_chestplate", ::Item) { + name("Witherite Chestplate") + lore("A chestplate$LORE") properties { humanoidArmor(armorMaterial, ArmorType.CHESTPLATE) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.NETHERITE_CHESTPLATE, Items.WITHER_SKELETON_SKULL) + tags("chest_armor") } val LEGGINGS by registerItem("witherite_leggings", ::Item) { + name("Witherite Leggings") + lore("Leggings$LORE") properties { humanoidArmor(armorMaterial, ArmorType.LEGGINGS) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.NETHERITE_LEGGINGS, Items.WITHER_SKELETON_SKULL) + tags("leg_armor") } val BOOTS by registerItem("witherite_boots", ::Item) { + name("Witherite Boots") + lore("Boots$LORE") properties { humanoidArmor(armorMaterial, ArmorType.BOOTS) } smithingUpgrade(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.NETHERITE_BOOTS, Items.WITHER_SKELETON_SKULL) + tags("foot_armor") } override val armorSet: ArmorSet = ArmorSet(HELMET, CHESTPLATE, LEGGINGS, BOOTS) diff --git a/src/main/kotlin/dev/zxq5/items/template/GenericGearSet.kt b/src/main/kotlin/dev/zxq5/items/template/GenericGearSet.kt index 067d2ac..683bee9 100644 --- a/src/main/kotlin/dev/zxq5/items/template/GenericGearSet.kt +++ b/src/main/kotlin/dev/zxq5/items/template/GenericGearSet.kt @@ -1,5 +1,6 @@ package dev.zxq5.items.template +import dev.zxq5.Fantasysmp import dev.zxq5.util.resourceKey import net.minecraft.core.Holder import net.minecraft.resources.ResourceKey @@ -19,6 +20,14 @@ abstract class GenericGearSet: GenericItemSet() { abstract val armorSet: ArmorSet + open val equipmentAssetSpec: EquipmentAssetSpec + get() = EquipmentAssetSpec( + layers = mapOf( + "humanoid" to listOf(EquipmentLayer("${Fantasysmp.MOD_ID}:$materialName")), + "humanoid_leggings" to listOf(EquipmentLayer("${Fantasysmp.MOD_ID}:$materialName")), + ) + ) + open val materialKey: ResourceKey get() = materialName.resourceKey() @@ -33,7 +42,7 @@ abstract class GenericGearSet: GenericItemSet() { materialDefinition.toArmorMaterial() } - fun fullSetEquippedBy(p: Player) = + open fun fullSetEquippedBy(p: Player) = p.getItemBySlot(EquipmentSlot.HEAD).item == armorSet.helmet && p.getItemBySlot(EquipmentSlot.CHEST).item == armorSet.chestplate && p.getItemBySlot(EquipmentSlot.LEGS).item == armorSet.leggings && diff --git a/src/main/kotlin/dev/zxq5/items/template/GenericItemSet.kt b/src/main/kotlin/dev/zxq5/items/template/GenericItemSet.kt index 5513eb8..96e5cd6 100644 --- a/src/main/kotlin/dev/zxq5/items/template/GenericItemSet.kt +++ b/src/main/kotlin/dev/zxq5/items/template/GenericItemSet.kt @@ -1,27 +1,29 @@ package dev.zxq5.items.template +import dev.zxq5.Fantasysmp import dev.zxq5.items.ModItems -import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagsProvider +import dev.zxq5.util.mcItemTag +import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider +import net.minecraft.ChatFormatting import net.minecraft.advancements.criterion.InventoryChangeTrigger import net.minecraft.advancements.criterion.ItemPredicate import net.minecraft.core.HolderGetter import net.minecraft.core.HolderLookup +import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries -import net.minecraft.data.recipes.RecipeCategory -import net.minecraft.data.recipes.RecipeOutput -import net.minecraft.data.recipes.RecipeProvider -import net.minecraft.data.recipes.ShapedRecipeBuilder -import net.minecraft.data.recipes.SmithingTransformRecipeBuilder +import net.minecraft.data.recipes.* +import net.minecraft.network.chat.Component import net.minecraft.tags.TagKey import net.minecraft.world.item.Item +import net.minecraft.world.item.component.ItemLore import net.minecraft.world.item.crafting.Ingredient -import kotlin.collections.component1 -import kotlin.collections.component2 import kotlin.reflect.KProperty + abstract class GenericItemSet { // list of all items part of the class + open val lore_style = ChatFormatting.GRAY abstract val items: List open fun onLoad() {} @@ -29,15 +31,28 @@ abstract class GenericItemSet { private val itemRecipes = mutableMapOf>() private val itemTags = mutableMapOf>>() private val itemModels = mutableMapOf() + private val itemTranslations = mutableMapOf() + val modelSpecs: Map get() = itemModels - internal fun registerDatagen(item: Item, recipes: List, tags: List>, model: ModelSpec) { + internal fun registerDatagen( + item: Item, + recipes: List, + tags: List>, + model: ModelSpec, + translations: Map + ) { itemRecipes[item] = recipes itemTags[item] = tags itemModels[item] = model + itemTranslations.putAll(translations) } - open fun generateItemTags(tags: ItemTagAdder) { - itemTags.forEach { (item, tagList) -> tagList.forEach { tags.add(it, item) } } + open fun generateItemTags(provider: HolderLookup.Provider): Map>> { + return itemTags + } + + open fun generateTranslations(builder: FabricLanguageProvider.TranslationBuilder) { + itemTranslations.forEach { (key, value) -> builder.add(key, value) } } open fun generateRecipes(registries: HolderLookup.Provider, exporter: RecipeOutput) { @@ -68,12 +83,20 @@ abstract class GenericItemSet { } } } - } + }; init { register(this) } + fun registerItem( + name: String, + itemFactory: (Item.Properties) -> T, + block: CustomItemBuilder.() -> Unit = {}, + ): CustomItemBuilder { + return CustomItemBuilder(this, name, itemFactory).apply(block) + } + companion object { private val _all = mutableListOf() @@ -84,6 +107,13 @@ abstract class GenericItemSet { } +data class EquipmentLayer(val texture: String, val usePlayerTexture: Boolean = true) + +data class EquipmentAssetSpec( + val layers: Map> // "humanoid", "humanoid_leggings", "wings", etc. +) + + class CustomItemBuilder( private val owner: GenericItemSet, val name: String, @@ -92,12 +122,35 @@ class CustomItemBuilder( private var properties = Item.Properties() private val recipes = mutableListOf() private val tags = mutableListOf>() - private var modelSpec: ModelSpec = ModelSpec.None + private val translations = mutableMapOf() + private var modelSpec: ModelSpec = ModelSpec.Generated fun model(spec: ModelSpec) { modelSpec = spec } + fun name(displayName: String) { + translations["item.${Fantasysmp.MOD_ID}.$name"] = displayName + } + + fun lore(vararg lines: String, style: ChatFormatting = owner.lore_style) { + val components = lines.mapIndexed { index, line -> + val key = "item.${Fantasysmp.MOD_ID}.$name.lore.line${index + 1}" + translations[key] = line + Component.translatable(key).withStyle(style) + } + properties = properties.component(DataComponents.LORE, ItemLore(components)) + } + + fun lore(vararg lines: Pair) { + val components = lines.mapIndexed { index, (line, style) -> + val key = "item.${Fantasysmp.MOD_ID}.$name.lore.line${index + 1}" + translations[key] = line + Component.translatable(key).withStyle(style) + } + properties = properties.component(DataComponents.LORE, ItemLore(components)) + } + fun properties(block: Item.Properties.() -> Item.Properties) { properties = properties.block() } @@ -110,21 +163,25 @@ class CustomItemBuilder( recipes += RecipeSpec.Shaped(pattern.toList(), key) } + fun tags(vararg tag: String) { + tag.forEach { + tags += mcItemTag(it) + } + } + fun tags(vararg tag: TagKey) { tags += tag } internal fun build(): T { val item = ModItems.register(name, itemFactory, properties) - owner.registerDatagen(item, recipes, tags, modelSpec) + owner.registerDatagen(item, recipes, tags, modelSpec, translations) return item } -} -class ItemTagAdder(private val provider: FabricTagsProvider.ItemTagsProvider) { - fun add(tag: TagKey, vararg items: Item) { - provider.apply { items.forEach { add(tag, it) } } - } + operator fun provideDelegate( + thisRef: Any?, property: KProperty<*> + ): Lazy = lazy { build() } } sealed interface RecipeSpec { @@ -138,14 +195,4 @@ sealed interface ModelSpec { data object None : ModelSpec // handwritten JSON already exists, skip auto-gen } -fun GenericItemSet.registerItem( - name: String, - itemFactory: (Item.Properties) -> T, - block: CustomItemBuilder.() -> Unit = {}, -): CustomItemBuilder = CustomItemBuilder(this, name, itemFactory).apply(block) - -operator fun CustomItemBuilder.provideDelegate( - thisRef: Any?, property: KProperty<*> -): Lazy = lazy { build() } - operator fun Lazy.getValue(thisRef: Any?, property: KProperty<*>): T = value \ No newline at end of file diff --git a/src/main/resources/assets/fantasysmp/equipment/crimson.json b/src/main/resources/assets/fantasysmp/equipment/crimson.json deleted file mode 100644 index d069a8e..0000000 --- a/src/main/resources/assets/fantasysmp/equipment/crimson.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "layers": { - "humanoid": [ - { - "texture": "fantasysmp:crimson" - } - ], - "humanoid_leggings": [ - { - "texture": "fantasysmp:crimson" - } - ] - } -} diff --git a/src/main/resources/assets/fantasysmp/equipment/dragonite.json b/src/main/resources/assets/fantasysmp/equipment/dragonite.json deleted file mode 100644 index 680bcaf..0000000 --- a/src/main/resources/assets/fantasysmp/equipment/dragonite.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "layers": { - "humanoid": [ - { - "texture": "fantasysmp:dragonite" - } - ], - "humanoid_leggings": [ - { - "texture": "fantasysmp:dragonite" - } - ], - "wings": [ - { - "texture": "fantasysmp:dragonite", - "use_player_texture": false - } - ] - } -} diff --git a/src/main/resources/assets/fantasysmp/equipment/ender.json b/src/main/resources/assets/fantasysmp/equipment/ender.json deleted file mode 100644 index 689d7d8..0000000 --- a/src/main/resources/assets/fantasysmp/equipment/ender.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "layers": { - "humanoid": [ - { - "texture": "fantasysmp:ender" - } - ], - "humanoid_leggings": [ - { - "texture": "fantasysmp:ender" - } - ] - } -} diff --git a/src/main/resources/assets/fantasysmp/equipment/mechanist.json b/src/main/resources/assets/fantasysmp/equipment/mechanist.json deleted file mode 100644 index 110375d..0000000 --- a/src/main/resources/assets/fantasysmp/equipment/mechanist.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "layers": { - "humanoid": [ - { - "texture": "fantasysmp:mechanist" - } - ], - "humanoid_leggings": [ - { - "texture": "fantasysmp:mechanist" - } - ] - } -} diff --git a/src/main/resources/assets/fantasysmp/equipment/poseidon.json b/src/main/resources/assets/fantasysmp/equipment/poseidon.json deleted file mode 100644 index 93617cb..0000000 --- a/src/main/resources/assets/fantasysmp/equipment/poseidon.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "layers": { - "humanoid": [ - { - "texture": "fantasysmp:poseidon" - } - ], - "humanoid_leggings": [ - { - "texture": "fantasysmp:poseidon" - } - ] - } -} diff --git a/src/main/resources/assets/fantasysmp/equipment/true_netherite.json b/src/main/resources/assets/fantasysmp/equipment/true_netherite.json deleted file mode 100644 index e98c330..0000000 --- a/src/main/resources/assets/fantasysmp/equipment/true_netherite.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "layers": { - "humanoid": [ - { - "texture": "fantasysmp:true_netherite" - } - ], - "humanoid_leggings": [ - { - "texture": "fantasysmp:true_netherite" - } - ] - } -} diff --git a/src/main/resources/assets/fantasysmp/equipment/witherite.json b/src/main/resources/assets/fantasysmp/equipment/witherite.json deleted file mode 100644 index 9ee21e6..0000000 --- a/src/main/resources/assets/fantasysmp/equipment/witherite.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "layers": { - "humanoid": [ - { - "texture": "fantasysmp:witherite" - } - ], - "humanoid_leggings": [ - { - "texture": "fantasysmp:witherite" - } - ] - } -} diff --git a/src/main/resources/assets/fantasysmp/icon.png b/src/main/resources/assets/fantasysmp/icon.png old mode 100644 new mode 100755 index bf6eb5d57a43205a38498f3539fb3b067bb3aeb4..045387ebfd51e7a4389a88e12a02a4fa6caf652b GIT binary patch literal 115551 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%0A-Iwq}J%2n&C=uAt3 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

iXB;rttTSg65!uEN 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 Y0|40Uke!8_v;Y7A07*qoM6N<$f>hFdC;$Ke literal 3636 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