From 488e7d63dd8fc4da311d9a807aa7ddf9b72b9186 Mon Sep 17 00:00:00 2001 From: Starexify Date: Sun, 1 Sep 2024 16:34:11 +0200 Subject: [PATCH] Commit 1 --- TEMPLATE_LICENSE.txt => LICENSE | 5 +- README.md | 27 ---- gradle.properties | 26 ++-- .../hexxit_gear/blockstates/hexbiscus.json | 7 + .../blockstates/potted_hexbiscus.json | 7 + .../assets/hexxit_gear/lang/en_us.json | 10 ++ .../hexxit_gear/models/block/hexbiscus.json | 7 + .../models/block/potted_hexbiscus.json | 7 + .../hexxit_gear/models/item/hexbiscus.json | 6 + .../models/item/hexical_diamond.json | 6 + .../models/item/hexical_essence.json | 6 + .../models/item/hexical_petal.json | 6 + .../hexxit_gear/models/item/scale_boots.json | 6 + .../models/item/scale_chestguard.json | 6 + .../hexxit_gear/models/item/scale_helmet.json | 6 + .../models/item/scale_leggings.json | 6 + .../recipes/misc/hexical_diamond.json | 32 +++++ .../misc/hexical_petal_from_hexbiscus.json | 32 +++++ .../loot_table/blocks/hexbiscus.json | 58 ++++++++ .../loot_table/blocks/potted_hexbiscus.json | 36 +++++ .../hexxit_gear/recipe/hexical_diamond.json | 21 +++ .../recipe/hexical_petal_from_hexbiscus.json | 14 ++ .../data/minecraft/tags/item/chest_armor.json | 5 + .../data/minecraft/tags/item/foot_armor.json | 5 + .../data/minecraft/tags/item/head_armor.json | 5 + .../data/minecraft/tags/item/leg_armor.json | 5 + .../java/com/example/examplemod/Config.java | 63 -------- .../com/example/examplemod/ExampleMod.java | 136 ------------------ .../net/nova/hexxit_gear/HexxitGearR.java | 33 +++++ .../client/model/ScaleHelmetModel.java | 53 +++++++ .../client/renderer/ISTERProvider.java | 32 +++++ .../data/BlockStateAndModelProvider.java | 57 ++++++++ .../nova/hexxit_gear/data/DataGenerators.java | 47 ++++++ .../hexxit_gear/data/HGItemModelProvider.java | 28 ++++ .../nova/hexxit_gear/data/LangProvider.java | 30 ++++ .../data/loot/BlockLootTables.java | 45 ++++++ .../data/loot/HGLootTableProvider.java | 40 ++++++ .../data/recipe/CraftingRecipes.java | 33 +++++ .../data/recipe/HGRecipeProvider.java | 48 +++++++ .../data/tags/HGBlockTagsProvider.java | 22 +++ .../data/tags/HGItemTagsProvider.java | 27 ++++ .../nova/hexxit_gear/event/ClientEvents.java | 26 ++++ .../nova/hexxit_gear/init/CreativeTab.java | 35 +++++ .../hexxit_gear/init/HGArmorMaterial.java | 32 +++++ .../net/nova/hexxit_gear/init/HGBlocks.java | 47 ++++++ .../net/nova/hexxit_gear/init/HGItems.java | 42 ++++++ .../hexxit_gear/textures/block/hexbiscus.png | Bin 0 -> 1086 bytes .../textures/item/hexical_diamond.png | Bin 0 -> 1180 bytes .../textures/item/hexical_essence.png | Bin 0 -> 1332 bytes .../textures/item/hexical_petal.png | Bin 0 -> 1484 bytes .../hexxit_gear/textures/item/sage_boots.png | Bin 0 -> 1440 bytes .../textures/item/sage_chestplate.png | Bin 0 -> 1421 bytes .../hexxit_gear/textures/item/sage_hood.png | Bin 0 -> 1373 bytes .../textures/item/sage_leggings.png | Bin 0 -> 1418 bytes .../hexxit_gear/textures/item/scale_boots.png | Bin 0 -> 1435 bytes .../textures/item/scale_chestguard.png | Bin 0 -> 1458 bytes .../textures/item/scale_helmet.png | Bin 0 -> 1373 bytes .../textures/item/scale_leggings.png | Bin 0 -> 1488 bytes .../hexxit_gear/textures/item/scale_sword.png | Bin 0 -> 692 bytes .../hexxit_gear/textures/item/thief_boots.png | Bin 0 -> 1346 bytes .../textures/item/thief_chestplate.png | Bin 0 -> 1350 bytes .../hexxit_gear/textures/item/thief_hood.png | Bin 0 -> 1157 bytes .../textures/item/thief_leggings.png | Bin 0 -> 1333 bytes .../textures/item/tribal_boots.png | Bin 0 -> 1290 bytes .../textures/item/tribal_chestplate.png | Bin 0 -> 1225 bytes .../textures/item/tribal_leggings.png | Bin 0 -> 1193 bytes .../textures/item/tribal_skull.png | Bin 0 -> 1219 bytes .../textures/models/armor/sage_hood.png | Bin 0 -> 2130 bytes .../textures/models/armor/sage_layer_1.png | Bin 0 -> 2219 bytes .../textures/models/armor/sage_layer_2.png | Bin 0 -> 2316 bytes .../textures/models/armor/scale_helmet.png | Bin 0 -> 2253 bytes .../textures/models/armor/scale_layer_1.png | Bin 0 -> 5806 bytes .../textures/models/armor/scale_layer_2.png | Bin 0 -> 3614 bytes .../textures/models/armor/thief_hood.png | Bin 0 -> 2068 bytes .../textures/models/armor/thief_layer_1.png | Bin 0 -> 4377 bytes .../textures/models/armor/thief_layer_2.png | Bin 0 -> 3956 bytes .../textures/models/armor/tribal_layer_1.png | Bin 0 -> 2169 bytes .../textures/models/armor/tribal_layer_2.png | Bin 0 -> 1464 bytes .../textures/models/armor/tribal_skull.png | Bin 0 -> 3255 bytes 79 files changed, 985 insertions(+), 248 deletions(-) rename TEMPLATE_LICENSE.txt => LICENSE (89%) create mode 100644 src/generated/resources/assets/hexxit_gear/blockstates/hexbiscus.json create mode 100644 src/generated/resources/assets/hexxit_gear/blockstates/potted_hexbiscus.json create mode 100644 src/generated/resources/assets/hexxit_gear/lang/en_us.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/block/hexbiscus.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/block/potted_hexbiscus.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/hexbiscus.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/hexical_diamond.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/hexical_essence.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/hexical_petal.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/scale_boots.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/scale_chestguard.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/scale_helmet.json create mode 100644 src/generated/resources/assets/hexxit_gear/models/item/scale_leggings.json create mode 100644 src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_diamond.json create mode 100644 src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_petal_from_hexbiscus.json create mode 100644 src/generated/resources/data/hexxit_gear/loot_table/blocks/hexbiscus.json create mode 100644 src/generated/resources/data/hexxit_gear/loot_table/blocks/potted_hexbiscus.json create mode 100644 src/generated/resources/data/hexxit_gear/recipe/hexical_diamond.json create mode 100644 src/generated/resources/data/hexxit_gear/recipe/hexical_petal_from_hexbiscus.json create mode 100644 src/generated/resources/data/minecraft/tags/item/chest_armor.json create mode 100644 src/generated/resources/data/minecraft/tags/item/foot_armor.json create mode 100644 src/generated/resources/data/minecraft/tags/item/head_armor.json create mode 100644 src/generated/resources/data/minecraft/tags/item/leg_armor.json delete mode 100644 src/main/java/com/example/examplemod/Config.java delete mode 100644 src/main/java/com/example/examplemod/ExampleMod.java create mode 100644 src/main/java/net/nova/hexxit_gear/HexxitGearR.java create mode 100644 src/main/java/net/nova/hexxit_gear/client/model/ScaleHelmetModel.java create mode 100644 src/main/java/net/nova/hexxit_gear/client/renderer/ISTERProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/BlockStateAndModelProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/DataGenerators.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/HGItemModelProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/LangProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/loot/BlockLootTables.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/loot/HGLootTableProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/recipe/CraftingRecipes.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/recipe/HGRecipeProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/tags/HGBlockTagsProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/data/tags/HGItemTagsProvider.java create mode 100644 src/main/java/net/nova/hexxit_gear/event/ClientEvents.java create mode 100644 src/main/java/net/nova/hexxit_gear/init/CreativeTab.java create mode 100644 src/main/java/net/nova/hexxit_gear/init/HGArmorMaterial.java create mode 100644 src/main/java/net/nova/hexxit_gear/init/HGBlocks.java create mode 100644 src/main/java/net/nova/hexxit_gear/init/HGItems.java create mode 100644 src/main/resources/assets/hexxit_gear/textures/block/hexbiscus.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/hexical_diamond.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/hexical_essence.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/hexical_petal.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/sage_boots.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/sage_chestplate.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/sage_hood.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/sage_leggings.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/scale_boots.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/scale_chestguard.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/scale_helmet.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/scale_leggings.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/scale_sword.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/thief_boots.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/thief_chestplate.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/thief_hood.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/thief_leggings.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/tribal_boots.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/tribal_chestplate.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/tribal_leggings.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/item/tribal_skull.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/sage_hood.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/sage_layer_1.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/sage_layer_2.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/scale_helmet.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/scale_layer_1.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/scale_layer_2.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/thief_hood.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/thief_layer_1.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/thief_layer_2.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/tribal_layer_1.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/tribal_layer_2.png create mode 100644 src/main/resources/assets/hexxit_gear/textures/models/armor/tribal_skull.png diff --git a/TEMPLATE_LICENSE.txt b/LICENSE similarity index 89% rename from TEMPLATE_LICENSE.txt rename to LICENSE index b64bc64..632bb28 100644 --- a/TEMPLATE_LICENSE.txt +++ b/LICENSE @@ -1,9 +1,6 @@ MIT License -Copyright (c) 2023 NeoForged project - -This license applies to the template files as supplied by github.com/NeoForged/MDK - +Copyright (c) 2024 ImVeryBad Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 03927f8..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,27 +0,0 @@ - -Installation information -======= - -This template repository can be directly cloned to get you started with a new -mod. Simply create a new repository cloned from this one, by following the -instructions at [github](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template). - -Once you have your clone, simply open the repository in the IDE of your choice. The usual recommendation for an IDE is either IntelliJ IDEA or Eclipse. - -> **Note**: For Eclipse, use tasks in `Launch Group` instead of ones founds in `Java Application`. A preparation task must run before launching the game. NeoGradle uses launch groups to do these subsequently. - -If at any point you are missing libraries in your IDE, or you've run into problems you can -run `gradlew --refresh-dependencies` to refresh the local cache. `gradlew clean` to reset everything -{this does not affect your code} and then start the process again. - -Mapping Names: -============ -By default, the MDK is configured to use the official mapping names from Mojang for methods and fields -in the Minecraft codebase. These names are covered by a specific license. All modders should be aware of this -license. For the latest license text, refer to the mapping file itself, or the reference copy here: -https://github.com/NeoForged/NeoForm/blob/main/Mojang.md - -Additional Resources: -========== -Community Documentation: https://docs.neoforged.net/ -NeoForged Discord: https://discord.neoforged.net/ diff --git a/gradle.properties b/gradle.properties index f1c14a0..1b54784 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,13 +10,13 @@ neogradle.subsystems.parchment.mappingsVersion=2024.07.28 # Environment Properties # You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge # The Minecraft version must agree with the Neo version to get a valid artifact -minecraft_version=1.21 +minecraft_version=1.21.1 # The Minecraft version range can use any release version of Minecraft as bounds. # Snapshots, pre-releases, and release candidates are not guaranteed to sort properly # as they do not follow standard versioning conventions. minecraft_version_range=[1.21,1.21.1) # The Neo version must agree with the Minecraft version to get a valid artifact -neo_version=21.0.167 +neo_version=21.1.34 # The Neo version range can use any version of Neo as bounds neo_version_range=[21.0.0-beta,) # The loader version range can only use the major version of FML as bounds @@ -24,20 +24,10 @@ loader_version_range=[4,) ## Mod Properties -# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63} -# Must match the String constant located in the main mod class annotated with @Mod. -mod_id=examplemod -# The human-readable display name for the mod. -mod_name=Example Mod -# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. -mod_license=All Rights Reserved -# The mod version. See https://semver.org/ +mod_id=hexxit_gear +mod_name=Hexxit Gear R +mod_license=MIT mod_version=1.0.0 -# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. -# This should match the base package used for the mod sources. -# See https://maven.apache.org/guides/mini/guide-naming-conventions.html -mod_group_id=com.example.examplemod -# The authors of the mod. This is a simple text string that is used for display purposes in the mod list. -mod_authors=YourNameHere, OtherNameHere -# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list. -mod_description=Example mod description.\nNewline characters can be used and will be replaced properly. +mod_group_id=net.nova.hexxit_gear +mod_authors=ImVeryBad +mod_description= \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/blockstates/hexbiscus.json b/src/generated/resources/assets/hexxit_gear/blockstates/hexbiscus.json new file mode 100644 index 0000000..bbe6860 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/blockstates/hexbiscus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexxit_gear:block/hexbiscus" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/blockstates/potted_hexbiscus.json b/src/generated/resources/assets/hexxit_gear/blockstates/potted_hexbiscus.json new file mode 100644 index 0000000..bd565b7 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/blockstates/potted_hexbiscus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexxit_gear:block/potted_hexbiscus" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/lang/en_us.json b/src/generated/resources/assets/hexxit_gear/lang/en_us.json new file mode 100644 index 0000000..1e83d3f --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/lang/en_us.json @@ -0,0 +1,10 @@ +{ + "hexxit_gear.creativetab": "Hexxit Gear R", + "item.hexxit_gear.hexical_diamond": "Hexical Diamond", + "item.hexxit_gear.hexical_essence": "Hexical Essence", + "item.hexxit_gear.hexical_petal": "Hexical Petal", + "item.hexxit_gear.scale_boots": "Scale Boots", + "item.hexxit_gear.scale_chestguard": "Scale Chestguard", + "item.hexxit_gear.scale_helmet": "Scale Helmet", + "item.hexxit_gear.scale_leggings": "Scale Leggings" +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/block/hexbiscus.json b/src/generated/resources/assets/hexxit_gear/models/block/hexbiscus.json new file mode 100644 index 0000000..edb528a --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/block/hexbiscus.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/tinted_cross", + "render_type": "minecraft:cutout", + "textures": { + "cross": "hexxit_gear:block/hexbiscus" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/block/potted_hexbiscus.json b/src/generated/resources/assets/hexxit_gear/models/block/potted_hexbiscus.json new file mode 100644 index 0000000..8264171 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/block/potted_hexbiscus.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "render_type": "minecraft:cutout", + "textures": { + "plant": "hexxit_gear:block/hexbiscus" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/hexbiscus.json b/src/generated/resources/assets/hexxit_gear/models/item/hexbiscus.json new file mode 100644 index 0000000..fe8acf3 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/hexbiscus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:block/hexbiscus" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/hexical_diamond.json b/src/generated/resources/assets/hexxit_gear/models/item/hexical_diamond.json new file mode 100644 index 0000000..f79ec60 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/hexical_diamond.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:item/hexical_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/hexical_essence.json b/src/generated/resources/assets/hexxit_gear/models/item/hexical_essence.json new file mode 100644 index 0000000..ed58651 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/hexical_essence.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:item/hexical_essence" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/hexical_petal.json b/src/generated/resources/assets/hexxit_gear/models/item/hexical_petal.json new file mode 100644 index 0000000..51358f7 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/hexical_petal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:item/hexical_petal" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/scale_boots.json b/src/generated/resources/assets/hexxit_gear/models/item/scale_boots.json new file mode 100644 index 0000000..45b2c1a --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/scale_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:item/scale_boots" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/scale_chestguard.json b/src/generated/resources/assets/hexxit_gear/models/item/scale_chestguard.json new file mode 100644 index 0000000..3a0b43c --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/scale_chestguard.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:item/scale_chestguard" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/scale_helmet.json b/src/generated/resources/assets/hexxit_gear/models/item/scale_helmet.json new file mode 100644 index 0000000..b789a87 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/scale_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:item/scale_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/hexxit_gear/models/item/scale_leggings.json b/src/generated/resources/assets/hexxit_gear/models/item/scale_leggings.json new file mode 100644 index 0000000..0818e20 --- /dev/null +++ b/src/generated/resources/assets/hexxit_gear/models/item/scale_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexxit_gear:item/scale_leggings" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_diamond.json b/src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_diamond.json new file mode 100644 index 0000000..0daae06 --- /dev/null +++ b/src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_diamond.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_hexical_petal": { + "conditions": { + "items": [ + { + "items": "hexxit_gear:hexical_petal" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexxit_gear:hexical_diamond" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_hexical_petal" + ] + ], + "rewards": { + "recipes": [ + "hexxit_gear:hexical_diamond" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_petal_from_hexbiscus.json b/src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_petal_from_hexbiscus.json new file mode 100644 index 0000000..4ec012f --- /dev/null +++ b/src/generated/resources/data/hexxit_gear/advancement/recipes/misc/hexical_petal_from_hexbiscus.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_hexbiscus": { + "conditions": { + "items": [ + { + "items": "hexxit_gear:hexbiscus" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexxit_gear:hexical_petal_from_hexbiscus" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_hexbiscus" + ] + ], + "rewards": { + "recipes": [ + "hexxit_gear:hexical_petal_from_hexbiscus" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/hexxit_gear/loot_table/blocks/hexbiscus.json b/src/generated/resources/data/hexxit_gear/loot_table/blocks/hexbiscus.json new file mode 100644 index 0000000..3ffd06f --- /dev/null +++ b/src/generated/resources/data/hexxit_gear/loot_table/blocks/hexbiscus.json @@ -0,0 +1,58 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "name": "hexxit_gear:hexbiscus" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "hexxit_gear:hexical_petal" + } + ] + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexxit_gear:blocks/hexbiscus" +} \ No newline at end of file diff --git a/src/generated/resources/data/hexxit_gear/loot_table/blocks/potted_hexbiscus.json b/src/generated/resources/data/hexxit_gear/loot_table/blocks/potted_hexbiscus.json new file mode 100644 index 0000000..0423928 --- /dev/null +++ b/src/generated/resources/data/hexxit_gear/loot_table/blocks/potted_hexbiscus.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:flower_pot" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexxit_gear:hexbiscus" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexxit_gear:blocks/potted_hexbiscus" +} \ No newline at end of file diff --git a/src/generated/resources/data/hexxit_gear/recipe/hexical_diamond.json b/src/generated/resources/data/hexxit_gear/recipe/hexical_diamond.json new file mode 100644 index 0000000..f28366d --- /dev/null +++ b/src/generated/resources/data/hexxit_gear/recipe/hexical_diamond.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "minecraft:diamond" + }, + "P": { + "item": "hexxit_gear:hexical_petal" + } + }, + "pattern": [ + " P ", + "P#P", + " P " + ], + "result": { + "count": 1, + "id": "hexxit_gear:hexical_diamond" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/hexxit_gear/recipe/hexical_petal_from_hexbiscus.json b/src/generated/resources/data/hexxit_gear/recipe/hexical_petal_from_hexbiscus.json new file mode 100644 index 0000000..0db6fe9 --- /dev/null +++ b/src/generated/resources/data/hexxit_gear/recipe/hexical_petal_from_hexbiscus.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "hexical_petal", + "ingredients": [ + { + "item": "hexxit_gear:hexbiscus" + } + ], + "result": { + "count": 1, + "id": "hexxit_gear:hexical_petal" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/chest_armor.json b/src/generated/resources/data/minecraft/tags/item/chest_armor.json new file mode 100644 index 0000000..5a9c6db --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/chest_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexxit_gear:scale_chestguard" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/foot_armor.json b/src/generated/resources/data/minecraft/tags/item/foot_armor.json new file mode 100644 index 0000000..5dc9087 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/foot_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexxit_gear:scale_boots" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/head_armor.json b/src/generated/resources/data/minecraft/tags/item/head_armor.json new file mode 100644 index 0000000..fd8e0cf --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/head_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexxit_gear:scale_helmet" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/leg_armor.json b/src/generated/resources/data/minecraft/tags/item/leg_armor.json new file mode 100644 index 0000000..5fc0284 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/leg_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexxit_gear:scale_leggings" + ] +} \ No newline at end of file diff --git a/src/main/java/com/example/examplemod/Config.java b/src/main/java/com/example/examplemod/Config.java deleted file mode 100644 index d70d1eb..0000000 --- a/src/main/java/com/example/examplemod/Config.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.example.examplemod; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Item; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.fml.event.config.ModConfigEvent; -import net.neoforged.neoforge.common.ModConfigSpec; - -// An example config class. This is not required, but it's a good idea to have one to keep your config organized. -// Demonstrates how to use Neo's config APIs -@EventBusSubscriber(modid = ExampleMod.MODID, bus = EventBusSubscriber.Bus.MOD) -public class Config -{ - private static final ModConfigSpec.Builder BUILDER = new ModConfigSpec.Builder(); - - private static final ModConfigSpec.BooleanValue LOG_DIRT_BLOCK = BUILDER - .comment("Whether to log the dirt block on common setup") - .define("logDirtBlock", true); - - private static final ModConfigSpec.IntValue MAGIC_NUMBER = BUILDER - .comment("A magic number") - .defineInRange("magicNumber", 42, 0, Integer.MAX_VALUE); - - public static final ModConfigSpec.ConfigValue MAGIC_NUMBER_INTRODUCTION = BUILDER - .comment("What you want the introduction message to be for the magic number") - .define("magicNumberIntroduction", "The magic number is... "); - - // a list of strings that are treated as resource locations for items - private static final ModConfigSpec.ConfigValue> ITEM_STRINGS = BUILDER - .comment("A list of items to log on common setup.") - .defineListAllowEmpty("items", List.of("minecraft:iron_ingot"), Config::validateItemName); - - static final ModConfigSpec SPEC = BUILDER.build(); - - public static boolean logDirtBlock; - public static int magicNumber; - public static String magicNumberIntroduction; - public static Set items; - - private static boolean validateItemName(final Object obj) - { - return obj instanceof String itemName && BuiltInRegistries.ITEM.containsKey(ResourceLocation.parse(itemName)); - } - - @SubscribeEvent - static void onLoad(final ModConfigEvent event) - { - logDirtBlock = LOG_DIRT_BLOCK.get(); - magicNumber = MAGIC_NUMBER.get(); - magicNumberIntroduction = MAGIC_NUMBER_INTRODUCTION.get(); - - // convert the list of strings into a set of items - items = ITEM_STRINGS.get().stream() - .map(itemName -> BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemName))) - .collect(Collectors.toSet()); - } -} diff --git a/src/main/java/com/example/examplemod/ExampleMod.java b/src/main/java/com/example/examplemod/ExampleMod.java deleted file mode 100644 index 835a48d..0000000 --- a/src/main/java/com/example/examplemod/ExampleMod.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.example.examplemod; - -import org.slf4j.Logger; - -import com.mojang.logging.LogUtils; - -import net.minecraft.client.Minecraft; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; -import net.minecraft.network.chat.Component; -import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.CreativeModeTabs; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.material.MapColor; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.ModContainer; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; -import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; -import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; -import net.neoforged.neoforge.event.server.ServerStartingEvent; -import net.neoforged.neoforge.registries.DeferredBlock; -import net.neoforged.neoforge.registries.DeferredHolder; -import net.neoforged.neoforge.registries.DeferredItem; -import net.neoforged.neoforge.registries.DeferredRegister; - -// The value here should match an entry in the META-INF/neoforge.mods.toml file -@Mod(ExampleMod.MODID) -public class ExampleMod -{ - // Define mod id in a common place for everything to reference - public static final String MODID = "examplemod"; - // Directly reference a slf4j logger - private static final Logger LOGGER = LogUtils.getLogger(); - // Create a Deferred Register to hold Blocks which will all be registered under the "examplemod" namespace - public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(MODID); - // Create a Deferred Register to hold Items which will all be registered under the "examplemod" namespace - public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID); - // Create a Deferred Register to hold CreativeModeTabs which will all be registered under the "examplemod" namespace - public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); - - // Creates a new Block with the id "examplemod:example_block", combining the namespace and path - public static final DeferredBlock EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", BlockBehaviour.Properties.of().mapColor(MapColor.STONE)); - // Creates a new BlockItem with the id "examplemod:example_block", combining the namespace and path - public static final DeferredItem EXAMPLE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem("example_block", EXAMPLE_BLOCK); - - // Creates a new food item with the id "examplemod:example_id", nutrition 1 and saturation 2 - public static final DeferredItem EXAMPLE_ITEM = ITEMS.registerSimpleItem("example_item", new Item.Properties().food(new FoodProperties.Builder() - .alwaysEdible().nutrition(1).saturationModifier(2f).build())); - - // Creates a creative tab with the id "examplemod:example_tab" for the example item, that is placed after the combat tab - public static final DeferredHolder EXAMPLE_TAB = CREATIVE_MODE_TABS.register("example_tab", () -> CreativeModeTab.builder() - .title(Component.translatable("itemGroup.examplemod")) //The language key for the title of your CreativeModeTab - .withTabsBefore(CreativeModeTabs.COMBAT) - .icon(() -> EXAMPLE_ITEM.get().getDefaultInstance()) - .displayItems((parameters, output) -> { - output.accept(EXAMPLE_ITEM.get()); // Add the example item to the tab. For your own tabs, this method is preferred over the event - }).build()); - - // The constructor for the mod class is the first code that is run when your mod is loaded. - // FML will recognize some parameter types like IEventBus or ModContainer and pass them in automatically. - public ExampleMod(IEventBus modEventBus, ModContainer modContainer) - { - // Register the commonSetup method for modloading - modEventBus.addListener(this::commonSetup); - - // Register the Deferred Register to the mod event bus so blocks get registered - BLOCKS.register(modEventBus); - // Register the Deferred Register to the mod event bus so items get registered - ITEMS.register(modEventBus); - // Register the Deferred Register to the mod event bus so tabs get registered - CREATIVE_MODE_TABS.register(modEventBus); - - // Register ourselves for server and other game events we are interested in. - // Note that this is necessary if and only if we want *this* class (ExampleMod) to respond directly to events. - // Do not add this line if there are no @SubscribeEvent-annotated functions in this class, like onServerStarting() below. - NeoForge.EVENT_BUS.register(this); - - // Register the item to a creative tab - modEventBus.addListener(this::addCreative); - - // Register our mod's ModConfigSpec so that FML can create and load the config file for us - modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC); - } - - private void commonSetup(final FMLCommonSetupEvent event) - { - // Some common setup code - LOGGER.info("HELLO FROM COMMON SETUP"); - - if (Config.logDirtBlock) - LOGGER.info("DIRT BLOCK >> {}", BuiltInRegistries.BLOCK.getKey(Blocks.DIRT)); - - LOGGER.info(Config.magicNumberIntroduction + Config.magicNumber); - - Config.items.forEach((item) -> LOGGER.info("ITEM >> {}", item.toString())); - } - - // Add the example block item to the building blocks tab - private void addCreative(BuildCreativeModeTabContentsEvent event) - { - if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) - event.accept(EXAMPLE_BLOCK_ITEM); - } - - // You can use SubscribeEvent and let the Event Bus discover methods to call - @SubscribeEvent - public void onServerStarting(ServerStartingEvent event) - { - // Do something when the server starts - LOGGER.info("HELLO from server starting"); - } - - // You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent - @EventBusSubscriber(modid = MODID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) - public static class ClientModEvents - { - @SubscribeEvent - public static void onClientSetup(FMLClientSetupEvent event) - { - // Some client setup code - LOGGER.info("HELLO FROM CLIENT SETUP"); - LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName()); - } - } -} diff --git a/src/main/java/net/nova/hexxit_gear/HexxitGearR.java b/src/main/java/net/nova/hexxit_gear/HexxitGearR.java new file mode 100644 index 0000000..a28ce79 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/HexxitGearR.java @@ -0,0 +1,33 @@ +package net.nova.hexxit_gear; + +import net.minecraft.resources.ResourceLocation; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.common.Mod; +import net.nova.hexxit_gear.data.DataGenerators; +import net.nova.hexxit_gear.init.CreativeTab; +import net.nova.hexxit_gear.init.HGArmorMaterial; +import net.nova.hexxit_gear.init.HGBlocks; +import net.nova.hexxit_gear.init.HGItems; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +@Mod(MODID) +public class HexxitGearR { + public static final String MODID = "hexxit_gear"; + public static final Logger logger = LoggerFactory.getLogger(HexxitGearR.class); + + public HexxitGearR(IEventBus bus) { + HGArmorMaterial.ARMOR_MATERIALS.register(bus); + CreativeTab.CREATIVE_TAB.register(bus); + HGItems.ITEMS.register(bus); + HGBlocks.BLOCKS.register(bus); + + bus.addListener(DataGenerators::gatherData); + } + + public static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(MODID, path); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/client/model/ScaleHelmetModel.java b/src/main/java/net/nova/hexxit_gear/client/model/ScaleHelmetModel.java new file mode 100644 index 0000000..c1b8c12 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/client/model/ScaleHelmetModel.java @@ -0,0 +1,53 @@ +package net.nova.hexxit_gear.client.model; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.nova.hexxit_gear.HexxitGearR; + +public class ScaleHelmetModel extends EntityModel { + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(HexxitGearR.rl("scale_helmet"), "main"); + public static final ResourceLocation TEXTURE = HexxitGearR.rl("textures/models/armor/scale_helmet.png"); + public final ModelPart root; + + public ScaleHelmetModel(ModelPart root) { + this.root = root.getChild("root"); + } + + public static LayerDefinition createLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create().texOffs(0, 0).addBox(-5.0F, -9.0F, -5.0F, 10.0F, 9.0F, 10.0F, new CubeDeformation(0.0F)) + .texOffs(0, 19).addBox(-4.0F, -8.0F, -4.75F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(41, 0).addBox(-6.0F, -7.0F, -2.0F, 1.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(50, 2).addBox(-7.0F, -8.0F, 0.0F, 1.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(57, 4).addBox(-8.0F, -8.0F, 1.0F, 1.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(42, 9).addBox(-9.0F, -8.0F, 2.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(42, 9).addBox(-9.0F, -6.0F, 2.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(41, 0).addBox(5.0F, -7.0F, -2.0F, 1.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(50, 2).addBox(6.0F, -8.0F, 0.0F, 1.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(57, 4).addBox(7.0F, -8.0F, 1.0F, 1.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(42, 9).addBox(7.0F, -8.0F, 2.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(42, 9).addBox(7.0F, -6.0F, 2.0F, 2.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + + return LayerDefinition.create(meshdefinition, 64, 35); + } + + @Override + public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { + this.root.yRot = pNetHeadYaw / (180F / (float) Math.PI); + this.root.xRot = pHeadPitch / (180F / (float) Math.PI); + } + + @Override + public void renderToBuffer(PoseStack pPoseStack, VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, int pColor) { + root.render(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pColor); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/client/renderer/ISTERProvider.java b/src/main/java/net/nova/hexxit_gear/client/renderer/ISTERProvider.java new file mode 100644 index 0000000..b89e5ab --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/client/renderer/ISTERProvider.java @@ -0,0 +1,32 @@ +package net.nova.hexxit_gear.client.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; +import net.nova.hexxit_gear.client.model.ScaleHelmetModel; + +import java.util.Collections; +import java.util.Map; + +public class ISTERProvider { + public static IClientItemExtensions scaleHelmet() { + return new IClientItemExtensions() { + @Override + public HumanoidModel getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel original) { + HumanoidModel armorModel = new HumanoidModel(new ModelPart(Collections.emptyList(), + Map.of("head", new ScaleHelmetModel(Minecraft.getInstance().getEntityModels().bakeLayer(ScaleHelmetModel.LAYER_LOCATION)).root, "hat", new ModelPart(Collections.emptyList(), Collections.emptyMap()), "body", + new ModelPart(Collections.emptyList(), Collections.emptyMap()), "right_arm", new ModelPart(Collections.emptyList(), Collections.emptyMap()), "left_arm", new ModelPart(Collections.emptyList(), Collections.emptyMap()), + "right_leg", new ModelPart(Collections.emptyList(), Collections.emptyMap()), "left_leg", new ModelPart(Collections.emptyList(), Collections.emptyMap())))); + armorModel.crouching = livingEntity.isShiftKeyDown(); + armorModel.riding = original.riding; + armorModel.young = livingEntity.isBaby(); + return armorModel; + } + }; + } +} + diff --git a/src/main/java/net/nova/hexxit_gear/data/BlockStateAndModelProvider.java b/src/main/java/net/nova/hexxit_gear/data/BlockStateAndModelProvider.java new file mode 100644 index 0000000..7e49c00 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/BlockStateAndModelProvider.java @@ -0,0 +1,57 @@ +package net.nova.hexxit_gear.data; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.models.BlockModelGenerators; +import net.minecraft.data.models.blockstates.BlockStateGenerator; +import net.minecraft.data.models.model.ModelTemplate; +import net.minecraft.data.models.model.ModelTemplates; +import net.minecraft.data.models.model.TextureMapping; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.neoforged.neoforge.client.model.generators.BlockStateProvider; +import net.neoforged.neoforge.client.model.generators.ModelFile; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.nova.hexxit_gear.init.HGBlocks; + +import java.util.function.Consumer; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class BlockStateAndModelProvider extends BlockStateProvider { + public BlockStateAndModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) { + super(output, MODID, existingFileHelper); + } + + @Override + protected void registerStatesAndModels() { + createPlant(HGBlocks.HEXBISCUS.get(), HGBlocks.POTTED_HEXBISCUS.get()); + } + + // Methods + private void createPlant(Block plantBlock, Block pottedPlantBlock) { + ResourceLocation texture = blockTexture(plantBlock); + ModelFile pot = models().withExistingParent(name(pottedPlantBlock), "block/flower_pot_cross") + .texture("plant", texture) + .renderType("minecraft:cutout"); + ModelFile cross = models().withExistingParent(name(plantBlock), "block/tinted_cross") + .texture("cross", texture) + .renderType("minecraft:cutout"); + + simpleBlock(plantBlock, cross); + simpleBlock(pottedPlantBlock, pot); + + itemModels().withExistingParent(name(plantBlock), "item/generated") + .texture("layer0", "block/" + name(plantBlock)); + } + + // Other stuff + private ResourceLocation key(Block block) { + return BuiltInRegistries.BLOCK.getKey(block); + } + + private String name(Block block) { + return key(block).getPath(); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/DataGenerators.java b/src/main/java/net/nova/hexxit_gear/data/DataGenerators.java new file mode 100644 index 0000000..81e16cb --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/DataGenerators.java @@ -0,0 +1,47 @@ +package net.nova.hexxit_gear.data; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; +import net.nova.hexxit_gear.HexxitGearR; +import net.nova.hexxit_gear.data.loot.HGLootTableProvider; +import net.nova.hexxit_gear.data.recipe.HGRecipeProvider; +import net.nova.hexxit_gear.data.tags.HGBlockTagsProvider; +import net.nova.hexxit_gear.data.tags.HGItemTagsProvider; + +import java.util.concurrent.CompletableFuture; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +@EventBusSubscriber(modid = MODID, bus = EventBusSubscriber.Bus.MOD) +public class DataGenerators { + @SubscribeEvent + public static void gatherData(GatherDataEvent event) { + try { + DataGenerator generator = event.getGenerator(); + PackOutput output = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + CompletableFuture lookupProvider = event.getLookupProvider(); + + generator.addProvider(true, new LangProvider(output)); + + generator.addProvider(true, new BlockStateAndModelProvider(output, existingFileHelper)); + generator.addProvider(true, new HGItemModelProvider(output, existingFileHelper)); + + HGBlockTagsProvider modBlockTagsProvider = new HGBlockTagsProvider(output, lookupProvider, existingFileHelper); + generator.addProvider(true, modBlockTagsProvider); + generator.addProvider(true, new HGItemTagsProvider(output, lookupProvider, modBlockTagsProvider, existingFileHelper)); + + generator.addProvider(true, new HGLootTableProvider(output, lookupProvider)); + + generator.addProvider(true, new HGRecipeProvider(output, lookupProvider)); + + } catch (RuntimeException e) { + HexxitGearR.logger.error("Cosmicore failed to gather data", e); + } + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/HGItemModelProvider.java b/src/main/java/net/nova/hexxit_gear/data/HGItemModelProvider.java new file mode 100644 index 0000000..49706f9 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/HGItemModelProvider.java @@ -0,0 +1,28 @@ +package net.nova.hexxit_gear.data; + +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.client.model.generators.ItemModelProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.nova.hexxit_gear.init.HGItems; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGItemModelProvider extends ItemModelProvider { + public HGItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) { + super(output, MODID, existingFileHelper); + } + + @Override + protected void registerModels() { + // Hexical + basicItem(HGItems.HEXICAL_PETAL.get()); + basicItem(HGItems.HEXICAL_ESSENCE.get()); + basicItem(HGItems.HEXICAL_DIAMOND.get()); + + // Scale + basicItem(HGItems.SCALE_HELMET.get()); + basicItem(HGItems.SCALE_CHESTGUARD.get()); + basicItem(HGItems.SCALE_LEGGINGS.get()); + basicItem(HGItems.SCALE_BOOTS.get()); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/LangProvider.java b/src/main/java/net/nova/hexxit_gear/data/LangProvider.java new file mode 100644 index 0000000..d7bd6e1 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/LangProvider.java @@ -0,0 +1,30 @@ +package net.nova.hexxit_gear.data; + +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.LanguageProvider; +import net.nova.hexxit_gear.init.CreativeTab; +import net.nova.hexxit_gear.init.HGItems; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class LangProvider extends LanguageProvider { + public LangProvider(PackOutput output) { + super(output, MODID, "en_us"); + } + + @Override + protected void addTranslations() { + // Items + addItem(HGItems.HEXICAL_PETAL, "Hexical Petal"); + addItem(HGItems.HEXICAL_ESSENCE, "Hexical Essence"); + addItem(HGItems.HEXICAL_DIAMOND, "Hexical Diamond"); + + addItem(HGItems.SCALE_HELMET, "Scale Helmet"); + addItem(HGItems.SCALE_CHESTGUARD, "Scale Chestguard"); + addItem(HGItems.SCALE_LEGGINGS, "Scale Leggings"); + addItem(HGItems.SCALE_BOOTS, "Scale Boots"); + + // Creative Tab + add(CreativeTab.HEXXIT_GEAR_TAB_TITLE, "Hexxit Gear R"); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/loot/BlockLootTables.java b/src/main/java/net/nova/hexxit_gear/data/loot/BlockLootTables.java new file mode 100644 index 0000000..eb3e9c1 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/loot/BlockLootTables.java @@ -0,0 +1,45 @@ +package net.nova.hexxit_gear.data.loot; + +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.AlternativesEntry; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.functions.ApplyExplosionDecay; +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import net.nova.hexxit_gear.init.HGBlocks; +import net.nova.hexxit_gear.init.HGItems; + +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class BlockLootTables extends BlockLootSubProvider { + protected BlockLootTables(HolderLookup.Provider pProvider) { + super(Set.of(), FeatureFlags.REGISTRY.allFlags(), pProvider); + } + + @Override + protected void generate() { + add(HGBlocks.HEXBISCUS.get(), block -> this.createSilkTouchOrShearsDispatchTable(block, (LootPoolEntryContainer.Builder) this.applyExplosionCondition(block, LootItem.lootTableItem(HGItems.HEXICAL_PETAL)))); + dropPottedContents(HGBlocks.POTTED_HEXBISCUS.get()); + } + + @Override + protected Iterable getKnownBlocks() { + return BuiltInRegistries.BLOCK.stream() + .filter(block -> Optional.of(BuiltInRegistries.BLOCK.getKey(block)) + .filter(key -> key.getNamespace().equals(MODID)) + .isPresent()) + .collect(Collectors.toSet()); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/loot/HGLootTableProvider.java b/src/main/java/net/nova/hexxit_gear/data/loot/HGLootTableProvider.java new file mode 100644 index 0000000..12991c9 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/loot/HGLootTableProvider.java @@ -0,0 +1,40 @@ +package net.nova.hexxit_gear.data.loot; + +import com.google.common.collect.Sets; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.WritableRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.util.ProblemReporter; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.ValidationContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; + +import java.util.List; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGLootTableProvider extends LootTableProvider { + public HGLootTableProvider(PackOutput output, CompletableFuture registries) { + super(output, Set.of(), List.of( + new SubProviderEntry(BlockLootTables::new, LootContextParamSets.BLOCK) + ), registries); + } + + @Override + protected void validate(WritableRegistry writableregistry, ValidationContext validationcontext, ProblemReporter.Collector problemreporter$collector) { + var modLootTablesId = BuiltInLootTables.all() + .stream() + .filter(id -> id.registry().getNamespace().equals(MODID)) + .collect(Collectors.toSet()); + for (var id : Sets.difference(modLootTablesId, writableregistry.keySet())) { + validationcontext.reportProblem("Missing build-in table:" + id); + } + + writableregistry.forEach(lootTable -> lootTable.validate(validationcontext)); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/recipe/CraftingRecipes.java b/src/main/java/net/nova/hexxit_gear/data/recipe/CraftingRecipes.java new file mode 100644 index 0000000..434fa33 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/recipe/CraftingRecipes.java @@ -0,0 +1,33 @@ +package net.nova.hexxit_gear.data.recipe; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.RecipeOutput; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.world.item.Items; +import net.nova.hexxit_gear.init.HGBlocks; +import net.nova.hexxit_gear.init.HGItems; + +import java.util.concurrent.CompletableFuture; + +public class CraftingRecipes extends HGRecipeProvider { + public final RecipeOutput recipeOutput; + + public CraftingRecipes(PackOutput output, CompletableFuture lookupProvider, RecipeOutput recipeOutput) { + super(output, lookupProvider); + this.recipeOutput = recipeOutput; + } + + public void build() { + oneToOneConversionRecipe(recipeOutput, HGItems.HEXICAL_PETAL, HGBlocks.HEXBISCUS, "hexical_petal"); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, HGItems.HEXICAL_DIAMOND) + .define('#', Items.DIAMOND).define('P', HGItems.HEXICAL_PETAL) + .pattern(" P ") + .pattern("P#P") + .pattern(" P ") + .unlockedBy("has_" + getItemName(HGItems.HEXICAL_PETAL), has(HGItems.HEXICAL_PETAL)) + .save(recipeOutput); + + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/recipe/HGRecipeProvider.java b/src/main/java/net/nova/hexxit_gear/data/recipe/HGRecipeProvider.java new file mode 100644 index 0000000..4b43ca4 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/recipe/HGRecipeProvider.java @@ -0,0 +1,48 @@ +package net.nova.hexxit_gear.data.recipe; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.RecipeOutput; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapelessRecipeBuilder; +import net.minecraft.world.level.ItemLike; + +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGRecipeProvider extends RecipeProvider { + public final PackOutput output; + public final CompletableFuture lookupProvider; + public static String path = MODID + ":"; + + public HGRecipeProvider(PackOutput output, CompletableFuture lookupProvider) { + super(output, lookupProvider); + this.output = output; + this.lookupProvider = lookupProvider; + } + + @Override + protected void buildRecipes(RecipeOutput recipeOutput) { + new CraftingRecipes(output, lookupProvider, recipeOutput).build(); + } + + // Recipes + protected static void oneToOneConversionRecipe(RecipeOutput pRecipeOutput, ItemLike pResult, ItemLike pIngredient, @Nullable String pGroup) { + oneToOneConversionRecipe(pRecipeOutput, pResult, pIngredient, pGroup, 1); + } + + protected static void oneToOneConversionRecipe(RecipeOutput pRecipeOutput, ItemLike pResult, ItemLike pIngredient, @Nullable String pGroup, int pResultCount) { + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, pResult, pResultCount) + .requires(pIngredient) + .group(pGroup) + .unlockedBy(getHasName(pIngredient), has(pIngredient)) + .save(pRecipeOutput, getConversionRecipeName(pResult, pIngredient)); + } + + protected static String getConversionRecipeName(ItemLike pResult, ItemLike pIngredient) { + return path + getItemName(pResult) + "_from_" + getItemName(pIngredient); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/tags/HGBlockTagsProvider.java b/src/main/java/net/nova/hexxit_gear/data/tags/HGBlockTagsProvider.java new file mode 100644 index 0000000..ccb6d34 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/tags/HGBlockTagsProvider.java @@ -0,0 +1,22 @@ +package net.nova.hexxit_gear.data.tags; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.BlockTagsProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.CompletableFuture; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGBlockTagsProvider extends BlockTagsProvider { + public HGBlockTagsProvider(PackOutput output, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) { + super(output, lookupProvider, MODID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider pProvider) { + + } +} diff --git a/src/main/java/net/nova/hexxit_gear/data/tags/HGItemTagsProvider.java b/src/main/java/net/nova/hexxit_gear/data/tags/HGItemTagsProvider.java new file mode 100644 index 0000000..afff7c0 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/data/tags/HGItemTagsProvider.java @@ -0,0 +1,27 @@ +package net.nova.hexxit_gear.data.tags; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.tags.ItemTags; +import net.neoforged.neoforge.common.data.BlockTagsProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.nova.hexxit_gear.init.HGItems; + +import java.util.concurrent.CompletableFuture; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGItemTagsProvider extends ItemTagsProvider { + public HGItemTagsProvider(PackOutput output, CompletableFuture lookupProvider, HGBlockTagsProvider provider, ExistingFileHelper existingFileHelper) { + super(output, lookupProvider, provider.contentsGetter(), MODID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider pProvider) { + tag(ItemTags.HEAD_ARMOR).add(HGItems.SCALE_HELMET.get()); + tag(ItemTags.CHEST_ARMOR).add(HGItems.SCALE_CHESTGUARD.get()); + tag(ItemTags.LEG_ARMOR).add(HGItems.SCALE_LEGGINGS.get()); + tag(ItemTags.FOOT_ARMOR).add(HGItems.SCALE_BOOTS.get()); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/event/ClientEvents.java b/src/main/java/net/nova/hexxit_gear/event/ClientEvents.java new file mode 100644 index 0000000..0e01abe --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/event/ClientEvents.java @@ -0,0 +1,26 @@ +package net.nova.hexxit_gear.event; + +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; +import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; +import net.nova.hexxit_gear.client.model.ScaleHelmetModel; +import net.nova.hexxit_gear.client.renderer.ISTERProvider; +import net.nova.hexxit_gear.init.HGItems; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +@EventBusSubscriber(modid = MODID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) +public class ClientEvents { + @SubscribeEvent + public static void registerLayers(EntityRenderersEvent.RegisterLayerDefinitions event) { + event.registerLayerDefinition(ScaleHelmetModel.LAYER_LOCATION, ScaleHelmetModel::createLayer); + } + + @SubscribeEvent + public static void onRegisterClientExtensions(RegisterClientExtensionsEvent event) { + event.registerItem(ISTERProvider.scaleHelmet(), HGItems.SCALE_HELMET); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/init/CreativeTab.java b/src/main/java/net/nova/hexxit_gear/init/CreativeTab.java new file mode 100644 index 0000000..64375c1 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/init/CreativeTab.java @@ -0,0 +1,35 @@ +package net.nova.hexxit_gear.init; + +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class CreativeTab { + public static DeferredRegister CREATIVE_TAB = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); + + public static String HEXXIT_GEAR_TAB_TITLE = MODID + ".creativetab"; + + public static final Supplier HEXXIT_GEAR_TAB = CREATIVE_TAB.register("hexxit_gear_tab", () -> CreativeModeTab.builder() + .icon(() -> new ItemStack(HGItems.HEXICAL_DIAMOND.get())) + .title(Component.translatable(HEXXIT_GEAR_TAB_TITLE)) + .displayItems((itemDisplayParameters, output) -> { + // Hexical + output.accept(HGBlocks.HEXBISCUS); + output.accept(HGItems.HEXICAL_PETAL); + output.accept(HGItems.HEXICAL_ESSENCE); + output.accept(HGItems.HEXICAL_DIAMOND); + + // Scale + output.accept(HGItems.SCALE_HELMET); + output.accept(HGItems.SCALE_CHESTGUARD); + output.accept(HGItems.SCALE_LEGGINGS); + output.accept(HGItems.SCALE_BOOTS); + }).build() + ); +} diff --git a/src/main/java/net/nova/hexxit_gear/init/HGArmorMaterial.java b/src/main/java/net/nova/hexxit_gear/init/HGArmorMaterial.java new file mode 100644 index 0000000..6984a54 --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/init/HGArmorMaterial.java @@ -0,0 +1,32 @@ +package net.nova.hexxit_gear.init; + +import net.minecraft.Util; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.crafting.Ingredient; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.nova.hexxit_gear.HexxitGearR; + +import java.util.EnumMap; +import java.util.List; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGArmorMaterial { + public static final DeferredRegister ARMOR_MATERIALS = DeferredRegister.create(Registries.ARMOR_MATERIAL, MODID); + + public static Holder SCALE = ARMOR_MATERIALS.register("scale", () -> new ArmorMaterial(Util.make(new EnumMap<>(ArmorItem.Type.class), map -> { + map.put(ArmorItem.Type.BOOTS, 3); + map.put(ArmorItem.Type.LEGGINGS, 6); + map.put(ArmorItem.Type.CHESTPLATE, 8); + map.put(ArmorItem.Type.HELMET, 3); + map.put(ArmorItem.Type.BODY, 11); + }), 15, SoundEvents.ARMOR_EQUIP_NETHERITE, () -> Ingredient.of(HGItems.HEXICAL_DIAMOND), + List.of(new ArmorMaterial.Layer( + HexxitGearR.rl("scale") + )), 3.5F, 0.15F + )); +} diff --git a/src/main/java/net/nova/hexxit_gear/init/HGBlocks.java b/src/main/java/net/nova/hexxit_gear/init/HGBlocks.java new file mode 100644 index 0000000..4139d4e --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/init/HGBlocks.java @@ -0,0 +1,47 @@ +package net.nova.hexxit_gear.init; + +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.FlowerPotBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; +import net.neoforged.neoforge.registries.DeferredBlock; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGBlocks { + public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(MODID); + + public static final DeferredBlock HEXBISCUS = registerBlock("hexbiscus", () -> new FlowerBlock( + MobEffects.DAMAGE_RESISTANCE, 5.0F, + BlockBehaviour.Properties.of() + .mapColor(MapColor.PLANT) + .noCollission() + .instabreak() + .sound(SoundType.GRASS) + .offsetType(BlockBehaviour.OffsetType.XZ) + .pushReaction(PushReaction.DESTROY) + )); + + public static final DeferredBlock POTTED_HEXBISCUS = registerBlock("potted_hexbiscus", () -> new FlowerPotBlock(HEXBISCUS.get(), BlockBehaviour.Properties.of().instabreak().noOcclusion().pushReaction(PushReaction.DESTROY))); + + // Registers + private static DeferredBlock registerBlock(String name, Supplier block) { + DeferredBlock toReturn = BLOCKS.register(name, block); + registerBlockItems(name, toReturn); + return toReturn; + } + + private static DeferredItem registerBlockItems(String name, DeferredBlock block) { + return HGItems.ITEMS.register(name, () -> new BlockItem(block.get(), new Item.Properties())); + } +} diff --git a/src/main/java/net/nova/hexxit_gear/init/HGItems.java b/src/main/java/net/nova/hexxit_gear/init/HGItems.java new file mode 100644 index 0000000..edd6aad --- /dev/null +++ b/src/main/java/net/nova/hexxit_gear/init/HGItems.java @@ -0,0 +1,42 @@ +package net.nova.hexxit_gear.init; + +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.Item; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.nova.hexxit_gear.HexxitGearR; +import net.nova.hexxit_gear.client.model.ScaleHelmetModel; +import org.jetbrains.annotations.Nullable; + +import static net.nova.hexxit_gear.HexxitGearR.MODID; + +public class HGItems { + public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID); + + // Hexbiscus + public static DeferredItem HEXICAL_PETAL = ITEMS.register("hexical_petal", () -> new Item(new Item.Properties())); + public static DeferredItem HEXICAL_ESSENCE = ITEMS.register("hexical_essence", () -> new Item(new Item.Properties())); + public static DeferredItem HEXICAL_DIAMOND = ITEMS.register("hexical_diamond", () -> new Item(new Item.Properties())); + + // Scale + public static DeferredItem SCALE_HELMET = ITEMS.register("scale_helmet", () -> new ArmorItem(HGArmorMaterial.SCALE, ArmorItem.Type.HELMET, new Item.Properties().durability(ArmorItem.Type.HELMET.getDurability(29)).fireResistant()) { + @Override + public ResourceLocation getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, ArmorMaterial.Layer layer, boolean innerModel) { + return ScaleHelmetModel.TEXTURE; + } + }); + public static DeferredItem SCALE_CHESTGUARD = ITEMS.register("scale_chestguard", () -> new ArmorItem(HGArmorMaterial.SCALE, ArmorItem.Type.CHESTPLATE, new Item.Properties().durability(ArmorItem.Type.CHESTPLATE.getDurability(29)).fireResistant())); + public static DeferredItem SCALE_LEGGINGS = ITEMS.register("scale_leggings", () -> new ArmorItem(HGArmorMaterial.SCALE, ArmorItem.Type.LEGGINGS, new Item.Properties().durability(ArmorItem.Type.LEGGINGS.getDurability(29)).fireResistant())); + public static DeferredItem SCALE_BOOTS = ITEMS.register("scale_boots", () -> new ArmorItem(HGArmorMaterial.SCALE, ArmorItem.Type.BOOTS, new Item.Properties().durability(ArmorItem.Type.BOOTS.getDurability(29)).fireResistant())); + + // Tribal + + // Thief + + // Sage +} diff --git a/src/main/resources/assets/hexxit_gear/textures/block/hexbiscus.png b/src/main/resources/assets/hexxit_gear/textures/block/hexbiscus.png new file mode 100644 index 0000000000000000000000000000000000000000..eb86b515e7990882e43374792216213ab9571e8a GIT binary patch literal 1086 zcmaJ=O=#0l98c+FTV1CjQ~ba^G8k3Xq)FG*#>TB}y0x;D(iS%H;IibohAw#_Np07Y z^X5enuO4LH2YML76xl@({J1H25kb%$hJrhIQ07b5b{?#cy!Y~d{QkfH_pN+x+V4B* zBM8Eu&4>kjA9i=27oUOPp(4IKc40b6ti3tCg@vBQgp?qNM|TeXk`G|{On#=6W*_eM zu6*^;W^d(b&(YuzJAWjQ>pcWVkO|i! zn3M7#g)9gnR5+-F7zS`0#f(Qdju``Nh+*jv{>#Uz&{8{_`7&~lT}CEI6*&-?)eIHY?6Xb0B=K3pc4R|=Sy3P{1Epyy zABmbauJbh>xxLJ>ddXW* z@E};Y<2R3edWEOuQdUfq0>$d<>>vU9yp!ga-QjncmCWk#5B=w|{8g}iV{3J?@Y6H8 zwmrIGHQs+l4=(Hsc*6kQANu`b{`R`@-M>TZ43MX;JnJjk_K%P55N6XkaVWmRz^6B{wA5noS>6 ze9;GgKt#nKP$nX5Ac#K<|4%5=1Fz#F4 z;;Gz=MYkh6wddk z3^h_xU>hJE%|K`rSB+yxawo9yHqfr>Jn?bp7J;h@Pi%>ZVbMr}4z<3|1lhiZoZQzb z#}uMwt-n0(aEL(zwuC!cmu_(mPZWqb^zUv{1YUsHojj3nJ>tz`Bc6mNz$0X3NDk99 z&axz36=7L=4bFsVh66Z6)-7AoWsnwl0x^)Ps&H&|GDR~&REWl6 zG@W8%7m+a9#?IDwucSxr?4%v%=4fkc)0ep|yZwhRD+gb>t(#6Y2!plT_WS}3$$-)T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/hexical_essence.png b/src/main/resources/assets/hexxit_gear/textures/item/hexical_essence.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6241d9061f97ca7c1fed2444c0bf9687b49fae GIT binary patch literal 1332 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/sage_hood.png b/src/main/resources/assets/hexxit_gear/textures/item/sage_hood.png new file mode 100644 index 0000000000000000000000000000000000000000..5511eb15beb62f85b8be6eb363f23c015bccf363 GIT binary patch literal 1373 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`YGC4M?rLJ<>SAVSXy|Iv4~Pj*wm=R%;iu*SQ+p9GSqDAbr_I2?c+u0vF{I+w zlHmQ`(SaiW-ud3^_H7EvU^~8Ti+8{V3y~P>lB*Y8U4o`JcylZ1HZ?WB2wM_eC{R9e zn}vy@(~+a9$r^Ki@n6X}bNaOH-*w6P9zvKk| zGVPdo@`zn^nZyf&2a6bgo=mvhI7g0|(c4RH?$zS=OW75^IiBIzd9EhvW4@nyV@RKj z#GwgKmsLyLaNtgml(3p!_hHV5Gdc@uH!G;8#`nDq5pUQSDKUq~^Y?7)|5i7gAFs)I zJV!2YZI}I0XOFEe2X-vyz9^cRy0WZWQfd4A{d3FwAMXql3g-B{{%(x|$2!-2M-RNI z594quuXD@(-o23Lld}IDwz9ZS{lyh0!&a{}-}kh3a>j1&)_Q-x%79BfCyzuO=8KG$ zpRI6P?aXx3tLB~NRp&&GX#L$%_H0G=rLZ~2e%;VEpPE+g%`5X%Z^EH2g|0cDI-=^< m=&rt-`}KbPL%Y}W8JHQu=Izy#5#%TZ6?mSmelF{r5}E)hIr&%s literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/sage_leggings.png b/src/main/resources/assets/hexxit_gear/textures/item/sage_leggings.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c09e8e0d14a830b787d2089129e0c0bb57b611 GIT binary patch literal 1418 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkc>f+{VSF3@Xy|HUX<%w%VPx!LXlCJL zY~*SR)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSqp8WxLL^WcYrfu<3olWIZ2CKPHam3n>I^* zCx>h1OwE;US1-T+I{UhAVCbF{$vp)>ZBM_gPWU=4=*JdQgW2&rr0duf1Lo=9ygPGi zt<<;d!g#xQjt|e~CjDg=n0F+(De1v=v8Xu;g*>)09C@A*j%nNqGnuZhx0ZUz`Q^8{ zM|f%ttH2Wb>k||jEW%cE7==8RVoDcz=KS7#Lh`5c%#y8(QV*&e?`S+TeXoydME0pX z&b+7>hxumRW3FVYP_q4&FP>+A=cS6I^P1P0pZ~P{wR?Mh+G*G0-P@Ep)iqYL#oO0T zNf-Xje_p{;s3ozb?b*~)=A}x`DJESTBhCa)H9eQg`I_&4`NHVSH$|?Sn+u#@d{ONA zs$&{66&8paYgKHG`uef$`mLO8&P@GNc|uFVKh=iyDzOAQxGG-#`9b6Eh0hv10`3nd zJSd-)WHeVHWs_oK>ggyc53hHss}?n6%g%`@VxJswRrghK=drCH{s^2|nsPkcQC-h) z>xFBJ^4?5Pn0Y?Y>ZZxX=N~wxu9#70KIfR8*iq$(vh}B>1!VeI)7#EDS8d*;lf2u4 znZ<%HWS)GXmRHU;Ym2E1*>@)^hV%E&O7~w;`8|*CR)vaYwD_BERd!E8k|)^ODdxU0 hZr<~y{GajxhR%h5-`!gL<{+qa^mO%eS?83{1OUoJ2iyPv literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/scale_boots.png b/src/main/resources/assets/hexxit_gear/textures/item/scale_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..20a1c1575053eab695fd09dd022acb8667297a9f GIT binary patch literal 1435 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkcW?^Jx>1^!m>SF3_Xy|Iv4~Pj*wm=R%;iu*SQ+p9GS--#k;X4BZ6Thd6V@SoV zCBeJ%gdIg}AJ4rhyMA(Pj{3t?CKgT>4;vMYMF9~d3N0I0Y8ZGIxj$mg_`#&&6(!{* zrKJ?9D0_pqO+%>hL4u~*jqK{Z{iolkEIW`rtH;E+`u#mitLJwl-CTZ@SDfy)`uXW6 zm-n~saPJn0h^jpYk97$*T#T`*>d(`&S@eFr{)MSCtwScbXWX-N&!2zp;?qaEUe>cE zS+9G2?`(9Gu*}IVG2r=am2V(?H{PzPpkd2G#=JRI9+$)9)bDzqIQ{rWUfIVt2di%! zYCS6ZWeIgw)o)TNWkx=K%BR4|kVzHJ>=XuKG(ngURx+l0cdE ztk5zoH_2myM;X}?-DhS$T2nkXi1FTrpn-}ztgUIKgNZ-cbC zm4A(sB{sN-En^bQnm1D~SgZNlLjDs|Eq*K)@)J4ty6jtQ1K>Nlv-uvGJS6@|Fdd2X$%-5<~8He&E yH~-u=S7hN)Rc2ffwp!<_+Pm~O(hvF>m>C3(pFZZE6PgMtEc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkcVrXvZ>f~bK>SF3-Xy|HU;pk-OW^QI+?q=ZV zWa;7t)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSx2xg&1GO4p7*kZf_i*e-5! zR`W2Cn4O|s3akfR7cLUZ{+qGI)9~e)BYtXUYo7d++7M#0T5rz>vG;q6&)a^#^Ib%d zWp}5*Zl2QT%XYt1x%qvs&fW_3Y2w{0lnxZyZ1LdO8@YIbw)S;7{t0XM{fj>M;y~=g zoArJ(PFqg2x^Yz6JN?5=+jH^M$xualcC7HHbn-=6q4Y$)%$?5wa1cm@}>TibQ?Y7 zn6>Ki%ohj0$2ukQo}c{IB74%3OEVG{XHC+tJ@$1~i8{aV)mf?i2_c`>SX*Wta_7$M z<&65umozcWPV`yo*3cl`zc=PJ>T@oR;$C&HCG_XTADXYTX1}p_b9z6ePNT;7e$v#> zmqZ=oj|T?j+Fr@ZOJ>shsdKx3PJMoeJEo0&{r|#sf4<-U;oZQ< Ypqc*pY}qk84p1rT>FVdQ&MBb@03~N53jhEB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/scale_helmet.png b/src/main/resources/assets/hexxit_gear/textures/item/scale_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..5af4d72686085b23cdd94529f4e8960a6c9c4b64 GIT binary patch literal 1373 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LhG0X`wFK>F@{24DGFSvJ$XGdT7x5&3_X`{!Y%RD-$iPnv3SdheLP`2U{t zivtEr${1ekHMq4(eR&-F?X{YRJEazcGOuZ5INBxk>A2bMT9IAV!t1kn7e}&Qo2;_4 zQ25gcb75iOFNZ9?9I*Jj+x+!f!`suD^Ur(D zB}Ej^waf1-5q-8o?{u^5wMojGGx(0xNiB|GJy0&r%gehklm+CAD@B?>%DN=TFZe&% zfMMYgYdN4XoCO|{#S9F5he4R}c>anM1_ox^%#etZ2wxwo1^l#~=$>Fbx5m+O@q>*W`v>l<2HT7rx*GSUUA&@HaaD@m--%_~-h7y>oM zCAB!YD6^m>Ge1uOWNczmerbuV641pEujCfM&CV-^h8Hm8^eYkz^bPe4Kwg6>^!3HB zG&dKny0|1L72#;C1{a4^7NqJ2r55Lx7A2AI^HzOl6BR3NxQ*#5DUYGpj(%jU%5}4i;gkD3OdclzdiZL6YbwCHW zq!wkCrKY$Q<>xAZeQuSB(@D;*IE{tsO~L6TXE)q>^`VZk(FescQmjK#6j&6Pq<}md zeRz5X@!)wPH4m5(ihwEp<{z&Kz}&Lb)5S4FBRIA1Io}}zo|efL0gu}@MVYni{eJBI z{{)o~5zcq#U)ueABK&7@y~0xSr6LW*bA^r08wGT*GI2zi#M;{U~*%7^TQ0AndcNfTJxL}zm~Z(YWMlN z8HdhZyLI>9gXK#Yu3nsXK$E#*+jRX8PqOmg&tXd2V?WO>?Sb+$ap&0z`LV~{-9h== M)78&qol`;+065+6O8@`> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/scale_leggings.png b/src/main/resources/assets/hexxit_gear/textures/item/scale_leggings.png new file mode 100644 index 0000000000000000000000000000000000000000..41057f5bf0c5b6210728396bc1e76fda46cffa47 GIT binary patch literal 1488 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`Vd>^-=<4k1>SF3>Xy|HU;cDUHv4~Pj*wm=R%;iu*SQ+p9GS);!#F&gYr-4?8#l_E{EvcpEIgN$AkEn<`TxB%-hH7Z7uwCi>>;Jhndb zqxy^a9VdKvbkq9Ij;+k;X^)>C?%z@N+h$Rs=*kMY?xRd+-~U!;JZ!%8fK7=)r_vf{ z@!3BmuCz4GXLtV)E5CRjpQeuEG*W-|qse^^n>c`{{EdghzD)}_@u z?(gE5)^XQ->va*8btVGS+SSkQzQCo`byR85MGX_*!+ZI|KkV7w9i!J?V%6)R($ssF zL(b&;HO6)Mi!1baua^d{3<+3&-O^=Rst6bByX4zu;@6h$TEl2_zG;i1f(Tb(N9HUE zzIFqi=I?VnR2FD(6{QP(cz*7`)`DZM44#t=X8Ketc>mjGMrfek^q;%`-d@a5FMGhn z*iG+z)Y`C0)iY`wOfFV4^R}OMog>BbU@bF8>6Vh|-|xQu8n()~Vb!WVs$ra;E%)u! zKJfUMw$2OV`R5OB(n&Fzxt~wOV6NZJxuHU5IHk((ty^F8_%EOQ^>1Ypr`t>L7|cKa zbNkJlwh*nOZ+pXdH%9PG|Ia$bOZDA_yzM{rUhF!@JY86_|M-ct&3n2YUtiVgx7>L~ zhK?|ILZgU>M$3lIBaaL3@tyYj-neFq_1pJ<+#47fJOgkB&>F3o2+Uc(^HpzSCSXUOR{E0$qOID-&_GADzm0D~eg zgS0fGfgN8&4g&)hgSZ1<^3_%bGw#q!%?zRp8rNnrTxeuCH-+I`9fJsi+T|Gx#S9GW z3_^xn9%uR(ycie`tY8RZU^rdHaIBkwk3m|V+02K5L5tn~bUnk)GKOTbrsu(ptaje&n#1;dU-j&qV2_LVYhFJxGg$*^&b-N7z~WoZlt+ZlG%GwiQt z*jmjnBbH%aB0~ZLgEP=GK)}kM4kX=5g8YL2Qv)z$PII{cG?BBwBNFH@Zeb8+WSBKa z0vN!Oo-U3d7XGbgtD~C?L>dayR^JR=d&bcCWz&k3i@ggr9J=-WzgKSZqR%`w^>aV| zJJ)=8yN|3xuWStag?Dn9*BEY|tTPSx`(T5RPPM2;HETqvb--VbQtgP{+Zj_zI0PpC zt+>gkQB}#$pro$5*!#k@)e;wv);_<&l3u0z`)5@6g4N|NdJfYU++Lg|8vCbyvA4rr zIpNuFYA-3KO>fxjJ-y2=BcaIj&I_)BSAiwAJ9g%NbJRaDx8J?-#beGFtTWmk{?)0F zus;;XAm?^3L(C>}7u&?^b$xL;vCS+0{}Oxr-Np7yV8hOr?lQaor7znjsmwV0bnu)d zpY=6Z66#jTzx>WGz_&DRUHLijn@az$?v_*k8C`nYA~KHM;y=6e!KV^VOCrC4qQukH K&t;ucLK6UdIU?Wy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/thief_boots.png b/src/main/resources/assets/hexxit_gear/textures/item/thief_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..230291c678e0c764d7cde98b5cef03541ca84575 GIT binary patch literal 1346 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`Y-nI%=wfc^>SAVOXy|HUY3gF>=4NDMZf0s| z;An0J)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GS@+sp+RnhhxXshWF{I+w zk;!}YSsW#f&7XPm_U{{y`NZWFT_yx@bOv11a8Xpcm^DQy<1fFE)j#IWSz#`V1B*CM z3MzR#Ip@CP_U+quCEw>1iR77b z^>01(deHpdQzUb}_u@aZniLjqk(#|@YoV0qrOn>c@{Fa1hGqu1`J=)b{;&Rt1JpC)jVDO KT-G@yGywn?gzE7C literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/thief_chestplate.png b/src/main/resources/assets/hexxit_gear/textures/item/thief_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..10a015b5d04c9ba48bd82070cb6ad99cefab0814 GIT binary patch literal 1350 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`?(Ayp=4xc*>SAhcXy|HUVPIh5a zV(8=w)9aF-T$-DjR|3Q!gkfv4~Pj*wm=R%;iu*SQ+p9GS^o*BFk@g~+~w)w7*cU- zO|Y-GvZFxlU&G5YFWzMp4vZAweZ8x?)7;U~<@_S{gOBI^iJbR`^O5hz1?Jy3EN2Z2 z`0z+bxH(=}{qp5p-{UPuSiUc?ZGX8g{OhV$q2`;fJ+ket)i@Y-Z}U@+W=%%_{dmvJdsOFG>rwUi zq|LK7=rzT+h^e^G-NZiSa@9j zy=}Lag^ke-VXoqfi@oo3y;M2TGmW$JugTGWe!O!EC6s4z+;pDGJd5Rp`-5qdgqnh1 zN*>w#ZIhYBCjHi*|0UG9oy|VjFj+iOIrKe0K2wU#^1id4#DS0VgSQpLJ7;r!3N4sC zbz;U66Jf@4=hn~hmHs>F(rd31*8JjArN3{VvT>qH#tW9^`o(S677lr`*JSEs53t1&(`UI@P+y%>4T>!dTWP>&
IeCN8V3zb0J&p>u#iN#fMsc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkcYG!6&U|?qA?B?oZXy|I>WNhkc;bLOsY+`0^ z;bLS6)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSzp$z)COjWpPnv`Ar-fl zOt$4aWWdweT%h+!9UTyeB^oBS08JB1*jEf?;l z2{5=wl_i<}WDVMITefNPiARSYuIed_Dl}Ni_c6D`FKOWx-Pdf%>p#0UFf#ZR7qT@4 R`t1P~44$rjF6*2UngF7ZhNJ)h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/thief_leggings.png b/src/main/resources/assets/hexxit_gear/textures/item/thief_leggings.png new file mode 100644 index 0000000000000000000000000000000000000000..69820eda45b156b66b2fe390412dc37759027c13 GIT binary patch literal 1333 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 Gp$PzE*Qh1{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/item/tribal_skull.png b/src/main/resources/assets/hexxit_gear/textures/item/tribal_skull.png new file mode 100644 index 0000000000000000000000000000000000000000..76f7b1c177bb054bb1c29f7da722a02e4823aab5 GIT binary patch literal 1219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`YGG_)>EdYa>SAhYXy|I<1twN zW@79L)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSqnWbab;j&H1~9I45_%4 z^ymM7duG)J!MhFo@^*ioKYG;k`TpMO;|C5NWPHxe!C{bO`r!KdcnQCspPq6v^Yim} z-PoRg|G=*Xw#J`6JLa%m=2_$@!P}r4ePjAx`8Q3!zrSy0U9xnkB!?tN@zFo?N(^Q{ zJ+<;|!E*bf$sD`F?dqC#biKU#nLXjy-P_j#L}GTA^*+3_vp9mc`ojZ88=go9mH^`$ zqD@Ur5?zjM5|WY&KR7N(ycAZDWAN^-L8oKj`RDdN#zi8Jm=+i`xT;$SnCrbwxv-h* za5l$@w1BFBfB*+i{s$Q>S!~?<>i^3vU#oC7Dk`dAf3k{7LP*nLh767ysz3HHePOau zTqx0?s_=iYbjv&;!%s|N&Hw8E|C{R=5i#T8+uPfD=FFM%gV*77L;uelF{r5}E*|Go#c1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/models/armor/sage_hood.png b/src/main/resources/assets/hexxit_gear/textures/models/armor/sage_hood.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc6597cf7c6d6521624647f132458ba44486ac8 GIT binary patch literal 2130 zcmcgte^?Xe9luv$L!26Y1OXFrTqGnwa(DU7VZ`JvgrLMMi6h~6NRDtoaxn=IK%Q3D zN9#&yHx-M6>6~q~R(-U}Sod^p`mEiY_^aKDQeE41{$$ftE$v$CF8px&!}X8-vG=+6 z-h1Eo`~7^rKcCxTvzq56XCy-qG|y5(*|~KkH{qn&+7g)1)erg9|QI6pkY052Y{~=RIdZBX5ef9t|qXS z0d^m-)dL3&R#yX?2dt_B)@tDJfyy9QQwP>Ig7PL%vksKHf!PICRRYoh%;msZ3!II> z;sQlhU~vO$4XBBLst_a$t{p53^HvosxwO!22p-tR-R5M(Fk*t{A?^eOP&TxQ-zWxurwo! z(~@UNwMd>$lt*MqHJLd|K{mFO$D{w#fOcyeGC0yX zp%Qllg65x!Pw)=A&j&%XH!x0D)K#{c@Uj89$H&&w@>n3mNkh=`qFBh|ZKk7eJ?&?L zdgRV8ParVk(<9~TGOR2_(v3_>XP9<$TAkj`W^aKHDOxcvd3lWB5CU}61IGd_!3Yu4 zBa^@c_Z>e*5qMH0+N?(maYooxW`jvKOv7rqQs%{Q9M)*$xJs?j;Q6ou!xbpTJsKIV zBGei}p@pXh!qLI-^02Rguv5j;blgslG)AK#0!7=~+vV*_IUDw)ctJry97ds#aT2mf zM=^s(&`=}eBeEKNC0(P5^I_7#WO06ZCHf_Z`&6sFQ@bs7_?`)}?~ z>H7Ys(4mvn$C-r2E9E~bXR0bEPr0&;w*>mQC*r%ueMJYkW(sp%^P~QZk0EH*Pb`$d zS+eSH+b*@ei}5y@MPo;OKX&z16%6xUT`WnwxJ}+d*PgEEJ9?Nt_hk_%9Uq<_I4hla zD9_*3f8lWdg;8uD*!XP1oYwJ*i+B5mGqGLDyG?6E&)8OOE}Vby@(t(hv>l61b_eM? z{<}QrG~ns7T<)D$7p^dM=_0=-e%FtOiX z3AP(a$WnqJW=Lk zdBgkm-Wxq)-k|OBh+^bmZ<1TZ$NHY%GXZ*>hCN%UOySGSx|c2r2Cvzhq>6>So(hoH z-33w()DL-&y8ig^8Eeb7zEjp0hsT2c*Z&~C^E0rFQ1*|s{hbmhm9;mj-XU^_7A+a`0o9UxAty1 zv(*`XyZ6|h^H;lWj?Mi<(Y!?F$RBW5z5X@nzy6%@_oG*--p}rA95{bv!Ts7-G}m|Y zlljTtVUh<5Yv1~6!THKtXsyd#U3nsQ^V97ImcIX|Lw_FbxZU>X?3JzwvvZwe!_{lw z-~2*mQOBFd|1ti>b34Wk*PQ71GWbRJqf^&5BzCS67IoLSAAZ{E@9Os79-9yr?Re_J hQ|N=Q`BWYD`CP|%#n123>rcdg4i=M@I%KTd_%G8M7Ulo| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/models/armor/sage_layer_1.png b/src/main/resources/assets/hexxit_gear/textures/models/armor/sage_layer_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fed2a683c0174bcc2394e1c62f67928afc20c5 GIT binary patch literal 2219 zcmbVOX;>3?8XttpEoxDuBBqh5E08c8xg=mtjdF`zQZOV#7$KRM3=&Zy1y-P1Dn|i1 zlyd7Taw;Ncby0jo@Ib5*i-n?G0^$L}N(U8pKiGcQnfcHEnD_U4@8_9BHcOz559;IWL=zxl0)JkHpb$$jGyvE;Dx`ctD1_pIAQ3E~8#j`y~6wsMxT zpb&Ulqzu{_>EbDf3>8p?ct;1Ey@G}jh#{1ZQ;5SPa+-pUf6q(9*7L_iJnp>+8cN51 zFv`c-4aY)c5YCQZV=1r#K^%!h0B!9^B+vq9Z3S8rt+0n=3EI-^NHl9Q?&F2Ww8@0Q zG!HiSqb_Vm$A_S(ltv^*L_`oGYzT-O6R5rm5&3Cd&B@z@uF5EjzN zREDiBgTdxlvAG;u5Tw|WDHIznh03w9qB5x90>|gD9FW3d+SrlVTrLQL99ycD9gD@Z zqgXS^TrS&&yny9N`}oq}&*&#HnG6=lW^=*6^7{i;`2WO=h#5ni zFOL5ymW3m%0_T^XN*~*NY92^}b&L#ajob}ke*l2SBOaUKsdzZz+YxHUF;sT#>Qddc zNeyHAXDoGFm$D12GrD~=K*RT@^Q^9HrK|b%O$xVh+(?vByRD5uo9z0Nl`%Q&%ivq|uc(;9C}4)t!t z$9nE)j@zeMqI&+EU}<5IaJLh%d#+0&lPyb<<7Wr%9p^vGFHFnl7BFi3+BxRj?NbkS z2L@g|yV?Fxr`CmrQ&C2*XB`5@sV4So#+?GvfG|0e!*u_drma2(faw0PV>*pM~*{vB{LBwU3AHu#^b(WWub*2 z!T(mz#jx~6A*ar6Fqw(bz4A}Dn~oFy-^IN?$NO?wSF!l3H*Uqh7idx&8<+I>)i?;I z%T@cYjLua|53@N#Z&te&7?1as7v`C+bcwAPU&`=EV!(?AtPTQcffH*E>J0-vcJk?` zsc`fnRdv}Tm*L)LYDMZ9rYCq`U>O2 z^L8!4)gn7f<~PD*uN$!qFI@7}I-2%YnHAr=I!l31e_J+CYZNe%f!9sr5O(y;D2qB5 zrH6LbUz%E_QfbR#ZO&Hp6%RI{F>lg;y=!_#HMP3hLG(rE(1k2K>DtVza*vt@$?C(; pRwb{WXvodW6>gvmPW%X{1KI_3>rGygj?Mo*@Hj5)GUlF`KLNlUo!|ff literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/models/armor/sage_layer_2.png b/src/main/resources/assets/hexxit_gear/textures/models/armor/sage_layer_2.png new file mode 100644 index 0000000000000000000000000000000000000000..be8860073fa192b339be3ea52e4ebcc65804d77d GIT binary patch literal 2316 zcmbVOcT^L39-lx&1Szs0MamFFaFHYvAS59XNJ69-njl426OsWUq>m73%VMGIff_8U zA_|sUk+Li*N_m!BQ4|}xb`U|jV&PUGaJ&=2zzX`F#6(lOGzq!a&bT z4*&pz0DpEkI{Tml)YU=Xuwvk}z_I}kZB}O@biU3wJC)0 zv~V`(vo3VUz$GGxj7A`&rl#Uk-SARH0s*2@snZ-Jk}E3Vs@x<&_$pV4(qWc?4J!o- zkqi+@CEzq8KTf(4Vc<|pXIv1=xZE$q66NPWp&=uv_%Z^7ClbWsX}>;6E0J*c-)4MO zS{boP1{1K0LKGr2Dg0!%RIpJDOOOCI1BZUW3q?X2 znZ@*FL2Nb$Vsrf5A&BDcNujuLC{#Z;BGs1)&2oGV%VBzuNq%f1o5O)1$j_bX#w1bM zR9{ajmBbyAg}$q`1s*R!#MPdcuphs>SO9muwG1^(MT_if(C$(GtW z^NjXEwbZ&Wm(_4abDS0m$lg8bHo;&jhBaN#1&6mS=jK_6Qr-YpbG0i9?QN1OPEL7i z-)lX&zIyY>KGz^cWI$wCyNZ6i^1(66b>~1YEgg^2k}6Dr{l|sSE5!MB!`Y0N`Cffa z^wGhn#;jJ=+kIE=Jv%pLmyqodf04S#J<{*=Y2krwyTXrN%F`+dGc{S!#Vc6Y6WqeE z1df{xPPBGT^`+~*Np|~CZdQ|V>_vOAo)#@_$W`-RW4`8A(|F6o)M~BU=@M>7F>gVJ zu_&;iEW(?!n>udQ<*o)U=-Mpp_gms?+FO@jMAsZ`vdtWXhwub#x?c-LZ-@JFGvf8a zLUHS8n2&;IvUNUX|F4y0TH~SI$aS4r0JCbh#rki;%a;T+JP!1s71`(K1Xh!U#!i+k zVSHq+(GjdOGo*Ux<#_KEyPv%u0(p#IFl};!!Nrbi7Bx(ahInaNOlEDqR$kuOt)+gy z>yI$~t5ujDi}5FhfI8yosEs=Afzi%H$jZJe_U5D4Iwjbs$etPzWsG4vxky^rXx z*T&dy9lPG}=$x5>hpP|CwzGZX>igTle4QUj;|bp58SC@cHlH0jYtE~#?uGF*_!lcLM%kuee%AbTrv7Ss6T|LZOq+1s zVuPJW=Nz!`d;-b^PT3~;MlW`NK`XR%n^$PrH8=NJy5sL(Ns5}Rt7+Ek-4UAFF`B(r z*fD3NY24KL>Qli@CtM5@lSoT!;87 za4OyaVd+y%Nfu`lREBAR11;H2utA_Xhb{ z`JTYutwBu_r1-Rs1n3E~ud zY41dKVz7xdR%0{w`7w3uEu*_lst<`t3h&0{7x;D$N4(~(68(L-eXHfa#)g0^AqSfr d%_mve7+^!eWxj>*9e4WwB)~72UCrd>{0aJsqH6#E literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/models/armor/scale_helmet.png b/src/main/resources/assets/hexxit_gear/textures/models/armor/scale_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..354435e22ab8256edf3cc9a5ab81201c5146915f GIT binary patch literal 2253 zcmV;;2r~DHP)E00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ942x3V@K~!i%?O1D! z9c3AQX3or;s0 zgIa1Ou?h(Yl0psDq_qWG*0OZFU1)c^-R||=&zbwo=lgwoT6%*$Ti8@>pXA$jF6XuolMO@-Lv-Z9_zh3B~ycYr0VW(BM9y z94XFa-L@k?5C87HpQ$86zwO#g`b!~NMkN`hVNa}jdC()(i%$VH8^CsKEK0Rwcm7ZK z`|(|v>$f2ht;fGk?ZbhSdyv#pP*oKH^Wg_xP@Q%b&mMjv*xtRxBV#yZfSUKc5PDr4 znyyywE=KV$VC<~~tKLqEDIH`!TY>q>B}jymcy(+C_8#9Y;xMJ9(Nfn6-}mW`Kanmn zz`5`Pe@gon4?e_L_LnU8_C_{ru18V*9_;tN&-|WEj14?>p0e3I{eHMqy_+0U;(&qD z3EUk05{C5m@qXqgc{@N`dO5WiwC8U6de0AC-@!gIm*>B!`vgWkes z-!s^8bZgCfJ4YU7YI7@4E+Q!9A_B$!P|axOU--x|I}FDQ3uWQB}#AxqYTuiHOMp4KrRny zbw%pm^%d5XjGblXhLO7U1CVnDLT$r``A~n92s^%Xgz`*(2iF8Pt4~ z2bcep4VF)0+!#evi{K`GElv{`oXGaV^h`ABY0Rrz2x53^(CDqVY&%#`zdRs5;LLay z#3f-87DdSv%`iQvIRbcow@m3!Ga9u~IFtsQ> z9GX_-b01o{IkK_i32)8ZZ#V;`V+Bs0mjm7em0kzSP^lY!k%H+{fW&iKQ52C|)^PKP>e4~4X`kx=Xqis{*)WR3mjTIf|8TNK&g-a61T?gK_M}MBcq*UASTj@msjd0 zKaqlyLFNZ4y9MFdp>m(-i0ox)wI`*6eDTd=qC zS9~zuLj-$0J~R7sI9WU)j5pno?rZxYGrclwX25VvT$fw~g}lk5L94{c`!c%CPQ1Kr z2cmcS!W-<}6hk_V{O)5o*gF$i6}*i zPG04njcIjgp?3N$<4u&j94vRjFcCG1q|%7?=9S3gM?v2b(;ET&k1u%`E02@+D#$sb zu!+@q?lL)mDVHhqJ%kNT-V=~Ia*{Obn3TF7(i!DB!eJF^NJCK?M_7$OS9DTV!{MO= z$Xa>iDdcTRAx)WB>uqxn?0`P)DD7^q`x-iCuM$QuDAl?KJ4NbEH)NOckt^$vbOIOs zxqcL==KK7kCThc#9b)-LtbO>K7=8_md$~IIELhJ>#`d6uCf+bH zVhq6WEJ1oMr2`aBu$*T+p*(M`SCHaIy#2_L6IRT;0Ua|}!|^AaFx`-O{u`A4jd}_R z`po5uj~OEfQU1H0LqwG!PZHt5#vKpbjjh|)fpw?P8X-6sV?TcMCM;h^-vks-5k)3W z$s?x^K@LeMSiBNaXj3$B?>dencz{=lTcY=1K<+_*wnwCjL1}QhZ~}!&j-p}p#0Jw0 z*<DLaK!B?7va*%V>zC#5+ECDJ@gkCvhrwT&y$Q z5FFsq7Zz7uA@+|E3F*Y(T*ZMxFN$tf9GEkCqfTF1bhW>`flm|Ie?Sq&iL1J(AZ42> z3X$qad62wbEu*wH4;lXd0)B6M2KsVGQFO9&KhYEgbOzoZ@Qry1<|T62=o9az6SXkx zMLB-~YFXpI7B#oR|F5`afU3M|am@f#dDY^Y0jlz<1+U?g)%oeh740Lgr9f4FEY?)V z8C-b(zYd-PA2~=-=2Qp2=7U~{!LKhhXNu#BVp0w`*VB8d@>0(}0j?+qTqD7%ylQck b8vytZo4osx)&RAu00000NkvXXu0mjfHg_*9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/models/armor/scale_layer_1.png b/src/main/resources/assets/hexxit_gear/textures/models/armor/scale_layer_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5782669438e517530bbbceec13945d338e0a4650 GIT binary patch literal 5806 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hexxit_gear/textures/models/armor/scale_layer_2.png b/src/main/resources/assets/hexxit_gear/textures/models/armor/scale_layer_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5599548dc65f8ba969550ba92593668b9aaee5 GIT binary patch literal 3614 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 literal 0 HcmV?d00001