diff --git a/src/generated/resources/assets/malum/blockstates/block_of_malignant_alloy.json b/src/generated/resources/assets/malum/blockstates/block_of_malignant_alloy.json new file mode 100644 index 000000000..5d6fd8260 --- /dev/null +++ b/src/generated/resources/assets/malum/blockstates/block_of_malignant_alloy.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "malum:block/block_of_malignant_alloy" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/lang/en_us.json b/src/generated/resources/assets/malum/lang/en_us.json index 643458b7f..dbae58892 100644 --- a/src/generated/resources/assets/malum/lang/en_us.json +++ b/src/generated/resources/assets/malum/lang/en_us.json @@ -21,6 +21,7 @@ "block.malum.block_of_grim_talc": "Block of Grim Talc", "block.malum.block_of_hallowed_gold": "Block of Hallowed Gold", "block.malum.block_of_hex_ash": "Block of Hex Ash", + "block.malum.block_of_malignant_alloy": "Block of Malignant Alloy", "block.malum.block_of_mnemonic_fragment": "Block of Mnemonic Fragment", "block.malum.block_of_null_slate": "Block of Null Slate", "block.malum.block_of_raw_soulstone": "Block of Raw Soulstone", @@ -244,6 +245,7 @@ "effect.malum.anglers_lure": "Angler's Lure", "effect.malum.anglers_lure.description": "Let any fish who meets my gaze learn the true meaning of fear; for I am the harbinger of death. The bane of creatures sub-aqueous, my rod is true and unwavering as I cast into the aquatic abyss. A man, scorned by this uncaring Earth, finds solace in the sea. My only friend, the worm upon my hook. Wriggling, writhing, struggling to surmount the mortal pointlessness that permeates this barren world. I am alone. I am empty. And yet, I fish.", "effect.malum.cancerous_growth": "Cancerous Growth", + "effect.malum.deacons_fortune": "Deacon's Fortune", "effect.malum.earthen_might": "Earthen Might", "effect.malum.earthen_might.description": "Your fists and tools are reinforced with earth, increasing your overall damage.", "effect.malum.gaian_bulwark": "Gaian Bulwark", @@ -257,6 +259,7 @@ "effect.malum.poseidons_grasp": "Poseidon's Grasp", "effect.malum.poseidons_grasp.description": "You reach out for further power, increasing your reach and item pickup distance.", "effect.malum.rejected": "Rejected", + "effect.malum.silenced": "Silenced", "effect.malum.wicked_intent": "Wicked Intent", "effect.malum.zephyrs_courage": "Zephyr's Courage", "effect.malum.zephyrs_courage.description": "The zephyr propels you forward, increasing your movement speed.", @@ -268,6 +271,7 @@ "enchantment.malum.spirit_plunder": "Spirit Plunder", "enchantment.malum.spirit_plunder.desc": "Increases the amount of spirits created when shattering a soul.", "entity.malum.auric_flame_bolt": "Auric Flame Bolt", + "entity.malum.draining_bolt": "Draining Bolt", "entity.malum.etheric_nitrate": "Etheric Nitrate", "entity.malum.hex_bolt": "Hex Bolt", "entity.malum.natural_spirit": "Natural Spirit", @@ -366,7 +370,15 @@ "item.malum.lead_node": "Lead Node", "item.malum.lesbian_prideweave": "Lesbian Prideweave", "item.malum.living_flesh": "Living Flesh", + "item.malum.malignant_alloy_ingot": "Malignant Alloy Ingot", + "item.malum.malignant_alloy_nugget": "Malignant Alloy Nugget", + "item.malum.malignant_alloy_plating": "Malignant Alloy Plating", "item.malum.malignant_lead": "Malignant Lead", + "item.malum.malignant_scepter": "Malignant Scepter", + "item.malum.malignant_stronghold_boots": "Malignant Stronghold Boots", + "item.malum.malignant_stronghold_chestplate": "Malignant Stronghold Chestplate", + "item.malum.malignant_stronghold_helmet": "Malignant Stronghold Helmet", + "item.malum.malignant_stronghold_leggings": "Malignant Stronghold Leggings", "item.malum.mechanical_weave_v1": "Mechanical Weave V1", "item.malum.mechanical_weave_v2": "Mechanical Weave V2", "item.malum.mending_diffuser": "Mending Diffuser", @@ -1096,6 +1108,7 @@ "malum.subtitle.deepslate_soulstone_hit": "Block breaking", "malum.subtitle.deepslate_soulstone_place": "Block placed", "malum.subtitle.deepslate_soulstone_step": "Footsteps", + "malum.subtitle.draining_motif": "Draining motif", "malum.subtitle.ether_break": "Block broken", "malum.subtitle.ether_place": "Block placed", "malum.subtitle.flesh_ring_absorbs": "Flesh ring absorbs", @@ -1107,6 +1120,7 @@ "malum.subtitle.hidden_blade_strikes": "Hidden blade strikes", "malum.subtitle.hungry_belt_feeds": "Hungry belt feeds", "malum.subtitle.impetus_takes_damage": "Impetus takes damage", + "malum.subtitle.malignant_metal_resonates": "Malignant metal resonates", "malum.subtitle.metallic_trinket_equipped": "Metallic trinket equipped", "malum.subtitle.nitrate_thrown": "Nitrate thrown", "malum.subtitle.ornate_trinket_equipped": "Ornate trinket equipped", @@ -1178,6 +1192,7 @@ "malum.subtitle.void_transmutation": "Void transmutation", "malum.subtitle.void_trinket_equipped": "Void trinket equipped", "malum.subtitle.warping_engine_reverberates": "Warping engine reverberates", + "malum.subtitle.weight_of_worlds_slashes": "Weight of worlds slashes", "tetra.improvement.malum.soul_strike.description": "Allows your item to shatter souls.", "tetra.improvement.malum.soul_strike.name": "Soul Strike", "tetra.material.hallowed_gold": "Hallowed Gold", diff --git a/src/generated/resources/assets/malum/models/block/block_of_malignant_alloy.json b/src/generated/resources/assets/malum/models/block/block_of_malignant_alloy.json new file mode 100644 index 000000000..e35e56e4c --- /dev/null +++ b/src/generated/resources/assets/malum/models/block/block_of_malignant_alloy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "malum:block/storage_blocks/block_of_malignant_alloy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/block_of_malignant_alloy.json b/src/generated/resources/assets/malum/models/item/block_of_malignant_alloy.json new file mode 100644 index 000000000..df74a53c5 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/block_of_malignant_alloy.json @@ -0,0 +1,3 @@ +{ + "parent": "malum:block/block_of_malignant_alloy" +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_alloy_ingot.json b/src/generated/resources/assets/malum/models/item/malignant_alloy_ingot.json new file mode 100644 index 000000000..cb41b97ed --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_alloy_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/malignant_alloy_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_alloy_nugget.json b/src/generated/resources/assets/malum/models/item/malignant_alloy_nugget.json new file mode 100644 index 000000000..1ef06a101 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_alloy_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/malignant_alloy_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_alloy_plating.json b/src/generated/resources/assets/malum/models/item/malignant_alloy_plating.json new file mode 100644 index 000000000..f535ddd66 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_alloy_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/malignant_alloy_plating" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_scepter.json b/src/generated/resources/assets/malum/models/item/malignant_scepter.json new file mode 100644 index 000000000..6a10b85b8 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_scepter.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "malum:item/malignant_scepter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_stronghold_boots.json b/src/generated/resources/assets/malum/models/item/malignant_stronghold_boots.json new file mode 100644 index 000000000..7f3870b98 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_stronghold_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/malignant_stronghold_boots" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_stronghold_chestplate.json b/src/generated/resources/assets/malum/models/item/malignant_stronghold_chestplate.json new file mode 100644 index 000000000..a517369d7 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_stronghold_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/malignant_stronghold_chestplate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_stronghold_helmet.json b/src/generated/resources/assets/malum/models/item/malignant_stronghold_helmet.json new file mode 100644 index 000000000..58d3d3869 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_stronghold_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/malignant_stronghold_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/malignant_stronghold_leggings.json b/src/generated/resources/assets/malum/models/item/malignant_stronghold_leggings.json new file mode 100644 index 000000000..0087e1f4b --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/malignant_stronghold_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/malignant_stronghold_leggings" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/blocks/storage_blocks.json b/src/generated/resources/data/forge/tags/blocks/storage_blocks.json index 48640675d..749d5e437 100644 --- a/src/generated/resources/data/forge/tags/blocks/storage_blocks.json +++ b/src/generated/resources/data/forge/tags/blocks/storage_blocks.json @@ -1,5 +1,6 @@ { "values": [ + "malum:block_of_malignant_alloy", "malum:block_of_grim_talc", "malum:block_of_astral_weave", "malum:block_of_mnemonic_fragment", diff --git a/src/generated/resources/data/forge/tags/items/storage_blocks.json b/src/generated/resources/data/forge/tags/items/storage_blocks.json index 48640675d..749d5e437 100644 --- a/src/generated/resources/data/forge/tags/items/storage_blocks.json +++ b/src/generated/resources/data/forge/tags/items/storage_blocks.json @@ -1,5 +1,6 @@ { "values": [ + "malum:block_of_malignant_alloy", "malum:block_of_grim_talc", "malum:block_of_astral_weave", "malum:block_of_mnemonic_fragment", diff --git a/src/generated/resources/data/malum/advancements/recipes/misc/block_of_malignant_alloy.json b/src/generated/resources/data/malum/advancements/recipes/misc/block_of_malignant_alloy.json new file mode 100644 index 000000000..7063278c5 --- /dev/null +++ b/src/generated/resources/data/malum/advancements/recipes/misc/block_of_malignant_alloy.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_malignant_alloy": { + "conditions": { + "items": [ + { + "items": [ + "malum:malignant_alloy_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "malum:block_of_malignant_alloy" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_malignant_alloy", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "malum:block_of_malignant_alloy" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_from_block.json b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_from_block.json new file mode 100644 index 000000000..4fcf7a38a --- /dev/null +++ b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_from_block.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_malignant_alloy": { + "conditions": { + "items": [ + { + "items": [ + "malum:malignant_alloy_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "malum:malignant_alloy_from_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_malignant_alloy", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "malum:malignant_alloy_from_block" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_from_nuggets.json b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_from_nuggets.json new file mode 100644 index 000000000..7c0ee033a --- /dev/null +++ b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_from_nuggets.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_malignant_alloy": { + "conditions": { + "items": [ + { + "items": [ + "malum:malignant_alloy_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "malum:malignant_alloy_from_nuggets" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_malignant_alloy", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "malum:malignant_alloy_from_nuggets" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_nugget.json b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_nugget.json new file mode 100644 index 000000000..97ecf3142 --- /dev/null +++ b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_nugget.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_malignant_alloy": { + "conditions": { + "items": [ + { + "items": [ + "malum:malignant_alloy_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "malum:malignant_alloy_nugget" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_malignant_alloy", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "malum:malignant_alloy_nugget" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_plating.json b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_plating.json new file mode 100644 index 000000000..45c8e2f67 --- /dev/null +++ b/src/generated/resources/data/malum/advancements/recipes/misc/malignant_alloy_plating.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_malignant_alloy": { + "conditions": { + "items": [ + { + "items": [ + "malum:malignant_alloy_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "malum:malignant_alloy_plating" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_malignant_alloy", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "malum:malignant_alloy_plating" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/loot_tables/blocks/block_of_malignant_alloy.json b/src/generated/resources/data/malum/loot_tables/blocks/block_of_malignant_alloy.json new file mode 100644 index 000000000..16485d3a3 --- /dev/null +++ b/src/generated/resources/data/malum/loot_tables/blocks/block_of_malignant_alloy.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "malum:block_of_malignant_alloy" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "malum:blocks/block_of_malignant_alloy" +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/block_of_malignant_alloy.json b/src/generated/resources/data/malum/recipes/block_of_malignant_alloy.json new file mode 100644 index 000000000..cce3901a5 --- /dev/null +++ b/src/generated/resources/data/malum/recipes/block_of_malignant_alloy.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "malum:malignant_alloy_ingot" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "item": "malum:block_of_malignant_alloy" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/malignant_alloy_from_block.json b/src/generated/resources/data/malum/recipes/malignant_alloy_from_block.json new file mode 100644 index 000000000..32102f675 --- /dev/null +++ b/src/generated/resources/data/malum/recipes/malignant_alloy_from_block.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "malum:block_of_malignant_alloy" + } + ], + "result": { + "count": 9, + "item": "malum:malignant_alloy_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/malignant_alloy_from_nuggets.json b/src/generated/resources/data/malum/recipes/malignant_alloy_from_nuggets.json new file mode 100644 index 000000000..c85c33fe2 --- /dev/null +++ b/src/generated/resources/data/malum/recipes/malignant_alloy_from_nuggets.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "malum:malignant_alloy_nugget" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "item": "malum:malignant_alloy_ingot" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/malignant_alloy_nugget.json b/src/generated/resources/data/malum/recipes/malignant_alloy_nugget.json new file mode 100644 index 000000000..e62725db5 --- /dev/null +++ b/src/generated/resources/data/malum/recipes/malignant_alloy_nugget.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "malum:malignant_alloy_ingot" + } + ], + "result": { + "count": 9, + "item": "malum:malignant_alloy_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/malignant_alloy_plating.json b/src/generated/resources/data/malum/recipes/malignant_alloy_plating.json new file mode 100644 index 000000000..69e71a545 --- /dev/null +++ b/src/generated/resources/data/malum/recipes/malignant_alloy_plating.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "X": { + "item": "malum:malignant_alloy_ingot" + }, + "Y": { + "item": "malum:malignant_alloy_nugget" + } + }, + "pattern": [ + " Y ", + "YXY", + " Y " + ], + "result": { + "count": 2, + "item": "malum:malignant_alloy_plating" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_alloy_ingot.json b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_alloy_ingot.json new file mode 100644 index 000000000..7362d7283 --- /dev/null +++ b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_alloy_ingot.json @@ -0,0 +1,30 @@ +{ + "type": "malum:spirit_infusion", + "extra_items": [ + { + "count": 2, + "item": "malum:malignant_lead" + }, + { + "count": 3, + "item": "minecraft:netherite_scrap" + } + ], + "input": { + "count": 4, + "tag": "forge:ingots/iron" + }, + "output": { + "item": "malum:malignant_alloy_ingot" + }, + "spirits": [ + { + "type": "earthen", + "count": 16 + }, + { + "type": "eldritch", + "count": 4 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_scepter.json b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_scepter.json new file mode 100644 index 000000000..a110a6eda --- /dev/null +++ b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_scepter.json @@ -0,0 +1,34 @@ +{ + "type": "malum:spirit_infusion", + "extra_items": [ + { + "count": 2, + "item": "malum:malignant_alloy_ingot" + }, + { + "count": 8, + "item": "malum:void_salts" + } + ], + "input": { + "count": 1, + "item": "malum:mnemonic_hex_staff" + }, + "output": { + "item": "malum:malignant_scepter" + }, + "spirits": [ + { + "type": "aqueous", + "count": 32 + }, + { + "type": "wicked", + "count": 32 + }, + { + "type": "eldritch", + "count": 16 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_boots.json b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_boots.json new file mode 100644 index 000000000..9f703d943 --- /dev/null +++ b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_boots.json @@ -0,0 +1,34 @@ +{ + "type": "malum:spirit_infusion", + "extra_items": [ + { + "count": 3, + "item": "malum:malignant_alloy_plating" + }, + { + "count": 8, + "item": "malum:mnemonic_fragment" + } + ], + "input": { + "count": 1, + "item": "minecraft:iron_boots" + }, + "output": { + "item": "malum:malignant_stronghold_boots" + }, + "spirits": [ + { + "type": "earthen", + "count": 32 + }, + { + "type": "wicked", + "count": 32 + }, + { + "type": "eldritch", + "count": 16 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_chestplate.json b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_chestplate.json new file mode 100644 index 000000000..749497f1b --- /dev/null +++ b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_chestplate.json @@ -0,0 +1,34 @@ +{ + "type": "malum:spirit_infusion", + "extra_items": [ + { + "count": 3, + "item": "malum:malignant_alloy_plating" + }, + { + "count": 8, + "item": "malum:mnemonic_fragment" + } + ], + "input": { + "count": 1, + "item": "minecraft:iron_chestplate" + }, + "output": { + "item": "malum:malignant_stronghold_chestplate" + }, + "spirits": [ + { + "type": "earthen", + "count": 32 + }, + { + "type": "wicked", + "count": 32 + }, + { + "type": "eldritch", + "count": 16 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_helmet.json b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_helmet.json new file mode 100644 index 000000000..8dee1e7ab --- /dev/null +++ b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_helmet.json @@ -0,0 +1,34 @@ +{ + "type": "malum:spirit_infusion", + "extra_items": [ + { + "count": 3, + "item": "malum:malignant_alloy_plating" + }, + { + "count": 8, + "item": "malum:mnemonic_fragment" + } + ], + "input": { + "count": 1, + "item": "minecraft:iron_helmet" + }, + "output": { + "item": "malum:malignant_stronghold_helmet" + }, + "spirits": [ + { + "type": "earthen", + "count": 32 + }, + { + "type": "wicked", + "count": 32 + }, + { + "type": "eldritch", + "count": 16 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_leggings.json b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_leggings.json new file mode 100644 index 000000000..691721b4f --- /dev/null +++ b/src/generated/resources/data/malum/recipes/spirit_infusion/malignant_stronghold_leggings.json @@ -0,0 +1,34 @@ +{ + "type": "malum:spirit_infusion", + "extra_items": [ + { + "count": 3, + "item": "malum:malignant_alloy_plating" + }, + { + "count": 8, + "item": "malum:mnemonic_fragment" + } + ], + "input": { + "count": 1, + "item": "minecraft:iron_leggings" + }, + "output": { + "item": "malum:malignant_stronghold_leggings" + }, + "spirits": [ + { + "type": "earthen", + "count": 32 + }, + { + "type": "wicked", + "count": 32 + }, + { + "type": "eldritch", + "count": 16 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipes/spirit_infusion/weight_of_worlds.json b/src/generated/resources/data/malum/recipes/spirit_infusion/weight_of_worlds.json new file mode 100644 index 000000000..0f18e43df --- /dev/null +++ b/src/generated/resources/data/malum/recipes/spirit_infusion/weight_of_worlds.json @@ -0,0 +1,30 @@ +{ + "type": "malum:spirit_infusion", + "extra_items": [ + { + "count": 2, + "item": "malum:malignant_alloy_ingot" + } + ], + "input": { + "count": 1, + "item": "minecraft:iron_axe" + }, + "output": { + "item": "malum:weight_of_worlds" + }, + "spirits": [ + { + "type": "earthen", + "count": 32 + }, + { + "type": "wicked", + "count": 32 + }, + { + "type": "eldritch", + "count": 16 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/tags/items/soul_hunter_weapon.json b/src/generated/resources/data/malum/tags/items/soul_hunter_weapon.json index 8422bd7c8..b55d34570 100644 --- a/src/generated/resources/data/malum/tags/items/soul_hunter_weapon.json +++ b/src/generated/resources/data/malum/tags/items/soul_hunter_weapon.json @@ -2,10 +2,12 @@ "values": [ "malum:mnemonic_hex_staff", "malum:staff_of_the_auric_flame", + "malum:malignant_scepter", "malum:tyrving", "malum:crude_scythe", "malum:soul_stained_steel_scythe", "malum:creative_scythe", + "malum:weight_of_worlds", "malum:soul_stained_steel_axe", "malum:soul_stained_steel_pickaxe", "malum:soul_stained_steel_shovel", diff --git a/src/generated/resources/data/malum/tags/items/staff.json b/src/generated/resources/data/malum/tags/items/staff.json index a9293852d..4e3c47c0b 100644 --- a/src/generated/resources/data/malum/tags/items/staff.json +++ b/src/generated/resources/data/malum/tags/items/staff.json @@ -1,6 +1,7 @@ { "values": [ "malum:mnemonic_hex_staff", - "malum:staff_of_the_auric_flame" + "malum:staff_of_the_auric_flame", + "malum:malignant_scepter" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json index b6b3b443e..c823986c3 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json +++ b/src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json @@ -1,5 +1,6 @@ { "values": [ + "malum:block_of_malignant_alloy", "malum:block_of_mnemonic_fragment", "malum:block_of_cthonic_gold", "malum:block_of_blazing_quartz", diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 70727e673..1d41246ff 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -6,6 +6,7 @@ "malum:tainted_rock_tiles_wall", "malum:twisted_rock_pressure_plate", "malum:small_tainted_rock_bricks_stairs", + "malum:block_of_malignant_alloy", "malum:twisted_rock_bricks_stairs", "malum:block_of_grim_talc", "malum:spirit_crucible_component", diff --git a/src/main/java/com/sammy/malum/MalumMod.java b/src/main/java/com/sammy/malum/MalumMod.java index 56a203f8a..3bed9ee89 100644 --- a/src/main/java/com/sammy/malum/MalumMod.java +++ b/src/main/java/com/sammy/malum/MalumMod.java @@ -68,4 +68,6 @@ public MalumMod() { public static ResourceLocation malumPath(String path) { return new ResourceLocation(MALUM, path); } + + } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/MalignantLeadArmorModel.java b/src/main/java/com/sammy/malum/client/model/MalignantLeadArmorModel.java index 6e8a0c992..9828446c6 100644 --- a/src/main/java/com/sammy/malum/client/model/MalignantLeadArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/MalignantLeadArmorModel.java @@ -4,6 +4,7 @@ // Paste this class into your mod and generate all required imports +import com.google.common.collect.*; import com.mojang.blaze3d.vertex.*; import com.sammy.malum.*; import com.sammy.malum.registry.client.*; @@ -13,53 +14,90 @@ import net.minecraft.client.model.geom.builders.*; import net.minecraft.resources.*; import net.minecraft.world.entity.*; +import net.minecraft.world.phys.*; import team.lodestar.lodestone.handlers.*; import team.lodestar.lodestone.helpers.*; import team.lodestar.lodestone.registry.client.*; import team.lodestar.lodestone.systems.model.*; +import java.util.*; + public class MalignantLeadArmorModel extends LodestoneArmorModel { public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("malignant_lead_armor"), "main"); + private final ModelPart right_arm_glow; private final ModelPart left_arm_glow; + private final ModelPart right_boot_glow; + private final ModelPart left_boot_glow; + private final ModelPart helmet_glow; + private final ModelPart torso_glow; public MalignantLeadArmorModel(ModelPart root) { super(root); this.right_arm_glow = root.getChild("right_arm_glow"); this.left_arm_glow = root.getChild("left_arm_glow"); + this.right_boot_glow = root.getChild("right_boot_glow"); + this.left_boot_glow = root.getChild("left_boot_glow"); + this.helmet_glow = root.getChild("helmet_glow"); + this.torso_glow = root.getChild("torso_glow"); + } + + protected List getGlowingParts() { + if (this.slot == EquipmentSlot.CHEST) { + return ImmutableList.of(torso_glow, left_arm_glow, right_arm_glow); + } else if (this.slot == EquipmentSlot.HEAD) { + return ImmutableList.of(helmet_glow); + } else { + return this.slot == EquipmentSlot.FEET ? ImmutableList.of(left_boot_glow, right_boot_glow) : ImmutableList.of(); + } } + private final ResourceLocation texture = MalumMod.malumPath("textures/armor/malignant_stronghold.png"); + @Override public void renderToBuffer(PoseStack pPoseStack, VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, float pRed, float pGreen, float pBlue, float pAlpha) { super.renderToBuffer(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); if (!this.young) { - if (slot == EquipmentSlot.CHEST) { - pPoseStack.pushPose(); - final ResourceLocation texture = MalumMod.malumPath("textures/armor/malignant_stronghold.png"); - final VertexConsumer additive = RenderHandler.DELAYED_RENDER.getBuffer(RenderTypeRegistry.MALIGNANT_GLOW.applyAndCache(texture)); - final VertexConsumer transparent = RenderHandler.DELAYED_RENDER.getBuffer(LodestoneRenderTypeRegistry.TRANSPARENT_TEXTURE.applyAndCache(texture)); - - right_arm_glow.render(pPoseStack, transparent, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, 0.25f); - left_arm_glow.render(pPoseStack, transparent, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, 0.25f); - - float gameTime = Minecraft.getInstance().level.getGameTime()+Minecraft.getInstance().getPartialTick(); - int time = 160; - float distance = 0.01f; - float alpha = 0.15f; - for (int i = 0; i < 4; i++) { - double angle = i / 4f * (Math.PI * 2); - angle += ((gameTime % time) / time) * (Math.PI * 2); - double xOffset = (distance * Math.cos(angle)); - double zOffset = (distance * Math.sin(angle)); - pPoseStack.translate(xOffset, zOffset / 2f, zOffset); - right_arm_glow.render(pPoseStack, additive, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, alpha); - left_arm_glow.render(pPoseStack, additive, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, alpha); - pPoseStack.translate(-xOffset, -zOffset/2f, -zOffset); - distance+=0.0125f; + final List glowingParts = getGlowingParts(); + if (glowingParts.isEmpty()) { + return; + } + pPoseStack.pushPose(); + final VertexConsumer transparent = RenderHandler.DELAYED_RENDER.getBuffer(LodestoneRenderTypeRegistry.TRANSPARENT_TEXTURE.applyAndCache(texture)); + for (ModelPart glowingPart : glowingParts) { + glowingPart.render(pPoseStack, transparent, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, 0.5f); + } + final VertexConsumer additive = RenderHandler.DELAYED_RENDER.getBuffer(RenderTypeRegistry.MALIGNANT_GLOW.applyAndCache(texture)); + float gameTime = Minecraft.getInstance().level.getGameTime() + Minecraft.getInstance().getPartialTick(); + int time = 320; + float distance = 0.08f; + float alpha = 0.2f; + for (int i = 0; i < 8; i++) { + double angle = i / 4f * (Math.PI * 2); + angle += ((gameTime % time) / time) * (Math.PI * 2); + for (ModelPart glowingPart : glowingParts) { + float yaw = glowingPart.yRot; + float pitch = -glowingPart.xRot; + if (glowingPart.equals(helmet_glow)) { + yaw += 1.57f; + } + Vec3 forward = new Vec3(-Math.cos(yaw), 0, Math.sin(yaw)); + if (!glowingPart.equals(helmet_glow)) { + Vec3 direction = new Vec3(Math.cos(yaw) * Math.cos(pitch), Math.sin(yaw) * Math.cos(pitch), Math.sin(pitch)); + forward = forward.cross(direction).add(0, 1, 0); + } + Vec3 offset = forward.xRot(pitch).normalize().scale(distance * Math.sin(angle)); + pPoseStack.translate(offset.x, offset.y, offset.z); + glowingPart.render(pPoseStack, additive, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, alpha); + pPoseStack.translate(-offset.x, -offset.y, -offset.z); + } + if (i == 3) { + distance *= 2.5f; + alpha *= 0.35f; } - pPoseStack.popPose(); } + pPoseStack.popPose(); } } @@ -67,8 +105,12 @@ public void renderToBuffer(PoseStack pPoseStack, VertexConsumer pBuffer, int pPa @Override public void copyFromDefault(HumanoidModel model) { super.copyFromDefault(model); - right_arm_glow.copyFrom(model.rightArm); left_arm_glow.copyFrom(model.leftArm); + right_arm_glow.copyFrom(model.rightArm); + left_boot_glow.copyFrom(model.leftLeg); + right_boot_glow.copyFrom(model.rightLeg); + helmet_glow.copyFrom(model.head); + torso_glow.copyFrom(model.body); } @@ -77,61 +119,115 @@ public static LayerDefinition createBodyLayer() { PartDefinition root = createHumanoidAlias(mesh); PartDefinition right_arm_glow = root.addOrReplaceChild("right_arm_glow", new CubeListBuilder(), PartPose.ZERO); PartDefinition left_arm_glow = root.addOrReplaceChild("left_arm_glow", new CubeListBuilder(), PartPose.ZERO); + PartDefinition right_foot_glow = root.addOrReplaceChild("right_boot_glow", new CubeListBuilder(), PartPose.ZERO); + PartDefinition left_foot_glow = root.addOrReplaceChild("left_boot_glow", new CubeListBuilder(), PartPose.ZERO); + PartDefinition helmet_glow = root.addOrReplaceChild("helmet_glow", new CubeListBuilder(), PartPose.ZERO); + PartDefinition torso_glow = root.addOrReplaceChild("torso_glow", new CubeListBuilder(), PartPose.ZERO); PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(6, 37).addBox(-5.0F, 2.0F, -3.0F, 10.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(6, 49).addBox(-4.5F, 6.5F, -2.5F, 9.0F, 4.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition thing = torso.addOrReplaceChild("thing", CubeListBuilder.create().texOffs(60, 40).addBox(-6.0F, -1.0F, -5.0F, 12.0F, 4.0F, 9.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.2618F, 0.0F, 0.0F)); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 69).addBox(-5.0F, 2.0F, -3.0F, 10.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(0, 80).addBox(-4.5F, 6.5F, -2.5F, 9.0F, 4.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition thing = torso.addOrReplaceChild("thing", CubeListBuilder.create().texOffs(0, 56).addBox(-6.0F, -1.0F, -5.0F, 12.0F, 4.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(42, 56).addBox(-6.0F, -1.0F, -5.0F, 12.0F, 4.0F, 9.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.2618F, 0.0F, 0.0F)); + + PartDefinition back_glow = torso_glow.addOrReplaceChild("back_glow", CubeListBuilder.create().texOffs(95, 4).addBox(-1.5F, 3.5F, 2.0F, 3.0F, 3.0F, 2.0F, new CubeDeformation(-0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition front_glow = torso_glow.addOrReplaceChild("front_glow", CubeListBuilder.create().texOffs(105, 4).addBox(-1.5F, 1.5F, -5.75F, 3.0F, 3.0F, 2.0F, new CubeDeformation(-0.25F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.2618F, 0.0F, 0.0F)); PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(6, 61).addBox(-4.0F, -14.5F, -3.0F, 8.0F, 2.0F, 6.0F, new CubeDeformation(0.01F)) - .texOffs(42, 58).addBox(-2.0F, -12.5F, -3.0F, 4.0F, 3.0F, 6.0F, new CubeDeformation(0.01F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(32, 72).addBox(-4.0F, -14.5F, -3.0F, 8.0F, 2.0F, 6.0F, new CubeDeformation(0.04F)) + .texOffs(60, 72).addBox(-4.0F, -14.5F, -3.0F, 8.0F, 2.0F, 6.0F, new CubeDeformation(0.29F)) + .texOffs(28, 80).addBox(-2.0F, -12.5F, -3.0F, 4.0F, 3.0F, 6.0F, new CubeDeformation(0.04F)) + .texOffs(48, 80).addBox(-2.0F, -12.5F, -3.0F, 4.0F, 3.0F, 6.0F, new CubeDeformation(0.29F)), PartPose.offset(0.0F, 24.0F, 0.0F)); PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(53, 88).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(-2.0F, 12.0F, 0.0F)); - PartDefinition right_thigh_guard = right_leg.addOrReplaceChild("right_thigh_guard", CubeListBuilder.create().texOffs(19, 108).addBox(-4.0F, -2.0F, -3.0F, 3.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 2.0F, 0.0F, 0.0F, 0.0F, 1.1345F)); - PartDefinition right_thigh_guard2 = right_leg.addOrReplaceChild("right_thigh_guard2", CubeListBuilder.create().texOffs(40, 109).addBox(-3.0F, -3.0F, -3.0F, 3.0F, 7.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.0F, 4.0F, 0.0F, 0.0F, 0.0F, 1.1345F)); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(84, 116).addBox(-2.6F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0f, 0f, 0.0F)); + + PartDefinition right_thigh_guard1 = right_leg.addOrReplaceChild("right_thigh_guard1", CubeListBuilder.create().texOffs(48, 117).addBox(-4.3934F, -1.1278F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.03F)) + .texOffs(48, 106).addBox(-4.3934F, -1.1278F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.28F)), PartPose.offsetAndRotation(-0.1F, 2.0F, 0.0F, 0.0F, 0.0F, 1.1345F)); + + PartDefinition right_thigh_guard2 = right_leg.addOrReplaceChild("right_thigh_guard2", CubeListBuilder.create().texOffs(66, 115).addBox(-2.7734F, -2.8943F, -3.0F, 3.0F, 7.0F, 6.0F, new CubeDeformation(0.02F)) + .texOffs(66, 102).addBox(-2.7734F, -2.8943F, -3.0F, 3.0F, 7.0F, 6.0F, new CubeDeformation(0.27F)), PartPose.offsetAndRotation(-1.1F, 4.0F, 0.0F, 0.0F, 0.0F, 1.1345F)); + + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(84, 116).mirror().addBox(-2.4F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0f, 0f, 0.0F)); + + PartDefinition left_thigh_guard1 = left_leg.addOrReplaceChild("left_thigh_guard1", CubeListBuilder.create().texOffs(48, 117).mirror().addBox(1.3934F, -1.1278F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.03F)).mirror(false) + .texOffs(48, 106).mirror().addBox(1.3934F, -1.1278F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.28F)).mirror(false), PartPose.offsetAndRotation(0.1F, 2.0F, 0.0F, 0.0F, 0.0F, -1.1345F)); + + PartDefinition left_thigh_guard2 = left_leg.addOrReplaceChild("left_thigh_guard2", CubeListBuilder.create().texOffs(66, 115).mirror().addBox(-0.2266F, -2.8943F, -3.0F, 3.0F, 7.0F, 6.0F, new CubeDeformation(0.02F)).mirror(false) + .texOffs(66, 102).mirror().addBox(-0.2266F, -2.8943F, -3.0F, 3.0F, 7.0F, 6.0F, new CubeDeformation(0.27F)).mirror(false), PartPose.offsetAndRotation(1.1F, 4.0F, 0.0F, 0.0F, 0.0F, -1.1345F)); PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(63, 107).mirror().addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(104, 115).mirror().addBox(-3.1F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(104, 102).mirror().addBox(-3.1F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0f, 0f, 0.0F)); + + PartDefinition right_boot_glow = right_foot_glow.addOrReplaceChild("right_boot_glow", CubeListBuilder.create().texOffs(106, 14).mirror().addBox(-4.6F, 6.5F, -1.5F, 2.0F, 4.0F, 3.0F, new CubeDeformation(-0.25F)).mirror(false), PartPose.offset(0f, 0f, 0.0F)); + + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(104, 115).addBox(-2.9F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.01F)) + .texOffs(104, 102).addBox(-2.9F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.26F)), PartPose.offset(0f, 0f, 0.0F)); + + PartDefinition left_boot_glow = left_foot_glow.addOrReplaceChild("left_boot_glow", CubeListBuilder.create().texOffs(106, 14).addBox(2.6F, 6.5F, -1.5F, 2.0F, 4.0F, 3.0F, new CubeDeformation(-0.24F)), PartPose.offset(0f, 0f, 0.0F)); PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(36, 75).mirror().addBox(-7.0F, -4.0F, -3.0F, 5.0F, 5.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(7, 88).mirror().addBox(-5.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.02F)).mirror(false), PartPose.offset(-3.0F, 2.0F, 0.0F)); - PartDefinition right_shoulder_pad = right_shoulder.addOrReplaceChild("right_shoulder_pad", CubeListBuilder.create().texOffs(4, 73).mirror().addBox(-8.0F, 0.0F, -4.0F, 6.0F, 3.0F, 8.0F, new CubeDeformation(0.01F)).mirror(false), PartPose.offsetAndRotation(0.0F, -1.5F, 0.0F, 0.0F, 0.0F, -0.2182F)); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 89).mirror().addBox(-5.0F, -2.5F, -3.0F, 5.0F, 5.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(22, 89).mirror().addBox(-5.0F, -2.5F, -3.0F, 5.0F, 5.0F, 6.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(0, 111).mirror().addBox(-3.5F, 7.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(22, 111).mirror().addBox(-3.5F, 7.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(0, 0.0F, 0.0F)); - PartDefinition glow_right_arm = right_arm_glow.addOrReplaceChild("glow_right_arm", CubeListBuilder.create().texOffs(100, 88).mirror().addBox(-9.0F, -6.0F, -1.0F, 3.0F, 8.0F, 2.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(89, 88).mirror().addBox(-9.0F, -6.0F, -1.0F, 3.0F, 8.0F, 2.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offsetAndRotation(0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.1309F)); - PartDefinition lower_glow_right_arm = right_arm_glow.addOrReplaceChild("lower_glow_right_arm", CubeListBuilder.create().texOffs(89, 77).mirror().addBox(-6.5F, 4.0F, -1.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.27F)).mirror(false) - .texOffs(100, 77).mirror().addBox(-6.5F, 4.0F, -1.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.02F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_shoulder_pad = right_shoulder.addOrReplaceChild("right_shoulder_pad", CubeListBuilder.create().texOffs(0, 100).mirror().addBox(-7.6753F, -1.4644F, -4.0F, 6.0F, 3.0F, 8.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(28, 100).mirror().addBox(-7.6753F, -1.4644F, -4.0F, 6.0F, 3.0F, 8.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offsetAndRotation(2.0F, 2.0F, 0.0F, 0.0F, 0.0F, -0.2182F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(53, 88).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(2.0F, 12.0F, 0.0F)); - PartDefinition thigh_guard_l = left_leg.addOrReplaceChild("left_thigh_guard1", CubeListBuilder.create().texOffs(19, 108).mirror().addBox(1.0F, -2.0F, -3.0F, 3.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(0.0F, 2.0F, 0.0F, 0.0F, 0.0F, -1.1345F)); - PartDefinition thigh_guard_l2 = left_leg.addOrReplaceChild("left_thigh_guard2", CubeListBuilder.create().texOffs(40, 109).mirror().addBox(0.0F, -3.0F, -3.0F, 3.0F, 7.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(1.0F, 4.0F, 0.0F, 0.0F, 0.0F, -1.1345F)); + PartDefinition right_shoulder_glow = right_arm_glow.addOrReplaceChild("right_shoulder_glow", CubeListBuilder.create(), PartPose.offset(0, 0.0F, 0.0F)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(63, 107).addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.01F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_shoulder_upper_glow = right_shoulder_glow.addOrReplaceChild("right_shoulder_upper_glow", CubeListBuilder.create().texOffs(116, 22).mirror().addBox(-9.0F, -5.75F, -1.5F, 3.0F, 8.0F, 3.0F, new CubeDeformation(-0.24F)).mirror(false) + .texOffs(89, 5).mirror().addBox(-6.0F, -3.25F, -3.75F, 2.0F, 3.0F, 1.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(89, 5).mirror().addBox(-6.0F, -3.25F, 2.75F, 2.0F, 3.0F, 1.0F, new CubeDeformation(0.01F)).mirror(false), PartPose.offsetAndRotation(2.0F, 3.0F, 0.0F, 0.0F, 0.0F, 0.1309F)); + + PartDefinition right_shoulder_lower_glow = right_shoulder_glow.addOrReplaceChild("right_shoulder_lower_glow", CubeListBuilder.create().texOffs(116, 14).mirror().addBox(-6.5F, 4.0F, -1.5F, 3.0F, 5.0F, 3.0F, new CubeDeformation(-0.23F)).mirror(false), PartPose.offset(2.0F, 2.0F, 0.0F)); PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(36, 75).addBox(2.0F, -4.0F, -3.0F, 5.0F, 5.0F, 6.0F, new CubeDeformation(0.01F)) - .texOffs(7, 88).addBox(0.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.02F)), PartPose.offset(3.0F, 2.0F, 0.0F)); - PartDefinition left_shoulder_pad = left_shoulder.addOrReplaceChild("left_shoulder_pad", CubeListBuilder.create().texOffs(4, 73).addBox(2.0F, -1.0F, -4.0F, 6.0F, 3.0F, 8.0F, new CubeDeformation(0.01F)), PartPose.offsetAndRotation(0.0F, -0.5F, 0.0F, 0.0F, 0.0F, 0.2182F)); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(0, 89).addBox(0.0F, -2.5F, -3.0F, 5.0F, 5.0F, 6.0F, new CubeDeformation(0.01F)) + .texOffs(22, 89).addBox(0.0F, -2.5F, -3.0F, 5.0F, 5.0F, 6.0F, new CubeDeformation(0.26F)) + .texOffs(0, 111).addBox(-1.5F, 7.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)) + .texOffs(22, 111).addBox(-1.5F, 7.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)), PartPose.offset(0f, 0.0F, 0.0F)); + + PartDefinition left_shoulder_pad = left_shoulder.addOrReplaceChild("left_shoulder_pad", CubeListBuilder.create().texOffs(0, 100).addBox(1.8918F, -1.4881F, -4.0F, 6.0F, 3.0F, 8.0F, new CubeDeformation(0.01F)) + .texOffs(28, 100).addBox(1.8918F, -1.4881F, -4.0F, 6.0F, 3.0F, 8.0F, new CubeDeformation(0.26F)), PartPose.offsetAndRotation(-2.0F, 2.0F, 0.0F, 0.0F, 0.0F, 0.2182F)); - PartDefinition glow_left_arm = left_arm_glow.addOrReplaceChild("glow_left_arm", CubeListBuilder.create().texOffs(100, 88).addBox(6.0F, -5.0F, -1.0F, 3.0F, 8.0F, 2.0F, new CubeDeformation(0.01F)) - .texOffs(89, 88).addBox(6.0F, -5.0F, -1.0F, 3.0F, 8.0F, 2.0F, new CubeDeformation(0.26F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, -0.1309F)); - PartDefinition lower_glow_left_arm = left_arm_glow.addOrReplaceChild("lower_glow_left_arm", CubeListBuilder.create().texOffs(100, 77).addBox(3.5F, 4.0F, -1.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.02F)) - .texOffs(89, 77).addBox(3.5F, 4.0F, -1.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.27F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_shoulder_glow = left_arm_glow.addOrReplaceChild("left_shoulder_glow", CubeListBuilder.create(), PartPose.offset(0f, 0.0F, 0.0F)); + + PartDefinition left_shoulder_upper_glow = left_shoulder_glow.addOrReplaceChild("left_shoulder_upper_glow", CubeListBuilder.create().texOffs(116, 22).addBox(6.0F, -4.75F, -1.5F, 3.0F, 8.0F, 3.0F, new CubeDeformation(-0.24F)) + .texOffs(89, 5).addBox(4.0F, -2.25F, -3.75F, 2.0F, 3.0F, 1.0F, new CubeDeformation(0.01F)) + .texOffs(89, 5).addBox(4.0F, -2.25F, 2.75F, 2.0F, 3.0F, 1.0F, new CubeDeformation(0.01F)), PartPose.offsetAndRotation(-2.0F, 2.0F, 0.0F, 0.0F, 0.0F, -0.1309F)); + + PartDefinition left_shoulder_lower_glow = left_shoulder_glow.addOrReplaceChild("left_shoulder_lower_glow", CubeListBuilder.create().texOffs(116, 14).addBox(3.5F, 4.0F, -1.5F, 3.0F, 5.0F, 3.0F, new CubeDeformation(-0.23F)), PartPose.offset(-2.0F, 2.0F, 0.0F)); PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(59, 3).addBox(-4.5F, -9.0F, -5.0F, 3.0F, 4.0F, 10.0F, new CubeDeformation(0.0F)) - .texOffs(8, 0).addBox(-4.5F, -5.0F, 1.0F, 9.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(59, 3).mirror().addBox(1.5F, -9.0F, -5.0F, 3.0F, 4.0F, 10.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(0, 16).addBox(-1.5F, -11.0F, -6.0F, 3.0F, 7.0F, 12.0F, new CubeDeformation(0.0F)) - .texOffs(40, 25).addBox(-5.5F, -12.0F, -3.0F, 2.0F, 7.0F, 9.0F, new CubeDeformation(0.0F)) - .texOffs(40, 25).addBox(3.5F, -12.0F, -3.0F, 2.0F, 7.0F, 9.0F, new CubeDeformation(0.0F)) - .texOffs(40, 16).addBox(-5.0F, -5.0F, -5.0F, 3.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(40, 16).mirror().addBox(2.0F, -5.0F, -5.0F, 3.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 34).addBox(-4.5F, -9.0F, -5.0F, 3.0F, 3.0F, 10.0F, new CubeDeformation(0.0F)) + .texOffs(26, 34).addBox(-4.5F, -9.0F, -5.0F, 3.0F, 3.0F, 10.0F, new CubeDeformation(0.25F)) + .texOffs(0, 47).addBox(-4.5F, -6.0F, 1.0F, 9.0F, 5.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(26, 47).addBox(-4.5F, -6.0F, 1.0F, 9.0F, 5.0F, 4.0F, new CubeDeformation(0.25F)) + .texOffs(0, 34).mirror().addBox(1.5F, -9.0F, -5.0F, 3.0F, 3.0F, 10.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(26, 34).mirror().addBox(1.5F, -9.0F, -5.0F, 3.0F, 3.0F, 10.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(0, 0).addBox(-1.5F, -11.0F, -6.0F, 3.0F, 6.0F, 12.0F, new CubeDeformation(0.0F)) + .texOffs(30, 0).addBox(-1.5F, -11.0F, -6.0F, 3.0F, 6.0F, 12.0F, new CubeDeformation(0.25F)) + .texOffs(0, 18).addBox(-5.5F, -12.0F, -3.0F, 2.0F, 7.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(0, 18).mirror().addBox(3.5F, -12.0F, -3.0F, 2.0F, 7.0F, 9.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(22, 18).addBox(-5.5F, -12.0F, -3.0F, 2.0F, 7.0F, 9.0F, new CubeDeformation(0.25F)) + .texOffs(22, 18).mirror().addBox(3.5F, -12.0F, -3.0F, 2.0F, 7.0F, 9.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(18, 3).addBox(-5.0F, -6.0F, -5.0F, 2.0F, 5.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(18, 3).mirror().addBox(3.0F, -6.0F, -5.0F, 2.0F, 5.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(30, 3).mirror().addBox(3.0F, -6.0F, -5.0F, 2.0F, 5.0F, 4.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(30, 3).addBox(-5.0F, -6.0F, -5.0F, 2.0F, 5.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 1.0F, 0.0F)); + + PartDefinition left_glow = helmet_glow.addOrReplaceChild("left_glow", CubeListBuilder.create().texOffs(106, 0).mirror().addBox(4.6846F, -10.0F, -1.2529F, 2.0F, 5.0F, 9.0F, new CubeDeformation(-0.5F)).mirror(false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, 0.0873F, 0.0F)); + + PartDefinition right_glow = helmet_glow.addOrReplaceChild("right_glow", CubeListBuilder.create().texOffs(106, 0).mirror().addBox(-6.6846F, -10.0F, -1.2529F, 2.0F, 5.0F, 9.0F, new CubeDeformation(-0.5F)).mirror(false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, -0.0873F, 0.0F)); + + return LayerDefinition.create(mesh, 128, 128); } diff --git a/src/main/java/com/sammy/malum/client/model/bbmodels/malignant_lead.bbmodel b/src/main/java/com/sammy/malum/client/model/bbmodels/malignant_lead.bbmodel index e954c4d8f..35181e940 100644 --- a/src/main/java/com/sammy/malum/client/model/bbmodels/malignant_lead.bbmodel +++ b/src/main/java/com/sammy/malum/client/model/bbmodels/malignant_lead.bbmodel @@ -1 +1 @@ -{"meta":{"format_version":"4.9","model_format":"modded_entity","box_uv":true},"name":"malignant_lead","model_identifier":"custom_model","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":128,"height":128},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.5,29,-5],"to":[4.5,32,5],"autouv":0,"color":0,"origin":[0,-1,0],"uv_offset":[59,3],"faces":{"north":{"uv":[69,13,72,16],"texture":0},"east":{"uv":[59,13,69,16],"texture":0},"south":{"uv":[82,13,85,16],"texture":0},"west":{"uv":[72,13,82,16],"texture":0},"up":{"uv":[72,13,69,3],"texture":0},"down":{"uv":[75,3,72,13],"texture":0}},"type":"cube","uuid":"3089125a-f5e3-7877-fc43-b85e186ce70b"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,24,-5],"to":[-3,29,-1],"autouv":0,"color":1,"shade":false,"mirror_uv":true,"origin":[0,-1,0],"uv_offset":[40,16],"faces":{"north":{"uv":[46,20,44,25],"texture":0},"east":{"uv":[50,20,46,25],"texture":0},"south":{"uv":[52,20,50,25],"texture":0},"west":{"uv":[44,20,40,25],"texture":0},"up":{"uv":[44,20,46,16],"texture":0},"down":{"uv":[46,16,48,20],"texture":0}},"type":"cube","uuid":"a7821e2a-e474-6b75-3fb8-e1e5c2d97f78"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,21.5,-3],"to":[10,26.5,3],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[0,0,0],"uv_offset":[36,75],"faces":{"north":{"uv":[47,81,42,86],"texture":0},"east":{"uv":[53,81,47,86],"texture":0},"south":{"uv":[58,81,53,86],"texture":0},"west":{"uv":[42,81,36,86],"texture":0},"up":{"uv":[42,81,47,75],"texture":0},"down":{"uv":[47,75,52,81],"texture":0}},"type":"cube","uuid":"e63c28ce-b6bb-8689-ffb2-b426bb3f9fdf"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.5,11,-3],"to":[8.5,17,3],"autouv":0,"color":4,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[5,0,0],"uv_offset":[7,88],"faces":{"north":{"uv":[18,94,13,100],"texture":0},"east":{"uv":[24,94,18,100],"texture":0},"south":{"uv":[29,94,24,100],"texture":0},"west":{"uv":[13,94,7,100],"texture":0},"up":{"uv":[13,94,18,88],"texture":0},"down":{"uv":[18,88,23,94],"texture":0}},"type":"cube","uuid":"6fd2ef76-94e2-9233-9acf-41cd99cd3141"},{"name":"boot_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-1,-3],"to":[5,6,3],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"origin":[0,0,0],"uv_offset":[63,107],"faces":{"north":{"uv":[75,113,69,120],"texture":0},"east":{"uv":[81,113,75,120],"texture":0},"south":{"uv":[87,113,81,120],"texture":0},"west":{"uv":[69,113,63,120],"texture":0},"up":{"uv":[69,113,75,107],"texture":0},"down":{"uv":[75,107,81,113],"texture":0}},"type":"cube","uuid":"4f9d7976-eeec-ccaa-b7a4-2a5aaa0c3b0f"},{"name":"thigh_guard_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.3934333473546525,6.127801352928617,-3],"to":[6.393433347354654,12.127801352928616,3],"autouv":0,"color":5,"inflate":0.03,"origin":[0.020002535079508665,-1.9915440816362118,-0.009999990463256834],"uv_offset":[19,108],"faces":{"north":{"uv":[25,114,28,120],"texture":0},"east":{"uv":[19,114,25,120],"texture":0},"south":{"uv":[34,114,37,120],"texture":0},"west":{"uv":[28,114,34,120],"texture":0},"up":{"uv":[28,114,25,108],"texture":0},"down":{"uv":[31.000000000000004,108,28,114],"texture":0}},"type":"cube","uuid":"7db7922f-957c-5c15-3766-2f5c47a7baa0"},{"name":"thigh_guard_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.393418210755766,6.1278013529286115,-3],"to":[-3.393418210755768,12.12780135292861,3],"autouv":0,"color":6,"shade":false,"mirror_uv":true,"inflate":0.03,"origin":[-0.6200029165492349,-1.7415440816362135,-0.009999990463256834],"uv_offset":[19,108],"faces":{"north":{"uv":[28,114,25,120],"texture":0},"east":{"uv":[34,114,28,120],"texture":0},"south":{"uv":[37,114,34,120],"texture":0},"west":{"uv":[25,114,19,120],"texture":0},"up":{"uv":[25,114,28,108],"texture":0},"down":{"uv":[28,108,30.999999999999996,114],"texture":0}},"type":"cube","uuid":"79b356fd-95c0-cdee-dadb-e079c06849af"},{"name":"boot_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-1,-3],"to":[1,6,3],"autouv":0,"color":7,"inflate":0.01,"origin":[0,0,0],"uv_offset":[63,107],"faces":{"north":{"uv":[69,113,75,120],"texture":0},"east":{"uv":[63,113,69,120],"texture":0},"south":{"uv":[81,113,87,120],"texture":0},"west":{"uv":[75,113,81,120],"texture":0},"up":{"uv":[75,113,69,107],"texture":0},"down":{"uv":[81,107,75,113],"texture":0}},"type":"cube","uuid":"bcb251f9-0b90-a858-cbc2-eee3435b4ecc"},{"name":"codpiece","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,12.5,-3],"to":[4,14.5,3],"autouv":0,"color":0,"inflate":0.04,"origin":[0,0,0],"uv_offset":[6,61],"faces":{"north":{"uv":[12,67,20,69],"texture":0},"east":{"uv":[6,67,12,69],"texture":0},"south":{"uv":[26,67,34,69],"texture":0},"west":{"uv":[20,67,26,69],"texture":0},"up":{"uv":[20,67,12,61],"texture":0},"down":{"uv":[28,61,20,67],"texture":0}},"type":"cube","uuid":"7903b96c-fb44-1e65-67e4-7f1d6d4f2fe7"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,29,-5],"to":[-1.5,32,5],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"origin":[0,-1,0],"uv_offset":[59,3],"faces":{"north":{"uv":[72,13,69,16],"texture":0},"east":{"uv":[82,13,72,16],"texture":0},"south":{"uv":[85,13,82,16],"texture":0},"west":{"uv":[69,13,59,16],"texture":0},"up":{"uv":[69,13,72,3],"texture":0},"down":{"uv":[72,3,75,13],"texture":0}},"type":"cube","uuid":"e8386980-5d48-2ea5-3dd1-a648e2a0ff4a"},{"name":"leg_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,5.5,-2.5],"to":[0.5,12.5,2.5],"autouv":0,"color":3,"shade":false,"mirror_uv":true,"origin":[0,0,0],"uv_offset":[53,88],"faces":{"north":{"uv":[63,93,58,100],"texture":0},"east":{"uv":[68,93,63,100],"texture":0},"south":{"uv":[73,93,68,100],"texture":0},"west":{"uv":[58,93,53,100],"texture":0},"up":{"uv":[58,93,63,88],"texture":0},"down":{"uv":[63,88,68,93],"texture":0}},"type":"cube","uuid":"421781ab-9df5-6443-6f2a-4385c92db364"},{"name":"leg_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.5,5.5,-2.5],"to":[4.5,12.5,2.5],"autouv":0,"color":1,"origin":[0,0,0],"uv_offset":[53,88],"faces":{"north":{"uv":[58,93,63,100],"texture":0},"east":{"uv":[53,93,58,100],"texture":0},"south":{"uv":[68,93,73,100],"texture":0},"west":{"uv":[63,93,68,100],"texture":0},"up":{"uv":[63,93,58,88],"texture":0},"down":{"uv":[68,88,63,93],"texture":0}},"type":"cube","uuid":"b884bf21-499a-58ef-5da1-cce9f8200d0a"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,24,-5],"to":[5,29,-1],"autouv":0,"color":4,"origin":[0,-1,0],"uv_offset":[40,16],"faces":{"north":{"uv":[44,20,46,25],"texture":0},"east":{"uv":[40,20,44,25],"texture":0},"south":{"uv":[50,20,52,25],"texture":0},"west":{"uv":[46,20,50,25],"texture":0},"up":{"uv":[46,20,44,16],"texture":0},"down":{"uv":[48,16,46,20],"texture":0}},"type":"cube","uuid":"ef697b9b-6d23-00c0-c6b5-c67926376a59"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.5,28,-6],"to":[1.5,34,6],"autouv":0,"color":3,"origin":[0,-1,0],"uv_offset":[0,16],"faces":{"north":{"uv":[12,28,15,34],"texture":0},"east":{"uv":[0,28,12,34],"texture":0},"south":{"uv":[27,28,30,34],"texture":0},"west":{"uv":[15,28,27,34],"texture":0},"up":{"uv":[15,28,12,16],"texture":0},"down":{"uv":[18,16,15,28],"texture":0}},"type":"cube","uuid":"3bd9da5c-7989-1f80-5e63-635b80c88c6d"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,17,-3],"to":[5,22,3],"autouv":0,"color":5,"origin":[0,0,0],"uv_offset":[6,37],"faces":{"north":{"uv":[12,43,22,48],"texture":0},"east":{"uv":[6,43,12,48],"texture":0},"south":{"uv":[28,43,38,48],"texture":0},"west":{"uv":[22,43,28,48],"texture":0},"up":{"uv":[22,43,12,37],"texture":0},"down":{"uv":[32,37,22,43],"texture":0}},"type":"cube","uuid":"a6bebbdd-0fce-dc40-cd93-354ec465c1f8"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,13.5,-2.5],"to":[4.5,17.5,2.5],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[6,49],"faces":{"north":{"uv":[11,54,20,58],"texture":0},"east":{"uv":[6,54,11,58],"texture":0},"south":{"uv":[25,54,34,58],"texture":0},"west":{"uv":[20,54,25,58],"texture":0},"up":{"uv":[20,54,11,49],"texture":0},"down":{"uv":[29,49,20,54],"texture":0}},"type":"cube","uuid":"5d40581d-109e-2e60-bd61-ffb41b6c3932"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,21,-5],"to":[6,25,4],"autouv":0,"color":3,"origin":[0,0,0],"uv_offset":[60,40],"faces":{"north":{"uv":[69,49,81,53],"texture":0},"east":{"uv":[60,49,69,53],"texture":0},"south":{"uv":[90,49,102,53],"texture":0},"west":{"uv":[81,49,90,53],"texture":0},"up":{"uv":[81,49,69,40],"texture":0},"down":{"uv":[93,40,81,49],"texture":0}},"type":"cube","uuid":"afe4cb3b-6a8e-d24a-d20e-0b69d6adba2b"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.675340579092845,20.46444401067989,-4],"to":[10.67534057909285,23.46444401067989,4],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[-0.32465942090715433,1.4644440106799004,0],"uv_offset":[4,73],"faces":{"north":{"uv":[18.000000000000007,81,12,84],"texture":0},"east":{"uv":[26.000000000000007,81,18.000000000000007,84],"texture":0},"south":{"uv":[32.000000000000014,81,26.000000000000007,84],"texture":0},"west":{"uv":[12,81,4,84],"texture":0},"up":{"uv":[12,81,18.000000000000007,73],"texture":0},"down":{"uv":[18.000000000000007,73,24.00000000000001,81],"texture":0}},"type":"cube","uuid":"00e631ff-f900-631a-a662-8a2fb41ffcf7"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,24,1],"to":[4.5,29,5],"autouv":0,"color":0,"origin":[0,-1,0],"uv_offset":[80,1],"faces":{"north":{"uv":[84,5,93,10],"texture":0},"east":{"uv":[80,5,84,10],"texture":0},"south":{"uv":[97,5,106,10],"texture":0},"west":{"uv":[93,5,97,10],"texture":0},"up":{"uv":[93,5,84,1],"texture":0},"down":{"uv":[102,1,93,5],"texture":0}},"type":"cube","uuid":"b7860950-bc1e-89a6-14ea-307736ad4ae7"},{"name":"thigh_guard_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.7734308122751443,3.8943454345648254,-3],"to":[5.773430812275144,10.894345434564825,3],"autouv":0,"color":5,"inflate":0.02,"origin":[1,-2,0],"uv_offset":[40,109],"faces":{"north":{"uv":[46,115,49,122],"texture":0},"east":{"uv":[40,115,46,122],"texture":0},"south":{"uv":[55,115,58,122],"texture":0},"west":{"uv":[49,115,55,122],"texture":0},"up":{"uv":[49,115,46,109],"texture":0},"down":{"uv":[52,109,49,115],"texture":0}},"type":"cube","uuid":"dcb809c5-045e-4fab-9262-897659bf1be5"},{"name":"thigh_guard_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5.773415294206531,3.8943454345648254,-3],"to":[-2.773415294206533,10.894345434564825,3],"autouv":0,"color":6,"shade":false,"mirror_uv":true,"inflate":0.02,"origin":[-1,-2,0],"uv_offset":[40,109],"faces":{"north":{"uv":[49,115,46,122],"texture":0},"east":{"uv":[55,115,49,122],"texture":0},"south":{"uv":[58,115,55,122],"texture":0},"west":{"uv":[46,115,40,122],"texture":0},"up":{"uv":[46,115,49,109],"texture":0},"down":{"uv":[49,109,52,115],"texture":0}},"type":"cube","uuid":"97bdbb97-b84a-3531-0165-d37539e4cd75"},{"name":"codpiece","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,9.5,-3],"to":[2,12.5,3],"autouv":0,"color":0,"inflate":0.04,"origin":[0,0,0],"uv_offset":[42,58],"faces":{"north":{"uv":[48,64,52,67],"texture":0},"east":{"uv":[42,64,48,67],"texture":0},"south":{"uv":[58,64,62,67],"texture":0},"west":{"uv":[52,64,58,67],"texture":0},"up":{"uv":[52,64,48,58],"texture":0},"down":{"uv":[56,58,52,64],"texture":0}},"type":"cube","uuid":"d8ceb7eb-b81d-3fbc-27ee-0c75012d2c31"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.5,28,-3],"to":[5.5,35,6],"autouv":0,"color":3,"origin":[0,-1,0],"uv_offset":[40,25],"faces":{"north":{"uv":[49,34,51,41],"texture":0},"east":{"uv":[40,34,49,41],"texture":0},"south":{"uv":[60,34,62,41],"texture":0},"west":{"uv":[51,34,60,41],"texture":0},"up":{"uv":[51,34,49,25],"texture":0},"down":{"uv":[53,25,51,34],"texture":0}},"type":"cube","uuid":"913e020d-1da4-292d-1425-6f05876e2cd9"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5.5,28,-3],"to":[-3.5,35,6],"autouv":0,"color":3,"mirror_uv":true,"origin":[0,-1,0],"uv_offset":[40,25],"faces":{"north":{"uv":[51,34,49,41],"texture":0},"east":{"uv":[60,34,51,41],"texture":0},"south":{"uv":[62,34,60,41],"texture":0},"west":{"uv":[49,34,40,41],"texture":0},"up":{"uv":[49,34,51,25],"texture":0},"down":{"uv":[51,25,53,34],"texture":0}},"type":"cube","uuid":"33331ec9-2f34-a439-f264-dd9a996eb003"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-12,19,-1],"to":[-9,27,1],"autouv":0,"color":5,"inflate":0.01,"origin":[0,0,0],"uv_offset":[100,88],"faces":{"north":{"uv":[102,90,105,98],"texture":0},"east":{"uv":[100,90,102,98],"texture":0},"south":{"uv":[107,90,110,98],"texture":0},"west":{"uv":[105,90,107,98],"texture":0},"up":{"uv":[105,90,102,88],"texture":0},"down":{"uv":[108,88,105,90],"texture":0}},"type":"cube","uuid":"f85f775b-3c23-508e-2b92-f1339e9435d2"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9.5,13,-1],"to":[-6.5,18,1],"autouv":0,"color":6,"inflate":0.02,"origin":[0,0,0],"uv_offset":[100,77],"faces":{"north":{"uv":[102,79,105,84],"texture":0},"east":{"uv":[100,79,102,84],"texture":0},"south":{"uv":[107,79,110,84],"texture":0},"west":{"uv":[105,79,107,84],"texture":0},"up":{"uv":[105,79,102,77],"texture":0},"down":{"uv":[108,77,105,79],"texture":0}},"type":"cube","uuid":"3e478bdb-889d-1afa-cef5-5603cc523608"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10,21.5,-3],"to":[-5,26.5,3],"autouv":0,"color":5,"inflate":0.01,"origin":[0,0,0],"uv_offset":[36,75],"faces":{"north":{"uv":[42,81,47,86],"texture":0},"east":{"uv":[36,81,42,86],"texture":0},"south":{"uv":[53,81,58,86],"texture":0},"west":{"uv":[47,81,53,86],"texture":0},"up":{"uv":[47,81,42,75],"texture":0},"down":{"uv":[52,75,47,81],"texture":0}},"type":"cube","uuid":"a46bfb6e-39b7-05d8-3a76-67ab9a07b8f3"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8.5,11,-3],"to":[-3.5,17,3],"autouv":0,"color":6,"inflate":0.01,"origin":[0,0,0],"uv_offset":[7,88],"faces":{"north":{"uv":[13,94,18,100],"texture":0},"east":{"uv":[7,94,13,100],"texture":0},"south":{"uv":[24,94,29,100],"texture":0},"west":{"uv":[18,94,24,100],"texture":0},"up":{"uv":[18,94,13,88],"texture":0},"down":{"uv":[23,88,18,94],"texture":0}},"type":"cube","uuid":"614705f2-bcdb-a571-d28e-3beee15b32c4"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10.89178019303095,20.488148003559964,-4],"to":[-4.891780193030948,23.488148003559964,4],"autouv":0,"color":5,"inflate":0.01,"origin":[0.10821980696905145,0.4881480035599667,0],"uv_offset":[4,73],"faces":{"north":{"uv":[12,81,18,84],"texture":0},"east":{"uv":[4,81,12,84],"texture":0},"south":{"uv":[26,81,32,84],"texture":0},"west":{"uv":[18,81,26,84],"texture":0},"up":{"uv":[18,81,12,73],"texture":0},"down":{"uv":[24.000000000000004,73,18,81],"texture":0}},"type":"cube","uuid":"d0262a70-c09f-b202-04d5-3c86e07aea07"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,19,-1],"to":[12,27,1],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[0,-1,0],"uv_offset":[100,88],"faces":{"north":{"uv":[105,90,102,98],"texture":0},"east":{"uv":[107,90,105,98],"texture":0},"south":{"uv":[110,90,107,98],"texture":0},"west":{"uv":[102,90,100,98],"texture":0},"up":{"uv":[102,90,105,88],"texture":0},"down":{"uv":[105,88,108,90],"texture":0}},"type":"cube","uuid":"70315f47-6aad-8c8c-d7ae-4e0bc9b67da7"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6.5,13,-1],"to":[9.5,18,1],"autouv":0,"color":4,"shade":false,"mirror_uv":true,"inflate":0.020000000000000018,"origin":[5,0,0],"uv_offset":[100,77],"faces":{"north":{"uv":[105,79,102,84],"texture":0},"east":{"uv":[107,79,105,84],"texture":0},"south":{"uv":[110,79,107,84],"texture":0},"west":{"uv":[102,79,100,84],"texture":0},"up":{"uv":[102,79,105,77],"texture":0},"down":{"uv":[105,77,108,79],"texture":0}},"type":"cube","uuid":"9075aad1-4a34-3807-7fad-4d01a9bb31a7"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,21,-3.75],"to":[9,23,-2.75],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[0,-1,0],"uv_offset":[93,88],"faces":{"north":{"uv":[96,89,94,91],"texture":0},"east":{"uv":[97,89,96,91],"texture":0},"south":{"uv":[99,89,97,91],"texture":0},"west":{"uv":[94,89,93,91],"texture":0},"up":{"uv":[94,89,96,88],"texture":0},"down":{"uv":[96,88,98,89],"texture":0}},"type":"cube","uuid":"75779268-a82d-12ea-3eb3-44fcc74905e6"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,21,2.75],"to":[9,23,3.75],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[0,-1,0],"uv_offset":[93,88],"faces":{"north":{"uv":[96,89,94,91],"texture":0},"east":{"uv":[97,89,96,91],"texture":0},"south":{"uv":[99,89,97,91],"texture":0},"west":{"uv":[94,89,93,91],"texture":0},"up":{"uv":[94,89,96,88],"texture":0},"down":{"uv":[96,88,98,89],"texture":0}},"type":"cube","uuid":"d2140963-b7db-a7c6-196d-2cfe6fa43c1c"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9,21,-3.75],"to":[-7,23,-2.75],"autouv":0,"color":5,"inflate":0.01,"origin":[0,0,0],"uv_offset":[93,88],"faces":{"north":{"uv":[94,89,96,91],"texture":0},"east":{"uv":[93,89,94,91],"texture":0},"south":{"uv":[97,89,99,91],"texture":0},"west":{"uv":[96,89,97,91],"texture":0},"up":{"uv":[96,89,94,88],"texture":0},"down":{"uv":[98,88,96,89],"texture":0}},"type":"cube","uuid":"cff2a354-ba99-43ac-da5c-9ffe04600a54"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9,21,2.75],"to":[-7,23,3.75],"autouv":0,"color":5,"inflate":0.01,"origin":[0,0,0],"uv_offset":[93,88],"faces":{"north":{"uv":[94,89,96,91],"texture":0},"east":{"uv":[93,89,94,91],"texture":0},"south":{"uv":[97,89,99,91],"texture":0},"west":{"uv":[96,89,97,91],"texture":0},"up":{"uv":[96,89,94,88],"texture":0},"down":{"uv":[98,88,96,89],"texture":0}},"type":"cube","uuid":"072c91c3-4361-a39e-9ca6-b38d61f10fcc"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,18,3],"to":[1,20,4],"autouv":0,"color":5,"origin":[0,0,0],"uv_offset":[93,88],"faces":{"north":{"uv":[94,89,96,91],"texture":0},"east":{"uv":[93,89,94,91],"texture":0},"south":{"uv":[97,89,99,91],"texture":0},"west":{"uv":[96,89,97,91],"texture":0},"up":{"uv":[96,89,94,88],"texture":0},"down":{"uv":[98,88,96,89],"texture":0}},"type":"cube","uuid":"4a14dcf3-2118-adff-1195-2eb2738082c2"},{"name":"boot_r_glow","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,2,-1],"to":[6,5,1],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"origin":[0,0,0],"uv_offset":[91,82],"faces":{"north":{"uv":[94,84,93,87],"texture":0},"east":{"uv":[96,84,94,87],"texture":0},"south":{"uv":[97,84,96,87],"texture":0},"west":{"uv":[93,84,91,87],"texture":0},"up":{"uv":[93,84,94,82],"texture":0},"down":{"uv":[94,82,95,84],"texture":0}},"type":"cube","uuid":"7099eabf-6cee-ce2d-a29b-76662ec479b9"},{"name":"boot_l_glow","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,2,-1],"to":[-5,5,1],"autouv":0,"color":7,"inflate":0.01,"origin":[0,0,0],"uv_offset":[91,82],"faces":{"north":{"uv":[93,84,94,87],"texture":0},"east":{"uv":[91,84,93,87],"texture":0},"south":{"uv":[96,84,97,87],"texture":0},"west":{"uv":[94,84,96,87],"texture":0},"up":{"uv":[94,84,93,82],"texture":0},"down":{"uv":[95,82,94,84],"texture":0}},"type":"cube","uuid":"1dee734b-2b9b-03b8-09ff-31caa0a16e0d"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.5,29.5,-0.25],"to":[-4.5,33.5,7.75],"autouv":0,"color":1,"shade":false,"mirror_uv":true,"origin":[0,-1,0.75],"uv_offset":[88,63],"faces":{"north":{"uv":[98,71,96,75],"texture":0},"east":{"uv":[106,71,98,75],"texture":0},"south":{"uv":[108,71,106,75],"texture":0},"west":{"uv":[96,71,88,75],"texture":0},"up":{"uv":[96,71,98,63],"texture":0},"down":{"uv":[98,63,100,71],"texture":0}},"type":"cube","uuid":"d1dbedac-ec2c-1971-dca4-f8d078f3b897"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.5,29.5,-0.25],"to":[6.5,33.5,7.75],"autouv":0,"color":1,"shade":false,"mirror_uv":true,"origin":[0,-1,0.75],"uv_offset":[88,63],"faces":{"north":{"uv":[98,71,96,75],"texture":0},"east":{"uv":[106,71,98,75],"texture":0},"south":{"uv":[108,71,106,75],"texture":0},"west":{"uv":[96,71,88,75],"texture":0},"up":{"uv":[96,71,98,63],"texture":0},"down":{"uv":[98,63,100,71],"texture":0}},"type":"cube","uuid":"32362d84-7165-641f-a708-bf91894fb836"}],"outliner":[{"name":"torso","origin":[0,24,0],"color":0,"uuid":"6d53fc4b-9733-f2b2-1b43-3a0c90df5db4","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a6bebbdd-0fce-dc40-cd93-354ec465c1f8","5d40581d-109e-2e60-bd61-ffb41b6c3932",{"name":"thing","origin":[0,24,0],"rotation":[-15,0,0],"color":0,"uuid":"c5d1a2ab-3172-b48c-9bd1-2d8b75211bd3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["afe4cb3b-6a8e-d24a-d20e-0b69d6adba2b"]}]},{"name":"torso_glow","origin":[0,24,0],"color":0,"uuid":"e3291511-3989-cd44-6738-c23158206ed1","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4a14dcf3-2118-adff-1195-2eb2738082c2"]},{"name":"head","origin":[0,23,0],"color":0,"uuid":"e5eccdcb-78b6-781e-816b-94ff2349ad73","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3089125a-f5e3-7877-fc43-b85e186ce70b","b7860950-bc1e-89a6-14ea-307736ad4ae7","e8386980-5d48-2ea5-3dd1-a648e2a0ff4a","3bd9da5c-7989-1f80-5e63-635b80c88c6d","913e020d-1da4-292d-1425-6f05876e2cd9","33331ec9-2f34-a439-f264-dd9a996eb003","ef697b9b-6d23-00c0-c6b5-c67926376a59","a7821e2a-e474-6b75-3fb8-e1e5c2d97f78"]},{"name":"head_glow","origin":[0,23,0],"color":0,"uuid":"b3719fb6-3110-f2e7-aba5-0593b7e92089","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"left_glow","origin":[0,23,0.75],"rotation":[0,-5,0],"color":0,"uuid":"965007ac-d2a1-b4e8-4ff7-8a58a555e9f9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d1dbedac-ec2c-1971-dca4-f8d078f3b897"]},{"name":"right_glow","origin":[0,23,0.75],"rotation":[0,5,0],"color":0,"uuid":"eeebc104-52ca-01bf-7ccb-01e2174e07ac","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["32362d84-7165-641f-a708-bf91894fb836"]}]},{"name":"arm_r","origin":[3,22,0],"color":0,"uuid":"0f385a6c-562e-d849-c500-db03f340fe63","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["e63c28ce-b6bb-8689-ffb2-b426bb3f9fdf","6fd2ef76-94e2-9233-9acf-41cd99cd3141",{"name":"shoulder_pad_r","origin":[3,22,0],"rotation":[0,0,-12.5],"color":0,"uuid":"c2a7b5c4-d5b1-d886-7717-a02b4d5db9d1","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["00e631ff-f900-631a-a662-8a2fb41ffcf7"]}]},{"name":"arm_r_glow","origin":[3,22,0],"color":0,"uuid":"41982a8d-da4d-6469-8ea1-95182973cd97","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"glow_r2","origin":[3,21,0],"rotation":[0,0,7.5],"color":0,"uuid":"b77268d2-9dba-6c8b-39dc-36a7cdb811da","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["70315f47-6aad-8c8c-d7ae-4e0bc9b67da7","75779268-a82d-12ea-3eb3-44fcc74905e6","d2140963-b7db-a7c6-196d-2cfe6fa43c1c"]},{"name":"lower_glow_r2","origin":[3,22,0],"color":0,"uuid":"e3bb18be-f8b6-1d4d-3c74-b087a68cf775","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9075aad1-4a34-3807-7fad-4d01a9bb31a7"]}]},{"name":"arm_l","origin":[-3,22,0],"color":0,"uuid":"fb36ebbd-25ee-84af-2f7c-2207ab626898","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a46bfb6e-39b7-05d8-3a76-67ab9a07b8f3","614705f2-bcdb-a571-d28e-3beee15b32c4",{"name":"shoulder_pad_l2","origin":[-3,22,0],"rotation":[0,0,12.5],"color":0,"uuid":"f22da9a2-86be-f982-22eb-0755f4cc42db","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d0262a70-c09f-b202-04d5-3c86e07aea07"]}]},{"name":"arm_l_glow","origin":[-3,22,0],"color":0,"uuid":"c2b22c51-5995-3f10-f066-6f8bd20fa3d4","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"glow_l","origin":[-3,22,0],"rotation":[0,0,-7.5],"color":0,"uuid":"39b89b16-5965-1305-f126-355b76d91d1c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["f85f775b-3c23-508e-2b92-f1339e9435d2","cff2a354-ba99-43ac-da5c-9ffe04600a54","072c91c3-4361-a39e-9ca6-b38d61f10fcc"]},{"name":"lower_glow_l","origin":[-3,22,0],"color":0,"uuid":"232ea6f6-402a-c750-d6f0-8d5ce89e3665","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3e478bdb-889d-1afa-cef5-5603cc523608"]}]},{"name":"leg_r","origin":[2,12,0],"color":0,"uuid":"7be60e45-0384-3825-0285-c9861bcd56ae","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["b884bf21-499a-58ef-5da1-cce9f8200d0a",{"name":"thigh_guard_r","origin":[2,10,0],"rotation":[0,0,65],"color":0,"uuid":"9d8032aa-9dd9-a803-7cb0-2d97f3b51f78","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7db7922f-957c-5c15-3766-2f5c47a7baa0"]},{"name":"thigh_guard_r2","origin":[3,8,0],"rotation":[0,0,65],"color":0,"uuid":"16121f9e-6f81-d257-33b9-ecb8a5933447","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dcb809c5-045e-4fab-9262-897659bf1be5"]}]},{"name":"leg_l","origin":[-2,12,0],"color":0,"uuid":"71425f29-453c-ffed-e113-94521e5b6edd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["421781ab-9df5-6443-6f2a-4385c92db364",{"name":"thigh_guard_l","origin":[-2,10,0],"rotation":[0,0,-65],"color":0,"uuid":"36fd541b-fef9-30dc-6c06-8f0f78a28d9a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["79b356fd-95c0-cdee-dadb-e079c06849af"]},{"name":"thigh_guard_l2","origin":[-3,8,0],"rotation":[0,0,-65],"color":0,"uuid":"d278ab93-4ab9-cffe-8258-7ca2008b3b12","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["97bdbb97-b84a-3531-0165-d37539e4cd75"]}]},{"name":"boot_r","origin":[2,12,0],"color":0,"uuid":"1f0dd7f0-6db3-a61f-7f67-40146c30987c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4f9d7976-eeec-ccaa-b7a4-2a5aaa0c3b0f"]},{"name":"boot_r_glow","origin":[-2,12,0],"color":0,"uuid":"c60cf9c3-83dc-f649-8df0-fdf25062a1d5","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7099eabf-6cee-ce2d-a29b-76662ec479b9"]},{"name":"boot_l","origin":[-2,12,0],"color":0,"uuid":"31588fad-8410-af54-9d76-b841f0e91238","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["bcb251f9-0b90-a858-cbc2-eee3435b4ecc"]},{"name":"boot_l_glow","origin":[0,0,0],"color":0,"uuid":"97967112-9898-7aa7-db44-d332da690a53","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["1dee734b-2b9b-03b8-09ff-31caa0a16e0d"]},{"name":"codpiece","origin":[0,0,0],"color":0,"uuid":"22d6c7ca-a2a8-10b3-4475-e9960f789cc1","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7903b96c-fb44-1e65-67e4-7f1d6d4f2fe7","d8ceb7eb-b81d-3fbc-27ee-0c75012d2c31"]}],"textures":[{"path":"C:\\Users\\Hanna\\Desktop\\Mod-Stuff\\Malum-Mod\\src\\main\\resources\\assets\\malum\\textures\\armor\\malignant_stronghold.png","name":"malignant_stronghold.png","folder":"block","namespace":"","id":"0","width":128,"height":128,"uv_width":128,"uv_height":128,"particle":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"ff3ddc60-dd7c-0330-39dc-17c0c305532d","relative_path":"../../../../../../../../resources/assets/malum/textures/armor/malignant_stronghold.png","source":"data:image/png;base64,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"}]} \ No newline at end of file +{"meta":{"format_version":"4.9","model_format":"modded_entity","box_uv":true},"name":"pain","model_identifier":"custom_model","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":128,"height":128},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.5,29,-5],"to":[4.5,32,5],"autouv":0,"color":0,"origin":[0,-1,0],"uv_offset":[0,34],"faces":{"north":{"uv":[10,44,13,47],"texture":0},"east":{"uv":[0,44,10,47],"texture":0},"south":{"uv":[23,44,26,47],"texture":0},"west":{"uv":[13,44,23,47],"texture":0},"up":{"uv":[13,44,10,34],"texture":0},"down":{"uv":[16,34,13,44],"texture":0}},"type":"cube","uuid":"3089125a-f5e3-7877-fc43-b85e186ce70b"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,24,-5],"to":[-3,29,-1],"autouv":0,"color":1,"shade":false,"mirror_uv":true,"origin":[0,-1,0],"uv_offset":[18,3],"faces":{"north":{"uv":[24,7,22,12],"texture":0},"east":{"uv":[28,7,24,12],"texture":0},"south":{"uv":[30,7,28,12],"texture":0},"west":{"uv":[22,7,18,12],"texture":0},"up":{"uv":[22,7,24,3],"texture":0},"down":{"uv":[24,3,26,7],"texture":0}},"type":"cube","uuid":"a7821e2a-e474-6b75-3fb8-e1e5c2d97f78"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,21.5,-3],"to":[10,26.5,3],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[0,0,0],"uv_offset":[0,89],"faces":{"north":{"uv":[11,95,6,100],"texture":0},"east":{"uv":[17,95,11,100],"texture":0},"south":{"uv":[22,95,17,100],"texture":0},"west":{"uv":[6,95,0,100],"texture":0},"up":{"uv":[6,95,11,89],"texture":0},"down":{"uv":[11,89,16,95],"texture":0}},"type":"cube","uuid":"e63c28ce-b6bb-8689-ffb2-b426bb3f9fdf"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.5,11,-3],"to":[8.5,17,3],"autouv":0,"color":4,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[5,0,0],"uv_offset":[0,111],"faces":{"north":{"uv":[11,117,6,123],"texture":0},"east":{"uv":[17,117,11,123],"texture":0},"south":{"uv":[22,117,17,123],"texture":0},"west":{"uv":[6,117,0,123],"texture":0},"up":{"uv":[6,117,11,111],"texture":0},"down":{"uv":[11,111,16,117],"texture":0}},"type":"cube","uuid":"6fd2ef76-94e2-9233-9acf-41cd99cd3141"},{"name":"boot_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-1,-3],"to":[5,6,3],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"origin":[0,0,0],"uv_offset":[104,115],"faces":{"north":{"uv":[116,121,110,128],"texture":0},"east":{"uv":[122,121,116,128],"texture":0},"south":{"uv":[128,121,122,128],"texture":0},"west":{"uv":[110,121,104,128],"texture":0},"up":{"uv":[110,121,116,115],"texture":0},"down":{"uv":[116,115,122,121],"texture":0}},"type":"cube","uuid":"4f9d7976-eeec-ccaa-b7a4-2a5aaa0c3b0f"},{"name":"thigh_guard_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.3934333473546525,6.127801352928617,-3],"to":[6.393433347354654,11.127801352928618,3],"autouv":0,"color":5,"inflate":0.03,"origin":[0.020002535079508665,-1.9915440816362118,-0.009999990463256834],"uv_offset":[48,117],"faces":{"north":{"uv":[54,123,57,128],"texture":0},"east":{"uv":[48,123,54,128],"texture":0},"south":{"uv":[63,123,66,128],"texture":0},"west":{"uv":[57,123,63,128],"texture":0},"up":{"uv":[57,123,54,117],"texture":0},"down":{"uv":[60,117,57,123],"texture":0}},"type":"cube","uuid":"7db7922f-957c-5c15-3766-2f5c47a7baa0"},{"name":"thigh_guard_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.393418210755766,6.1278013529286115,-3],"to":[-3.393418210755768,11.12780135292861,3],"autouv":0,"color":6,"shade":false,"mirror_uv":true,"inflate":0.03,"origin":[-0.6200029165492349,-1.7415440816362135,-0.009999990463256834],"uv_offset":[48,117],"faces":{"north":{"uv":[57,123,54,128],"texture":0},"east":{"uv":[63,123,57,128],"texture":0},"south":{"uv":[66,123,63,128],"texture":0},"west":{"uv":[54,123,48,128],"texture":0},"up":{"uv":[54,123,57,117],"texture":0},"down":{"uv":[57,117,60,123],"texture":0}},"type":"cube","uuid":"79b356fd-95c0-cdee-dadb-e079c06849af"},{"name":"boot_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-1,-3],"to":[1,6,3],"autouv":0,"color":7,"inflate":0.01,"origin":[0,0,0],"uv_offset":[104,115],"faces":{"north":{"uv":[110,121,116,128],"texture":0},"east":{"uv":[104,121,110,128],"texture":0},"south":{"uv":[122,121,128,128],"texture":0},"west":{"uv":[116,121,122,128],"texture":0},"up":{"uv":[116,121,110,115],"texture":0},"down":{"uv":[122,115,116,121],"texture":0}},"type":"cube","uuid":"bcb251f9-0b90-a858-cbc2-eee3435b4ecc"},{"name":"codpiece","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,12.5,-3],"to":[4,14.5,3],"autouv":0,"color":0,"inflate":0.04,"origin":[0,0,0],"uv_offset":[32,72],"faces":{"north":{"uv":[38,78,46,80],"texture":0},"east":{"uv":[32,78,38,80],"texture":0},"south":{"uv":[52,78,60,80],"texture":0},"west":{"uv":[46,78,52,80],"texture":0},"up":{"uv":[46,78,38,72],"texture":0},"down":{"uv":[54,72,46,78],"texture":0}},"type":"cube","uuid":"7903b96c-fb44-1e65-67e4-7f1d6d4f2fe7"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,29,-5],"to":[-1.5,32,5],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"origin":[0,-1,0],"uv_offset":[0,34],"faces":{"north":{"uv":[13,44,10,47],"texture":0},"east":{"uv":[23,44,13,47],"texture":0},"south":{"uv":[26,44,23,47],"texture":0},"west":{"uv":[10,44,0,47],"texture":0},"up":{"uv":[10,44,13,34],"texture":0},"down":{"uv":[13,34,16,44],"texture":0}},"type":"cube","uuid":"e8386980-5d48-2ea5-3dd1-a648e2a0ff4a"},{"name":"leg_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,5.5,-2.5],"to":[0.5,12.5,2.5],"autouv":0,"color":3,"shade":false,"mirror_uv":true,"origin":[0,0,0],"uv_offset":[84,116],"faces":{"north":{"uv":[94,121,89,128],"texture":0},"east":{"uv":[99,121,94,128],"texture":0},"south":{"uv":[104,121,99,128],"texture":0},"west":{"uv":[89,121,84,128],"texture":0},"up":{"uv":[89,121,94,116],"texture":0},"down":{"uv":[94,116,99,121],"texture":0}},"type":"cube","uuid":"421781ab-9df5-6443-6f2a-4385c92db364"},{"name":"leg_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-0.5,5.5,-2.5],"to":[4.5,12.5,2.5],"autouv":0,"color":1,"origin":[0,0,0],"uv_offset":[84,116],"faces":{"north":{"uv":[89,121,94,128],"texture":0},"east":{"uv":[84,121,89,128],"texture":0},"south":{"uv":[99,121,104,128],"texture":0},"west":{"uv":[94,121,99,128],"texture":0},"up":{"uv":[94,121,89,116],"texture":0},"down":{"uv":[99,116,94,121],"texture":0}},"type":"cube","uuid":"b884bf21-499a-58ef-5da1-cce9f8200d0a"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,24,-5],"to":[5,29,-1],"autouv":0,"color":4,"origin":[0,-1,0],"uv_offset":[18,3],"faces":{"north":{"uv":[22,7,24,12],"texture":0},"east":{"uv":[18,7,22,12],"texture":0},"south":{"uv":[28,7,30,12],"texture":0},"west":{"uv":[24,7,28,12],"texture":0},"up":{"uv":[24,7,22,3],"texture":0},"down":{"uv":[26,3,24,7],"texture":0}},"type":"cube","uuid":"ef697b9b-6d23-00c0-c6b5-c67926376a59"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.5,28,-6],"to":[1.5,34,6],"autouv":0,"color":3,"origin":[0,-1,0],"faces":{"north":{"uv":[12,12,15,18],"texture":0},"east":{"uv":[0,12,12,18],"texture":0},"south":{"uv":[27,12,30,18],"texture":0},"west":{"uv":[15,12,27,18],"texture":0},"up":{"uv":[15,12,12,0],"texture":0},"down":{"uv":[18,0,15,12],"texture":0}},"type":"cube","uuid":"3bd9da5c-7989-1f80-5e63-635b80c88c6d"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,17,-3],"to":[5,22,3],"autouv":0,"color":5,"origin":[0,0,0],"uv_offset":[0,69],"faces":{"north":{"uv":[6,75,16,80],"texture":0},"east":{"uv":[0,75,6,80],"texture":0},"south":{"uv":[22,75,32,80],"texture":0},"west":{"uv":[16,75,22,80],"texture":0},"up":{"uv":[16,75,6,69],"texture":0},"down":{"uv":[26,69,16,75],"texture":0}},"type":"cube","uuid":"a6bebbdd-0fce-dc40-cd93-354ec465c1f8"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,13.5,-2.5],"to":[4.5,17.5,2.5],"autouv":0,"color":0,"origin":[0,0,0],"uv_offset":[0,80],"faces":{"north":{"uv":[5,85,14,89],"texture":0},"east":{"uv":[0,85,5,89],"texture":0},"south":{"uv":[19,85,28,89],"texture":0},"west":{"uv":[14,85,19,89],"texture":0},"up":{"uv":[14,85,5,80],"texture":0},"down":{"uv":[23,80,14,85],"texture":0}},"type":"cube","uuid":"5d40581d-109e-2e60-bd61-ffb41b6c3932"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,21,-5],"to":[6,25,4],"autouv":0,"color":3,"origin":[0,0,0],"uv_offset":[0,56],"faces":{"north":{"uv":[9,65,21,69],"texture":0},"east":{"uv":[0,65,9,69],"texture":0},"south":{"uv":[30,65,42,69],"texture":0},"west":{"uv":[21,65,30,69],"texture":0},"up":{"uv":[21,65,9,56],"texture":0},"down":{"uv":[33,56,21,65],"texture":0}},"type":"cube","uuid":"afe4cb3b-6a8e-d24a-d20e-0b69d6adba2b"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.675340579092845,20.46444401067989,-4],"to":[10.67534057909285,23.46444401067989,4],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[-0.32465942090715433,1.4644440106799004,0],"uv_offset":[0,100],"faces":{"north":{"uv":[14.000000000000005,108,8,111],"texture":0},"east":{"uv":[22.000000000000007,108,14.000000000000007,111],"texture":0},"south":{"uv":[28.000000000000014,108,22.000000000000007,111],"texture":0},"west":{"uv":[8,108,0,111],"texture":0},"up":{"uv":[8,108,14.000000000000005,100],"texture":0},"down":{"uv":[14.000000000000005,100,20.00000000000001,108],"texture":0}},"type":"cube","uuid":"00e631ff-f900-631a-a662-8a2fb41ffcf7"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,24,1],"to":[4.5,29,5],"autouv":0,"color":0,"origin":[0,-1,0],"uv_offset":[0,47],"faces":{"north":{"uv":[4,51,13,56],"texture":0},"east":{"uv":[0,51,4,56],"texture":0},"south":{"uv":[17,51,26,56],"texture":0},"west":{"uv":[13,51,17,56],"texture":0},"up":{"uv":[13,51,4,47],"texture":0},"down":{"uv":[22,47,13,51],"texture":0}},"type":"cube","uuid":"b7860950-bc1e-89a6-14ea-307736ad4ae7"},{"name":"thigh_guard_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.7734308122751443,3.8943454345648254,-3],"to":[5.773430812275144,10.894345434564825,3],"autouv":0,"color":5,"inflate":0.02,"origin":[1,-2,0],"uv_offset":[66,115],"faces":{"north":{"uv":[72,121,75,128],"texture":0},"east":{"uv":[66,121,72,128],"texture":0},"south":{"uv":[81,121,84,128],"texture":0},"west":{"uv":[75,121,81,128],"texture":0},"up":{"uv":[75,121,72,115],"texture":0},"down":{"uv":[78,115,75,121],"texture":0}},"type":"cube","uuid":"dcb809c5-045e-4fab-9262-897659bf1be5"},{"name":"thigh_guard_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5.773415294206531,3.8943454345648254,-3],"to":[-2.773415294206533,10.894345434564825,3],"autouv":0,"color":6,"shade":false,"mirror_uv":true,"inflate":0.02,"origin":[-1,-2,0],"uv_offset":[66,115],"faces":{"north":{"uv":[75,121,72,128],"texture":0},"east":{"uv":[81,121,75,128],"texture":0},"south":{"uv":[84,121,81,128],"texture":0},"west":{"uv":[72,121,66,128],"texture":0},"up":{"uv":[72,121,75,115],"texture":0},"down":{"uv":[75,115,78,121],"texture":0}},"type":"cube","uuid":"97bdbb97-b84a-3531-0165-d37539e4cd75"},{"name":"codpiece","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,9.5,-3],"to":[2,12.5,3],"autouv":0,"color":0,"inflate":0.04,"origin":[0,0,0],"uv_offset":[28,80],"faces":{"north":{"uv":[34,86,38,89],"texture":0},"east":{"uv":[28,86,34,89],"texture":0},"south":{"uv":[44,86,48,89],"texture":0},"west":{"uv":[38,86,44,89],"texture":0},"up":{"uv":[38,86,34,80],"texture":0},"down":{"uv":[42,80,38,86],"texture":0}},"type":"cube","uuid":"d8ceb7eb-b81d-3fbc-27ee-0c75012d2c31"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.5,28,-3],"to":[5.5,35,6],"autouv":0,"color":3,"origin":[0,-1,0],"uv_offset":[0,18],"faces":{"north":{"uv":[9,27,11,34],"texture":0},"east":{"uv":[0,27,9,34],"texture":0},"south":{"uv":[20,27,22,34],"texture":0},"west":{"uv":[11,27,20,34],"texture":0},"up":{"uv":[11,27,9,18],"texture":0},"down":{"uv":[13,18,11,27],"texture":0}},"type":"cube","uuid":"913e020d-1da4-292d-1425-6f05876e2cd9"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5.5,28,-3],"to":[-3.5,35,6],"autouv":0,"color":3,"mirror_uv":true,"origin":[0,-1,0],"uv_offset":[0,18],"faces":{"north":{"uv":[11,27,9,34],"texture":0},"east":{"uv":[20,27,11,34],"texture":0},"south":{"uv":[22,27,20,34],"texture":0},"west":{"uv":[9,27,0,34],"texture":0},"up":{"uv":[9,27,11,18],"texture":0},"down":{"uv":[11,18,13,27],"texture":0}},"type":"cube","uuid":"33331ec9-2f34-a439-f264-dd9a996eb003"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-12,18.75,-1.5],"to":[-9,26.75,1.5],"autouv":0,"color":5,"inflate":-0.24,"origin":[0,0,0],"uv_offset":[116,22],"faces":{"north":{"uv":[119,25,122,33],"texture":0},"east":{"uv":[116,25,119,33],"texture":0},"south":{"uv":[125,25,128,33],"texture":0},"west":{"uv":[122,25,125,33],"texture":0},"up":{"uv":[122,25,119,22],"texture":0},"down":{"uv":[125,22,122,25],"texture":0}},"type":"cube","uuid":"f85f775b-3c23-508e-2b92-f1339e9435d2"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9.5,13,-1.5],"to":[-6.5,18,1.5],"autouv":0,"color":6,"inflate":-0.23,"origin":[0,0,0],"uv_offset":[116,14],"faces":{"north":{"uv":[119,17,122,22],"texture":0},"east":{"uv":[116,17,119,22],"texture":0},"south":{"uv":[125,17,128,22],"texture":0},"west":{"uv":[122,17,125,22],"texture":0},"up":{"uv":[122,17,119,14],"texture":0},"down":{"uv":[125,14,122,17],"texture":0}},"type":"cube","uuid":"3e478bdb-889d-1afa-cef5-5603cc523608"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10,21.5,-3],"to":[-5,26.5,3],"autouv":0,"color":5,"inflate":0.01,"origin":[0,0,0],"uv_offset":[0,89],"faces":{"north":{"uv":[6,95,11,100],"texture":0},"east":{"uv":[0,95,6,100],"texture":0},"south":{"uv":[17,95,22,100],"texture":0},"west":{"uv":[11,95,17,100],"texture":0},"up":{"uv":[11,95,6,89],"texture":0},"down":{"uv":[16,89,11,95],"texture":0}},"type":"cube","uuid":"a46bfb6e-39b7-05d8-3a76-67ab9a07b8f3"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8.5,11,-3],"to":[-3.5,17,3],"autouv":0,"color":6,"inflate":0.01,"origin":[0,0,0],"uv_offset":[0,111],"faces":{"north":{"uv":[6,117,11,123],"texture":0},"east":{"uv":[0,117,6,123],"texture":0},"south":{"uv":[17,117,22,123],"texture":0},"west":{"uv":[11,117,17,123],"texture":0},"up":{"uv":[11,117,6,111],"texture":0},"down":{"uv":[16,111,11,117],"texture":0}},"type":"cube","uuid":"614705f2-bcdb-a571-d28e-3beee15b32c4"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10.89178019303095,20.488148003559964,-4],"to":[-4.891780193030948,23.488148003559964,4],"autouv":0,"color":5,"inflate":0.01,"origin":[0.10821980696905145,0.4881480035599667,0],"uv_offset":[0,100],"faces":{"north":{"uv":[8,108,14.000000000000002,111],"texture":0},"east":{"uv":[0,108,8,111],"texture":0},"south":{"uv":[22,108,28,111],"texture":0},"west":{"uv":[14.000000000000002,108,22,111],"texture":0},"up":{"uv":[14.000000000000002,108,8,100],"texture":0},"down":{"uv":[20.000000000000004,100,14.000000000000002,108],"texture":0}},"type":"cube","uuid":"d0262a70-c09f-b202-04d5-3c86e07aea07"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[9,18.75,-1.5],"to":[12,26.75,1.5],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":-0.24,"origin":[0,-1,0],"uv_offset":[116,22],"faces":{"north":{"uv":[122,25,119,33],"texture":0},"east":{"uv":[125,25,122,33],"texture":0},"south":{"uv":[128,25,125,33],"texture":0},"west":{"uv":[119,25,116,33],"texture":0},"up":{"uv":[119,25,122,22],"texture":0},"down":{"uv":[122,22,125,25],"texture":0}},"type":"cube","uuid":"70315f47-6aad-8c8c-d7ae-4e0bc9b67da7"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6.5,13,-1.5],"to":[9.5,18,1.5],"autouv":0,"color":4,"shade":false,"mirror_uv":true,"inflate":-0.22999999999999998,"origin":[5,0,0],"uv_offset":[116,14],"faces":{"north":{"uv":[122,17,119,22],"texture":0},"east":{"uv":[125,17,122,22],"texture":0},"south":{"uv":[128,17,125,22],"texture":0},"west":{"uv":[119,17,116,22],"texture":0},"up":{"uv":[119,17,122,14],"texture":0},"down":{"uv":[122,14,125,17],"texture":0}},"type":"cube","uuid":"9075aad1-4a34-3807-7fad-4d01a9bb31a7"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,21.25,-3.75],"to":[9,24.25,-2.75],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[0,-1,0],"uv_offset":[89,5],"faces":{"north":{"uv":[92,6,90,9],"texture":0},"east":{"uv":[93,6,92,9],"texture":0},"south":{"uv":[95,6,93,9],"texture":0},"west":{"uv":[90,6,89,9],"texture":0},"up":{"uv":[90,6,92,5],"texture":0},"down":{"uv":[92,5,94,6],"texture":0}},"type":"cube","uuid":"75779268-a82d-12ea-3eb3-44fcc74905e6"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[7,21.25,2.75],"to":[9,24.25,3.75],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.01,"origin":[0,-1,0],"uv_offset":[89,5],"faces":{"north":{"uv":[92,6,90,9],"texture":0},"east":{"uv":[93,6,92,9],"texture":0},"south":{"uv":[95,6,93,9],"texture":0},"west":{"uv":[90,6,89,9],"texture":0},"up":{"uv":[90,6,92,5],"texture":0},"down":{"uv":[92,5,94,6],"texture":0}},"type":"cube","uuid":"d2140963-b7db-a7c6-196d-2cfe6fa43c1c"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9,21.25,-3.75],"to":[-7,24.25,-2.75],"autouv":0,"color":5,"inflate":0.01,"origin":[0,0,0],"uv_offset":[89,5],"faces":{"north":{"uv":[90,6,92,9],"texture":0},"east":{"uv":[89,6,90,9],"texture":0},"south":{"uv":[93,6,95,9],"texture":0},"west":{"uv":[92,6,93,9],"texture":0},"up":{"uv":[92,6,90,5],"texture":0},"down":{"uv":[94,5,92,6],"texture":0}},"type":"cube","uuid":"cff2a354-ba99-43ac-da5c-9ffe04600a54"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9,21.25,2.75],"to":[-7,24.25,3.75],"autouv":0,"color":5,"inflate":0.01,"origin":[0,0,0],"uv_offset":[89,5],"faces":{"north":{"uv":[90,6,92,9],"texture":0},"east":{"uv":[89,6,90,9],"texture":0},"south":{"uv":[93,6,95,9],"texture":0},"west":{"uv":[92,6,93,9],"texture":0},"up":{"uv":[92,6,90,5],"texture":0},"down":{"uv":[94,5,92,6],"texture":0}},"type":"cube","uuid":"072c91c3-4361-a39e-9ca6-b38d61f10fcc"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.5,17.5,2],"to":[1.5,20.5,4],"autouv":0,"color":5,"inflate":-0.25,"origin":[0,0,0],"uv_offset":[95,4],"faces":{"north":{"uv":[97,6,100,9],"texture":0},"east":{"uv":[95,6,97,9],"texture":0},"south":{"uv":[102,6,105,9],"texture":0},"west":{"uv":[100,6,102,9],"texture":0},"up":{"uv":[100,6,97,4],"texture":0},"down":{"uv":[103,4,100,6],"texture":0}},"type":"cube","uuid":"4a14dcf3-2118-adff-1195-2eb2738082c2"},{"name":"boot_l_glow","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.5,1.5,-1.5],"to":[-4.5,5.5,1.5],"autouv":0,"color":7,"inflate":-0.24,"origin":[0,0,0],"uv_offset":[106,14],"faces":{"north":{"uv":[109,17,111,21],"texture":0},"east":{"uv":[106,17,109,21],"texture":0},"south":{"uv":[114,17,116,21],"texture":0},"west":{"uv":[111,17,114,21],"texture":0},"up":{"uv":[111,17,109,14],"texture":0},"down":{"uv":[113,14,111,17],"texture":0}},"type":"cube","uuid":"1dee734b-2b9b-03b8-09ff-31caa0a16e0d"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.6846331929392555,29,-1.252853976431191],"to":[-4.6846331929392555,34,7.747146023568809],"autouv":0,"color":1,"shade":false,"mirror_uv":true,"inflate":-0.4999999999999998,"origin":[0.06536680706074365,0,-0.0028539764311909443],"uv_offset":[106,0],"faces":{"north":{"uv":[117,9,115,14],"texture":0},"east":{"uv":[126,9,117,14],"texture":0},"south":{"uv":[128,9,126,14],"texture":0},"west":{"uv":[115,9,106,14],"texture":0},"up":{"uv":[115,9,117,0],"texture":0},"down":{"uv":[117,0,119,9],"texture":0}},"type":"cube","uuid":"d1dbedac-ec2c-1971-dca4-f8d078f3b897"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.684633192939256,29,-1.252853976431191],"to":[6.684633192939256,34,7.747146023568809],"autouv":0,"color":1,"shade":false,"mirror_uv":true,"inflate":-0.5,"origin":[-0.06536680706074365,0,-0.0028539764311909443],"uv_offset":[106,0],"faces":{"north":{"uv":[117,9,115,14],"texture":0},"east":{"uv":[126,9,117,14],"texture":0},"south":{"uv":[128,9,126,14],"texture":0},"west":{"uv":[115,9,106,14],"texture":0},"up":{"uv":[115,9,117,0],"texture":0},"down":{"uv":[117,0,119,9],"texture":0}},"type":"cube","uuid":"32362d84-7165-641f-a708-bf91894fb836"},{"name":"boot_r_glow","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.5,1.5,-1.5],"to":[6.5,5.5,1.5],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":-0.25,"origin":[0,0,0],"uv_offset":[106,14],"faces":{"north":{"uv":[111,17,109,21],"texture":0},"east":{"uv":[114,17,111,21],"texture":0},"south":{"uv":[116,17,114,21],"texture":0},"west":{"uv":[109,17,106,21],"texture":0},"up":{"uv":[109,17,111,14],"texture":0},"down":{"uv":[111,14,113,17],"texture":0}},"type":"cube","uuid":"7099eabf-6cee-ce2d-a29b-76662ec479b9"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.5,19.5,-5.75],"to":[1.5,22.5,-3.75],"autouv":0,"color":5,"inflate":-0.25,"origin":[0,0,0],"uv_offset":[105,4],"faces":{"north":{"uv":[107,6,110,9],"texture":0},"east":{"uv":[105,6,107,9],"texture":0},"south":{"uv":[112,6,115,9],"texture":0},"west":{"uv":[110,6,112,9],"texture":0},"up":{"uv":[110,6,107,4],"texture":0},"down":{"uv":[113,4,110,6],"texture":0}},"type":"cube","uuid":"c4733bfb-7a7b-d9b2-e218-a8b5d5a19711"},{"name":"thigh_guard_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[2.7734308122751443,3.8943454345648254,-3],"to":[5.773430812275144,10.894345434564825,3],"autouv":0,"color":5,"inflate":0.27,"origin":[1,-2,0],"uv_offset":[66,102],"faces":{"north":{"uv":[72,108,75,115],"texture":0},"east":{"uv":[66,108,72,115],"texture":0},"south":{"uv":[81,108,84,115],"texture":0},"west":{"uv":[75,108,81,115],"texture":0},"up":{"uv":[75,108,72,102],"texture":0},"down":{"uv":[78,102,75,108],"texture":0}},"type":"cube","uuid":"bf3bed52-8425-17a0-a0c4-6234570f74e3"},{"name":"thigh_guard_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5.773415294206531,3.8943454345648254,-3],"to":[-2.773415294206533,10.894345434564825,3],"autouv":0,"color":6,"shade":false,"mirror_uv":true,"inflate":0.27,"origin":[-1,-2,0],"uv_offset":[66,102],"faces":{"north":{"uv":[75,108,72,115],"texture":0},"east":{"uv":[81,108,75,115],"texture":0},"south":{"uv":[84,108,81,115],"texture":0},"west":{"uv":[72,108,66,115],"texture":0},"up":{"uv":[72,108,75,102],"texture":0},"down":{"uv":[75,102,78,108],"texture":0}},"type":"cube","uuid":"71ca4e60-d252-6c66-07f0-7b9f56c6cd22"},{"name":"boot_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1,-1,-3],"to":[5,6,3],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.25,"origin":[0,0,0],"uv_offset":[104,102],"faces":{"north":{"uv":[116,108,110,115],"texture":0},"east":{"uv":[122,108,116,115],"texture":0},"south":{"uv":[128,108,122,115],"texture":0},"west":{"uv":[110,108,104,115],"texture":0},"up":{"uv":[110,108,116,102],"texture":0},"down":{"uv":[116,102,122,108],"texture":0}},"type":"cube","uuid":"8eadbf53-666c-76c6-e26d-198ff1216db5"},{"name":"boot_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,-1,-3],"to":[1,6,3],"autouv":0,"color":7,"inflate":0.26,"origin":[0,0,0],"uv_offset":[104,102],"faces":{"north":{"uv":[110,108,116,115],"texture":0},"east":{"uv":[104,108,110,115],"texture":0},"south":{"uv":[122,108,128,115],"texture":0},"west":{"uv":[116,108,122,115],"texture":0},"up":{"uv":[116,108,110,102],"texture":0},"down":{"uv":[122,102,116,108],"texture":0}},"type":"cube","uuid":"6e8036e6-6e9f-cd79-7b25-ed5dd15f1d19"},{"name":"thigh_guard_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6.393418210755766,6.1278013529286115,-3],"to":[-3.393418210755768,11.12780135292861,3],"autouv":0,"color":6,"shade":false,"mirror_uv":true,"inflate":0.28,"origin":[-0.6200029165492349,-1.7415440816362135,-0.009999990463256834],"uv_offset":[48,106],"faces":{"north":{"uv":[57,112,54,117],"texture":0},"east":{"uv":[63,112,57,117],"texture":0},"south":{"uv":[66,112,63,117],"texture":0},"west":{"uv":[54,112,48,117],"texture":0},"up":{"uv":[54,112,57,106],"texture":0},"down":{"uv":[57,106,60,112],"texture":0}},"type":"cube","uuid":"5a908876-c46c-c04a-a3be-b203a597e5b9"},{"name":"thigh_guard_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.3934333473546525,6.127801352928617,-3],"to":[6.393433347354654,11.127801352928618,3],"autouv":0,"color":5,"inflate":0.28,"origin":[0.020002535079508665,-1.9915440816362118,-0.009999990463256834],"uv_offset":[48,106],"faces":{"north":{"uv":[54,112,57,117],"texture":0},"east":{"uv":[48,112,54,117],"texture":0},"south":{"uv":[63,112,66,117],"texture":0},"west":{"uv":[57,112,63,117],"texture":0},"up":{"uv":[57,112,54,106],"texture":0},"down":{"uv":[60,106,57,112],"texture":0}},"type":"cube","uuid":"1d4b8391-7c2e-f80a-ffad-da36d5cfccf8"},{"name":"codpiece","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-2,9.5,-3],"to":[2,12.5,3],"autouv":0,"color":0,"inflate":0.29,"origin":[0,0,0],"uv_offset":[48,80],"faces":{"north":{"uv":[54,86,58,89],"texture":0},"east":{"uv":[48,86,54,89],"texture":0},"south":{"uv":[64,86,68,89],"texture":0},"west":{"uv":[58,86,64,89],"texture":0},"up":{"uv":[58,86,54,80],"texture":0},"down":{"uv":[62,80,58,86],"texture":0}},"type":"cube","uuid":"1ac0d074-190a-dfb1-9e4b-4df7f1a7a9db"},{"name":"codpiece","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,12.5,-3],"to":[4,14.5,3],"autouv":0,"color":0,"inflate":0.29,"origin":[0,0,0],"uv_offset":[60,72],"faces":{"north":{"uv":[66,78,74,80],"texture":0},"east":{"uv":[60,78,66,80],"texture":0},"south":{"uv":[80,78,88,80],"texture":0},"west":{"uv":[74,78,80,80],"texture":0},"up":{"uv":[74,78,66,72],"texture":0},"down":{"uv":[82,72,74,78],"texture":0}},"type":"cube","uuid":"8eab74a7-b7a1-0913-a8bb-27cc9beea861"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-8.5,11,-3],"to":[-3.5,17,3],"autouv":0,"color":6,"inflate":0.26,"origin":[0,0,0],"uv_offset":[22,111],"faces":{"north":{"uv":[28,117,33,123],"texture":0},"east":{"uv":[22,117,28,123],"texture":0},"south":{"uv":[39,117,44,123],"texture":0},"west":{"uv":[33,117,39,123],"texture":0},"up":{"uv":[33,117,28,111],"texture":0},"down":{"uv":[38,111,33,117],"texture":0}},"type":"cube","uuid":"599ccb01-295b-cd0b-48e9-40be49f0ae5f"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.5,11,-3],"to":[8.5,17,3],"autouv":0,"color":4,"shade":false,"mirror_uv":true,"inflate":0.26,"origin":[5,0,0],"uv_offset":[22,111],"faces":{"north":{"uv":[33,117,28,123],"texture":0},"east":{"uv":[39,117,33,123],"texture":0},"south":{"uv":[44,117,39,123],"texture":0},"west":{"uv":[28,117,22,123],"texture":0},"up":{"uv":[28,117,33,111],"texture":0},"down":{"uv":[33,111,38,117],"texture":0}},"type":"cube","uuid":"8d88365f-0acb-d65c-2fab-b8b7f5fe1cb2"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10.89178019303095,20.488148003559964,-4],"to":[-4.891780193030948,23.488148003559964,4],"autouv":0,"color":5,"inflate":0.26,"origin":[0.10821980696905145,0.4881480035599667,0],"uv_offset":[28,100],"faces":{"north":{"uv":[36,108,42,111],"texture":0},"east":{"uv":[28,108,36,111],"texture":0},"south":{"uv":[50,108,56,111],"texture":0},"west":{"uv":[42,108,50,111],"texture":0},"up":{"uv":[42,108,36,100],"texture":0},"down":{"uv":[48,100,42,108],"texture":0}},"type":"cube","uuid":"c18bcc22-b2b9-9533-1866-c09d827ca95a"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[4.675340579092845,20.46444401067989,-4],"to":[10.67534057909285,23.46444401067989,4],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.26,"origin":[-0.32465942090715433,1.4644440106799004,0],"uv_offset":[28,100],"faces":{"north":{"uv":[42.00000000000001,108,36,111],"texture":0},"east":{"uv":[50.00000000000001,108,42.00000000000001,111],"texture":0},"south":{"uv":[56.000000000000014,108,50.00000000000001,111],"texture":0},"west":{"uv":[36,108,28,111],"texture":0},"up":{"uv":[36,108,42.00000000000001,100],"texture":0},"down":{"uv":[42.00000000000001,100,48.000000000000014,108],"texture":0}},"type":"cube","uuid":"826389ae-d829-501d-908d-17bfb8235b00"},{"name":"arm_l","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-10,21.5,-3],"to":[-5,26.5,3],"autouv":0,"color":5,"inflate":0.26,"origin":[0,0,0],"uv_offset":[22,89],"faces":{"north":{"uv":[28,95,33,100],"texture":0},"east":{"uv":[22,95,28,100],"texture":0},"south":{"uv":[39,95,44,100],"texture":0},"west":{"uv":[33,95,39,100],"texture":0},"up":{"uv":[33,95,28,89],"texture":0},"down":{"uv":[38,89,33,95],"texture":0}},"type":"cube","uuid":"77a4464a-5808-5702-9698-eefd6cc304a4"},{"name":"arm_r","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[5,21.5,-3],"to":[10,26.5,3],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.26,"origin":[0,0,0],"uv_offset":[22,89],"faces":{"north":{"uv":[33,95,28,100],"texture":0},"east":{"uv":[39,95,33,100],"texture":0},"south":{"uv":[44,95,39,100],"texture":0},"west":{"uv":[28,95,22,100],"texture":0},"up":{"uv":[28,95,33,89],"texture":0},"down":{"uv":[33,89,38,95],"texture":0}},"type":"cube","uuid":"29b307a4-f1da-ef81-43d4-85d1180b47bd"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-1.5,28,-6],"to":[1.5,34,6],"autouv":0,"color":3,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[30,0],"faces":{"north":{"uv":[42,12,45,18],"texture":0},"east":{"uv":[30,12,42,18],"texture":0},"south":{"uv":[57,12,60,18],"texture":0},"west":{"uv":[45,12,57,18],"texture":0},"up":{"uv":[45,12,42,0],"texture":0},"down":{"uv":[48,0,45,12],"texture":0}},"type":"cube","uuid":"47d543d3-b052-0790-1011-51d2638c9a85"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3,24,-5],"to":[5,29,-1],"autouv":0,"color":4,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[30,3],"faces":{"north":{"uv":[34,7,36,12],"texture":0},"east":{"uv":[30,7,34,12],"texture":0},"south":{"uv":[40,7,42,12],"texture":0},"west":{"uv":[36,7,40,12],"texture":0},"up":{"uv":[36,7,34,3],"texture":0},"down":{"uv":[38,3,36,7],"texture":0}},"type":"cube","uuid":"f9a86fb5-83ed-45ed-af17-4f7492604dc3"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,24,-5],"to":[-3,29,-1],"autouv":0,"color":1,"shade":false,"mirror_uv":true,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[30,3],"faces":{"north":{"uv":[36,7,34,12],"texture":0},"east":{"uv":[40,7,36,12],"texture":0},"south":{"uv":[42,7,40,12],"texture":0},"west":{"uv":[34,7,30,12],"texture":0},"up":{"uv":[34,7,36,3],"texture":0},"down":{"uv":[36,3,38,7],"texture":0}},"type":"cube","uuid":"2531a963-4c99-6346-b455-4fbd39465b48"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,29,-5],"to":[-1.5,32,5],"autouv":0,"color":0,"shade":false,"mirror_uv":true,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[26,34],"faces":{"north":{"uv":[39,44,36,47],"texture":0},"east":{"uv":[49,44,39,47],"texture":0},"south":{"uv":[52,44,49,47],"texture":0},"west":{"uv":[36,44,26,47],"texture":0},"up":{"uv":[36,44,39,34],"texture":0},"down":{"uv":[39,34,42,44],"texture":0}},"type":"cube","uuid":"fd6c61b9-9caa-e6b5-3985-28ee04620a1e"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4.5,24,1],"to":[4.5,29,5],"autouv":0,"color":0,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[26,47],"faces":{"north":{"uv":[30,51,39,56],"texture":0},"east":{"uv":[26,51,30,56],"texture":0},"south":{"uv":[43,51,52,56],"texture":0},"west":{"uv":[39,51,43,56],"texture":0},"up":{"uv":[39,51,30,47],"texture":0},"down":{"uv":[48,47,39,51],"texture":0}},"type":"cube","uuid":"08b7cbd0-6023-d93e-da2b-9850bbaad011"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1.5,29,-5],"to":[4.5,32,5],"autouv":0,"color":0,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[26,34],"faces":{"north":{"uv":[36,44,39,47],"texture":0},"east":{"uv":[26,44,36,47],"texture":0},"south":{"uv":[49,44,52,47],"texture":0},"west":{"uv":[39,44,49,47],"texture":0},"up":{"uv":[39,44,36,34],"texture":0},"down":{"uv":[42,34,39,44],"texture":0}},"type":"cube","uuid":"a6615daa-cab5-ef47-8b79-b01dcd06eeb7"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5.5,28,-3],"to":[-3.5,35,6],"autouv":0,"color":3,"mirror_uv":true,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[22,18],"faces":{"north":{"uv":[33,27,31,34],"texture":0},"east":{"uv":[42,27,33,34],"texture":0},"south":{"uv":[44,27,42,34],"texture":0},"west":{"uv":[31,27,22,34],"texture":0},"up":{"uv":[31,27,33,18],"texture":0},"down":{"uv":[33,18,35,27],"texture":0}},"type":"cube","uuid":"e2469891-be68-c92b-16ef-965643c99f72"},{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[3.5,28,-3],"to":[5.5,35,6],"autouv":0,"color":3,"inflate":0.25,"origin":[0,-1,0],"uv_offset":[22,18],"faces":{"north":{"uv":[31,27,33,34],"texture":0},"east":{"uv":[22,27,31,34],"texture":0},"south":{"uv":[42,27,44,34],"texture":0},"west":{"uv":[33,27,42,34],"texture":0},"up":{"uv":[33,27,31,18],"texture":0},"down":{"uv":[35,18,33,27],"texture":0}},"type":"cube","uuid":"61b6c855-69d4-2e4a-331b-1feb6712f87f"},{"name":"torso","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,21,-5],"to":[6,25,4],"autouv":0,"color":3,"inflate":0.25,"origin":[0,0,0],"uv_offset":[42,56],"faces":{"north":{"uv":[51,65,63,69],"texture":0},"east":{"uv":[42,65,51,69],"texture":0},"south":{"uv":[72,65,84,69],"texture":0},"west":{"uv":[63,65,72,69],"texture":0},"up":{"uv":[63,65,51,56],"texture":0},"down":{"uv":[75,56,63,65],"texture":0}},"type":"cube","uuid":"fc38f7ef-0f82-7dc8-66b2-8b99714b2306"}],"outliner":[{"name":"torso","origin":[0,24,0],"color":0,"uuid":"6d53fc4b-9733-f2b2-1b43-3a0c90df5db4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a6bebbdd-0fce-dc40-cd93-354ec465c1f8","5d40581d-109e-2e60-bd61-ffb41b6c3932",{"name":"thing","origin":[0,24,0],"rotation":[-15,0,0],"color":0,"uuid":"c5d1a2ab-3172-b48c-9bd1-2d8b75211bd3","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["afe4cb3b-6a8e-d24a-d20e-0b69d6adba2b","fc38f7ef-0f82-7dc8-66b2-8b99714b2306"]}]},{"name":"torso_glow","origin":[0,24,0],"color":0,"uuid":"e3291511-3989-cd44-6738-c23158206ed1","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"front_glow","origin":[0,24,0],"rotation":[-15,0,0],"color":0,"uuid":"e0ced102-77e8-5c30-afda-a692100e9040","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["c4733bfb-7a7b-d9b2-e218-a8b5d5a19711"]},{"name":"back_glow","origin":[0,24,0],"color":0,"uuid":"99a43f7b-7891-795f-a89f-d270c8f88049","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["4a14dcf3-2118-adff-1195-2eb2738082c2"]}]},{"name":"helmet","origin":[0,23,0],"color":0,"uuid":"e5eccdcb-78b6-781e-816b-94ff2349ad73","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["3089125a-f5e3-7877-fc43-b85e186ce70b","a6615daa-cab5-ef47-8b79-b01dcd06eeb7","b7860950-bc1e-89a6-14ea-307736ad4ae7","08b7cbd0-6023-d93e-da2b-9850bbaad011","e8386980-5d48-2ea5-3dd1-a648e2a0ff4a","fd6c61b9-9caa-e6b5-3985-28ee04620a1e","3bd9da5c-7989-1f80-5e63-635b80c88c6d","47d543d3-b052-0790-1011-51d2638c9a85","913e020d-1da4-292d-1425-6f05876e2cd9","33331ec9-2f34-a439-f264-dd9a996eb003","61b6c855-69d4-2e4a-331b-1feb6712f87f","e2469891-be68-c92b-16ef-965643c99f72","ef697b9b-6d23-00c0-c6b5-c67926376a59","a7821e2a-e474-6b75-3fb8-e1e5c2d97f78","2531a963-4c99-6346-b455-4fbd39465b48","f9a86fb5-83ed-45ed-af17-4f7492604dc3"]},{"name":"helmet_glow","origin":[0,24,0],"color":0,"uuid":"b3719fb6-3110-f2e7-aba5-0593b7e92089","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"left_glow","origin":[0,24,0],"rotation":[0,-5,0],"color":0,"uuid":"965007ac-d2a1-b4e8-4ff7-8a58a555e9f9","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d1dbedac-ec2c-1971-dca4-f8d078f3b897"]},{"name":"right_glow","origin":[0,24,0],"rotation":[0,5,0],"color":0,"uuid":"eeebc104-52ca-01bf-7ccb-01e2174e07ac","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["32362d84-7165-641f-a708-bf91894fb836"]}]},{"name":"right_shoulder","origin":[5,24,0],"color":0,"uuid":"0f385a6c-562e-d849-c500-db03f340fe63","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["e63c28ce-b6bb-8689-ffb2-b426bb3f9fdf","29b307a4-f1da-ef81-43d4-85d1180b47bd","6fd2ef76-94e2-9233-9acf-41cd99cd3141","8d88365f-0acb-d65c-2fab-b8b7f5fe1cb2",{"name":"right_shoulder_pad","origin":[3,22,0],"rotation":[0,0,-12.5],"color":0,"uuid":"c2a7b5c4-d5b1-d886-7717-a02b4d5db9d1","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["00e631ff-f900-631a-a662-8a2fb41ffcf7","826389ae-d829-501d-908d-17bfb8235b00"]}]},{"name":"right_shoulder_glow","origin":[5,24,0],"color":0,"uuid":"41982a8d-da4d-6469-8ea1-95182973cd97","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"right_shoulder_upper_glow","origin":[3,21,0],"rotation":[0,0,7.5],"color":0,"uuid":"b77268d2-9dba-6c8b-39dc-36a7cdb811da","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["70315f47-6aad-8c8c-d7ae-4e0bc9b67da7","75779268-a82d-12ea-3eb3-44fcc74905e6","d2140963-b7db-a7c6-196d-2cfe6fa43c1c"]},{"name":"right_shoulder_lower_glow","origin":[3,22,0],"color":0,"uuid":"e3bb18be-f8b6-1d4d-3c74-b087a68cf775","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["9075aad1-4a34-3807-7fad-4d01a9bb31a7"]}]},{"name":"left_shoulder","origin":[-5,24,0],"color":0,"uuid":"fb36ebbd-25ee-84af-2f7c-2207ab626898","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["a46bfb6e-39b7-05d8-3a76-67ab9a07b8f3","77a4464a-5808-5702-9698-eefd6cc304a4","614705f2-bcdb-a571-d28e-3beee15b32c4","599ccb01-295b-cd0b-48e9-40be49f0ae5f",{"name":"left_shoulder_pad","origin":[-3,22,0],"rotation":[0,0,12.5],"color":0,"uuid":"f22da9a2-86be-f982-22eb-0755f4cc42db","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d0262a70-c09f-b202-04d5-3c86e07aea07","c18bcc22-b2b9-9533-1866-c09d827ca95a"]}]},{"name":"left_shoulder_glow","origin":[-5,24,0],"color":0,"uuid":"c2b22c51-5995-3f10-f066-6f8bd20fa3d4","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"left_shoulder_upper_glow","origin":[-3,22,0],"rotation":[0,0,-7.5],"color":0,"uuid":"39b89b16-5965-1305-f126-355b76d91d1c","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["f85f775b-3c23-508e-2b92-f1339e9435d2","cff2a354-ba99-43ac-da5c-9ffe04600a54","072c91c3-4361-a39e-9ca6-b38d61f10fcc"]},{"name":"left_shoulder_lower_glow","origin":[-3,22,0],"color":0,"uuid":"232ea6f6-402a-c750-d6f0-8d5ce89e3665","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3e478bdb-889d-1afa-cef5-5603cc523608"]}]},{"name":"right_leg","origin":[1.9,12,0],"color":0,"uuid":"7be60e45-0384-3825-0285-c9861bcd56ae","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["b884bf21-499a-58ef-5da1-cce9f8200d0a",{"name":"right_thigh_guard1","origin":[2,10,0],"rotation":[0,0,65],"color":0,"uuid":"9d8032aa-9dd9-a803-7cb0-2d97f3b51f78","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["7db7922f-957c-5c15-3766-2f5c47a7baa0","1d4b8391-7c2e-f80a-ffad-da36d5cfccf8"]},{"name":"right_thigh_guard2","origin":[3,8,0],"rotation":[0,0,65],"color":0,"uuid":"16121f9e-6f81-d257-33b9-ecb8a5933447","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["dcb809c5-045e-4fab-9262-897659bf1be5","bf3bed52-8425-17a0-a0c4-6234570f74e3"]}]},{"name":"left_leg","origin":[-1.9,12,0],"color":0,"uuid":"71425f29-453c-ffed-e113-94521e5b6edd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["421781ab-9df5-6443-6f2a-4385c92db364",{"name":"left_thigh_guard1","origin":[-2,10,0],"rotation":[0,0,-65],"color":0,"uuid":"36fd541b-fef9-30dc-6c06-8f0f78a28d9a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["79b356fd-95c0-cdee-dadb-e079c06849af","5a908876-c46c-c04a-a3be-b203a597e5b9"]},{"name":"left_thigh_guard2","origin":[-3,8,0],"rotation":[0,0,-65],"color":0,"uuid":"d278ab93-4ab9-cffe-8258-7ca2008b3b12","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["97bdbb97-b84a-3531-0165-d37539e4cd75","71ca4e60-d252-6c66-07f0-7b9f56c6cd22"]}]},{"name":"right_boot","origin":[1.9,12,0],"color":0,"uuid":"1f0dd7f0-6db3-a61f-7f67-40146c30987c","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["4f9d7976-eeec-ccaa-b7a4-2a5aaa0c3b0f","8eadbf53-666c-76c6-e26d-198ff1216db5"]},{"name":"right_boot_glow","origin":[1.9,12,0],"color":0,"uuid":"c60cf9c3-83dc-f649-8df0-fdf25062a1d5","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["7099eabf-6cee-ce2d-a29b-76662ec479b9"]},{"name":"left_boot","origin":[-1.9,12,0],"color":0,"uuid":"31588fad-8410-af54-9d76-b841f0e91238","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["bcb251f9-0b90-a858-cbc2-eee3435b4ecc","6e8036e6-6e9f-cd79-7b25-ed5dd15f1d19"]},{"name":"left_boot_glow","origin":[-1.9,12,0],"color":0,"uuid":"97967112-9898-7aa7-db44-d332da690a53","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["1dee734b-2b9b-03b8-09ff-31caa0a16e0d"]},{"name":"codpiece","origin":[0,0,0],"color":0,"uuid":"22d6c7ca-a2a8-10b3-4475-e9960f789cc1","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["7903b96c-fb44-1e65-67e4-7f1d6d4f2fe7","8eab74a7-b7a1-0913-a8bb-27cc9beea861","d8ceb7eb-b81d-3fbc-27ee-0c75012d2c31","1ac0d074-190a-dfb1-9e4b-4df7f1a7a9db"]}],"textures":[{"path":"C:\\Users\\Hanna\\Desktop\\Mod-Stuff\\Malum-Mod\\src\\main\\resources\\assets\\malum\\textures\\armor\\malignant_stronghold.png","name":"malignant_stronghold.png","folder":"block","namespace":"","id":"0","width":128,"height":128,"uv_width":128,"uv_height":128,"particle":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"ff3ddc60-dd7c-0330-39dc-17c0c305532d","relative_path":"../../../../../../../../resources/assets/malum/textures/armor/malignant_stronghold.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/renderer/entity/bolt/AbstractBoltEntityRenderer.java b/src/main/java/com/sammy/malum/client/renderer/entity/bolt/AbstractBoltEntityRenderer.java index 21e1411e0..521ac38f9 100644 --- a/src/main/java/com/sammy/malum/client/renderer/entity/bolt/AbstractBoltEntityRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/entity/bolt/AbstractBoltEntityRenderer.java @@ -31,8 +31,16 @@ public AbstractBoltEntityRenderer(EntityRendererProvider.Context context, Color this.shadowStrength = 0; } - private static final ResourceLocation LIGHT_TRAIL = malumPath("textures/vfx/concentrated_trail.png"); - private static final RenderType TRAIL_TYPE = LodestoneRenderTypeRegistry.ADDITIVE_TEXTURE_TRIANGLE.applyAndCache(LIGHT_TRAIL); + protected static final ResourceLocation LIGHT_TRAIL = malumPath("textures/vfx/concentrated_trail.png"); + private static final RenderType TRAIL_TYPE = LodestoneRenderTypeRegistry.ADDITIVE_TEXTURE_TRIANGLE.apply(LIGHT_TRAIL); + + public RenderType getTrailRenderType() { + return TRAIL_TYPE; + } + + public float getAlphaMultiplier() { + return 1f; + } @Override public void render(T entity, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { @@ -43,7 +51,7 @@ public void render(T entity, float entityYaw, float partialTicks, PoseStack pose List spinningTrailPoints = entity.spinningTrailPointBuilder.getTrailPoints(); List trailPoints = entity.trailPointBuilder.getTrailPoints(); poseStack.pushPose(); - VertexConsumer lightBuffer = DELAYED_RENDER.getBuffer(TRAIL_TYPE); + VertexConsumer lightBuffer = DELAYED_RENDER.getBuffer(getTrailRenderType()); float x = (float) Mth.lerp(partialTicks, entity.xOld, entity.getX()); float y = (float) Mth.lerp(partialTicks, entity.yOld, entity.getY()); float z = (float) Mth.lerp(partialTicks, entity.zOld, entity.getZ()); @@ -52,7 +60,7 @@ public void render(T entity, float entityYaw, float partialTicks, PoseStack pose VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld().setPosColorTexLightmapDefaultFormat(); for (int i = 0; i < 2; i++) { float size = (0.2f + i * 0.2f) * effectScalar; - float alpha = (0.7f - i * 0.35f) * effectScalar; + float alpha = Mth.clamp((0.7f - i * 0.35f) * effectScalar * getAlphaMultiplier(), 0, 1); builder.setAlpha(alpha) .renderTrail(lightBuffer, poseStack, spinningTrailPoints, f -> size, f -> builder.setAlpha(alpha * f).setColor(ColorHelper.colorLerp(Easing.SINE_IN, f * 2f, secondaryColor, primaryColor))) .renderTrail(lightBuffer, poseStack, spinningTrailPoints, f -> 1.5f * size, f -> builder.setAlpha(alpha * f / 2f).setColor(ColorHelper.colorLerp(Easing.SINE_IN, f * 1.5f, secondaryColor, primaryColor))) @@ -65,7 +73,7 @@ public void render(T entity, float entityYaw, float partialTicks, PoseStack pose VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld().setPosColorTexLightmapDefaultFormat(); for (int i = 0; i < 2; i++) { float size = (0.3f + i * 0.3f) * effectScalar; - float alpha = (0.7f - i * 0.35f) * effectScalar; + float alpha = Mth.clamp((0.7f - i * 0.35f) * effectScalar * getAlphaMultiplier(), 0, 1); builder.setAlpha(alpha) .renderTrail(lightBuffer, poseStack, trailPoints, f -> size, f -> builder.setAlpha(alpha * f).setColor(ColorHelper.colorLerp(Easing.SINE_IN, f * 2f, secondaryColor, primaryColor))) .renderTrail(lightBuffer, poseStack, trailPoints, f -> 1.5f * size, f -> builder.setAlpha(alpha * f / 2f).setColor(ColorHelper.colorLerp(Easing.SINE_IN, f * 1.5f, secondaryColor, primaryColor))) diff --git a/src/main/java/com/sammy/malum/client/renderer/entity/bolt/DrainingBoltEntityRenderer.java b/src/main/java/com/sammy/malum/client/renderer/entity/bolt/DrainingBoltEntityRenderer.java new file mode 100644 index 000000000..480372cef --- /dev/null +++ b/src/main/java/com/sammy/malum/client/renderer/entity/bolt/DrainingBoltEntityRenderer.java @@ -0,0 +1,27 @@ +package com.sammy.malum.client.renderer.entity.bolt; + +import com.sammy.malum.common.entity.bolt.*; +import com.sammy.malum.common.item.curiosities.weapons.staff.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.*; +import team.lodestar.lodestone.registry.client.*; +import team.lodestar.lodestone.systems.rendering.rendeertype.*; + +public class DrainingBoltEntityRenderer extends AbstractBoltEntityRenderer { + + private static final RenderType TRAIL_TYPE = LodestoneRenderTypeRegistry.TRANSPARENT_TEXTURE_TRIANGLE.apply(LIGHT_TRAIL, ShaderUniformHandler.LUMITRANSPARENT); + + public DrainingBoltEntityRenderer(EntityRendererProvider.Context context) { + super(context, MalignantScepterItem.MALIGNANT_PURPLE, MalignantScepterItem.MALIGNANT_BLACK); + } + + @Override + public RenderType getTrailRenderType() { + return TRAIL_TYPE; + } + + @Override + public float getAlphaMultiplier() { + return 1.5f; + } +} diff --git a/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java b/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java index e025b3668..cef7a564f 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java @@ -93,27 +93,35 @@ public static void setupEntries() { VOID_ENTRIES.add(new BookEntry<>( "void.null_slate", -2, 3) .setWidgetConfig(w -> w.setIcon(NULL_SLATE).setStyle(BookWidgetStyle.SOULWOOD)) - .addPage(new HeadlineTextItemPage("void.null_slate", "void.null_slate.1", NULL_SLATE.get())) + .addPage(VoidTransmutationPage.fromOutput("void.null_slate", NULL_SLATE.get())) + .addPage(new TextPage("void.null_slate.1")) ); VOID_ENTRIES.add(new BookEntry<>( "void.void_salts", -1, 4) .setWidgetConfig(w -> w.setIcon(VOID_SALTS).setStyle(BookWidgetStyle.SOULWOOD)) - .addPage(new HeadlineTextItemPage("void.void_salts", "void.void_salts.1", VOID_SALTS.get())) + .addPage(VoidTransmutationPage.fromOutput("void.void_salts", VOID_SALTS.get())) + .addPage(new TextPage("void.void_salts.1")) ); VOID_ENTRIES.add(new BookEntry<>( "void.auric_embers", 1, 4) .setWidgetConfig(w -> w.setIcon(AURIC_EMBERS).setStyle(BookWidgetStyle.SOULWOOD)) - .addPage(new HeadlineTextItemPage("void.auric_embers", "void.auric_embers.1", AURIC_EMBERS.get())) + .addPage(VoidTransmutationPage.fromOutput("void.auric_embers", AURIC_EMBERS.get())) + .addPage(new TextPage("void.auric_embers.1")) ); VOID_ENTRIES.add(new BookEntry<>( "void.mnemonic_fragment", 2, 3) .setWidgetConfig(w -> w.setIcon(MNEMONIC_FRAGMENT).setStyle(BookWidgetStyle.SOULWOOD)) - .addPage(new HeadlineTextItemPage("void.mnemonic_fragment", "void.mnemonic_fragment.1", MNEMONIC_FRAGMENT.get())) + .addPage(new CyclingPage( + VoidTransmutationPage.fromInput("void.mnemonic_fragment", CLUSTER_OF_BRILLIANCE.get()), + VoidTransmutationPage.fromInput("void.mnemonic_fragment", CHUNK_OF_BRILLIANCE.get()) + )) + .addPage(new TextPage("void.mnemonic_fragment.1")) ); VOID_ENTRIES.add(new BookEntry<>( - "void.malignant_lead", 3, 3) + "void.malignant_lead", 6, 4) .setWidgetConfig(w -> w.setIcon(MALIGNANT_LEAD).setStyle(BookWidgetStyle.SOULWOOD)) - .addPage(new HeadlineTextItemPage("void.malignant_lead", "void.malignant_lead.1", MALIGNANT_LEAD.get())) + .addPage(VoidTransmutationPage.fromOutput("void.malignant_lead", MALIGNANT_LEAD.get())) + .addPage(new TextPage("void.malignant_lead.1")) ); VOID_ENTRIES.add(new BookEntry<>( @@ -146,8 +154,8 @@ public static void setupEntries() { .addPage(SpiritInfusionPage.fromOutput(RING_OF_THE_PLENTIFUL.get())) ); VOID_ENTRIES.add(new BookEntry<>( - "void.weight_of_worlds", 4, 6) - .setWidgetConfig(w -> w.setIcon(WEIGHT_OF_WORLDS).setStyle(BookWidgetStyle.SOULWOOD)) + "void.something2", 4, 6) + .setWidgetConfig(w -> w.setIcon(BARRIER).setStyle(BookWidgetStyle.SOULWOOD)) ); VOID_ENTRIES.add(new BookEntry<>( "void.something3", 2, 6) @@ -158,6 +166,28 @@ public static void setupEntries() { .setWidgetConfig(w -> w.setIcon(BARRIER).setStyle(BookWidgetStyle.SOULWOOD)) ); + VOID_ENTRIES.add(new BookEntry<>( + "void.malignant_alloy", 6, 7) + .setWidgetConfig(w -> w.setIcon(MALIGNANT_ALLOY_INGOT).setStyle(BookWidgetStyle.SOULWOOD)) + ); + + VOID_ENTRIES.add(new BookEntry<>( + "void.malignant_scepter", 5, 8) + .setWidgetConfig(w -> w.setIcon(MALIGNANT_SCEPTER).setStyle(BookWidgetStyle.SOULWOOD)) + ); + + VOID_ENTRIES.add(new BookEntry<>( + "void.weight_of_worlds", 7, 8) + .setWidgetConfig(w -> w.setIcon(WEIGHT_OF_WORLDS).setStyle(BookWidgetStyle.SOULWOOD)) + ); + + VOID_ENTRIES.add(new BookEntry<>( + "void.malignant_stronghold_armor", 6, 9) + .setWidgetConfig(w -> w.setIcon(MALIGNANT_STRONGHOLD_HELMET).setStyle(BookWidgetStyle.SOULWOOD)) + ); + + + VOID_ENTRIES.add(new BookEntry<>( "void.anomalous_design", 0, 7) .setWidgetConfig(w -> w.setIcon(ANOMALOUS_DESIGN).setStyle(BookWidgetStyle.SOULWOOD)) diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/VoidTransmutationPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/VoidTransmutationPage.java new file mode 100644 index 000000000..cba555f17 --- /dev/null +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/VoidTransmutationPage.java @@ -0,0 +1,67 @@ +package com.sammy.malum.client.screen.codex.pages; + +import com.sammy.malum.*; +import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.common.recipe.*; +import net.minecraft.client.*; +import net.minecraft.client.gui.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.item.*; +import net.minecraftforge.data.loading.*; + +import java.util.function.*; + +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; + +@SuppressWarnings("all") +public class VoidTransmutationPage extends BookPage { + private final String headlineTranslationKey; + private final FavorOfTheVoidRecipe recipe; + + public VoidTransmutationPage(String headlineTranslationKey, Predicate predicate) { + this(headlineTranslationKey, DatagenModLoader.isRunningDataGen() ? null : FavorOfTheVoidRecipe.getRecipe(Minecraft.getInstance().level, predicate)); + } + + public VoidTransmutationPage(String headlineTranslationKey, FavorOfTheVoidRecipe recipe) { + super(MalumMod.malumPath("textures/gui/book/pages/weeping_well_page.png")); + this.headlineTranslationKey = headlineTranslationKey; + this.recipe = recipe; + } + + public static VoidTransmutationPage fromInput(String headlineTranslationKey, Item inputItem) { + return new VoidTransmutationPage(headlineTranslationKey, s -> s.doesInputMatch(inputItem.getDefaultInstance())); + } + + public static VoidTransmutationPage fromOutput(String headlineTranslationKey, Item outputItem) { + return new VoidTransmutationPage(headlineTranslationKey, s -> s.doesOutputMatch(outputItem.getDefaultInstance())); + } + + public String headlineTranslationKey() { + return "malum.gui.book.entry.page.headline." + headlineTranslationKey; + } + + @Override + public boolean isValid() { + return recipe != null; + } + + @Override + public void renderLeft(Minecraft minecraft, GuiGraphics guiGraphics, EntryScreen screen, int mouseX, int mouseY, float partialTicks) { + int guiLeft = guiLeft(); + int guiTop = guiTop(); + Component component = Component.translatable(headlineTranslationKey()); + renderText(guiGraphics, component, guiLeft + 75 - minecraft.font.width(component.getString()) / 2, guiTop + 10); + renderItem(screen, guiGraphics, recipe.input, guiLeft + 67, guiTop + 44, mouseX, mouseY); + renderItem(screen, guiGraphics, recipe.output, guiLeft + 67, guiTop + 110, mouseX, mouseY); + } + + @Override + public void renderRight(Minecraft minecraft, GuiGraphics guiGraphics, EntryScreen screen, int mouseX, int mouseY, float partialTicks) { + int guiLeft = guiLeft(); + int guiTop = guiTop(); + Component component = Component.translatable(headlineTranslationKey()); + renderText(guiGraphics, component, guiLeft + 75 - minecraft.font.width(component.getString()) / 2, guiTop + 10); + renderItem(screen, guiGraphics, recipe.input, guiLeft + 209, guiTop + 44, mouseX, mouseY); + renderItem(screen, guiGraphics, recipe.output, guiLeft + 209, guiTop + 110, mouseX, mouseY); + } +} diff --git a/src/main/java/com/sammy/malum/common/effect/DeaconsFortuneEffect.java b/src/main/java/com/sammy/malum/common/effect/DeaconsFortuneEffect.java new file mode 100644 index 000000000..9c14c2930 --- /dev/null +++ b/src/main/java/com/sammy/malum/common/effect/DeaconsFortuneEffect.java @@ -0,0 +1,15 @@ +package com.sammy.malum.common.effect; + +import net.minecraft.world.effect.*; +import team.lodestar.lodestone.helpers.*; + +public class DeaconsFortuneEffect extends MobEffect { + public DeaconsFortuneEffect() { + super(MobEffectCategory.BENEFICIAL, ColorHelper.getColor(235, 207, 249)); + } + + @Override + public boolean isDurationEffectTick(int pDuration, int pAmplifier) { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/effect/SilencedEffect.java b/src/main/java/com/sammy/malum/common/effect/SilencedEffect.java new file mode 100644 index 000000000..3cbe3d9f0 --- /dev/null +++ b/src/main/java/com/sammy/malum/common/effect/SilencedEffect.java @@ -0,0 +1,36 @@ +package com.sammy.malum.common.effect; + +import com.sammy.malum.common.capability.*; +import com.sammy.malum.core.handlers.*; +import com.sammy.malum.registry.common.*; +import net.minecraft.world.effect.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.attributes.*; +import team.lodestar.lodestone.helpers.*; +import team.lodestar.lodestone.registry.common.*; + +public class SilencedEffect extends MobEffect { + public SilencedEffect() { + super(MobEffectCategory.HARMFUL, ColorHelper.getColor(20, 14, 22)); + addAttributeModifier(LodestoneAttributeRegistry.MAGIC_DAMAGE.get(), "16886dd3-5b79-4191-88a5-4597125b90be", -0.1f, AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier(LodestoneAttributeRegistry.MAGIC_PROFICIENCY.get(), "c7a4eea8-38ee-4b56-8623-02c9f4a8b363", -0.1f, AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier(LodestoneAttributeRegistry.MAGIC_RESISTANCE.get(), "90d9ba7f-4023-4b6a-88f0-d50ec5ee1040", -0.1f, AttributeModifier.Operation.MULTIPLY_TOTAL); + + addAttributeModifier(AttributeRegistry.SOUL_WARD_STRENGTH.get(), "c804e494-0f03-49e3-b9e1-c382ddd98927", -0.1f, AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier(AttributeRegistry.SOUL_WARD_CAP.get(), "e0e391f4-ca5c-4237-a261-fbcb85d2a491", -0.1f, AttributeModifier.Operation.MULTIPLY_TOTAL); + addAttributeModifier(AttributeRegistry.SOUL_WARD_RECOVERY_SPEED.get(), "c460be81-7c50-499d-b66f-ec7b78f917e4", -0.1f, AttributeModifier.Operation.MULTIPLY_TOTAL); + + addAttributeModifier(AttributeRegistry.ARCANE_RESONANCE.get(), "3c0373c4-179d-4c38-b54b-442e69c1fb1c", -0.1f, AttributeModifier.Operation.MULTIPLY_TOTAL); + } + + @Override + public void applyEffectTick(LivingEntity pLivingEntity, int pAmplifier) { + TouchOfDarknessHandler handler = MalumLivingEntityDataCapability.getCapability(pLivingEntity).touchOfDarknessHandler; + handler.afflict(10); + } + + @Override + public boolean isDurationEffectTick(int pDuration, int pAmplifier) { + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/entity/bolt/AbstractBoltProjectileEntity.java b/src/main/java/com/sammy/malum/common/entity/bolt/AbstractBoltProjectileEntity.java index b818ddc2e..9ac26cf03 100644 --- a/src/main/java/com/sammy/malum/common/entity/bolt/AbstractBoltProjectileEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/bolt/AbstractBoltProjectileEntity.java @@ -55,6 +55,10 @@ public void setData(Entity owner, float magicDamage, int spawnDelay) { public abstract ParticleEffectType getImpactParticleEffect(); + public void onDealDamage(LivingEntity target) { + + } + @Override protected void defineSynchedData() { this.getEntityData().define(DATA_FADING_AWAY, false); @@ -140,6 +144,7 @@ protected void onHitEntity(EntityHitResult result) { DamageSource source = DamageTypeRegistry.create(level(), DamageTypeRegistry.VOODOO, this, staffOwner); boolean success = target.hurt(source, magicDamage); if (success && target instanceof LivingEntity livingentity) { + onDealDamage(livingentity); ItemStack staff = getItem(); ItemHelper.applyEnchantments(staffOwner, livingentity, staff); int i = staff.getEnchantmentLevel(Enchantments.FIRE_ASPECT); diff --git a/src/main/java/com/sammy/malum/common/entity/bolt/AuricFlameBoltEntity.java b/src/main/java/com/sammy/malum/common/entity/bolt/AuricFlameBoltEntity.java index 9d5fe6daf..cb2e247f6 100644 --- a/src/main/java/com/sammy/malum/common/entity/bolt/AuricFlameBoltEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/bolt/AuricFlameBoltEntity.java @@ -97,7 +97,7 @@ public void tick() { @Override public void playSound(SoundEvent pSound, float pVolume, float pPitch) { super.playSound(pSound, pVolume, pPitch); - super.playSound(SoundRegistry.AURIC_FLAME_MOTIF.get(), pVolume+0.2f, pPitch+0.6f); + super.playSound(SoundRegistry.AURIC_FLAME_MOTIF.get(), pVolume+0.1f, pPitch+0.6f); } @Override diff --git a/src/main/java/com/sammy/malum/common/entity/bolt/DrainingBoltEntity.java b/src/main/java/com/sammy/malum/common/entity/bolt/DrainingBoltEntity.java new file mode 100644 index 000000000..63f0be963 --- /dev/null +++ b/src/main/java/com/sammy/malum/common/entity/bolt/DrainingBoltEntity.java @@ -0,0 +1,101 @@ +package com.sammy.malum.common.entity.bolt; + +import com.sammy.malum.common.item.curiosities.weapons.staff.*; +import com.sammy.malum.registry.client.*; +import com.sammy.malum.registry.common.*; +import com.sammy.malum.registry.common.entity.*; +import com.sammy.malum.registry.common.item.*; +import com.sammy.malum.visual_effects.*; +import com.sammy.malum.visual_effects.networked.*; +import net.minecraft.sounds.*; +import net.minecraft.world.effect.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.phys.*; +import net.minecraftforge.api.distmarker.*; +import team.lodestar.lodestone.helpers.*; +import team.lodestar.lodestone.systems.easing.*; +import team.lodestar.lodestone.systems.particle.*; +import team.lodestar.lodestone.systems.particle.builder.*; +import team.lodestar.lodestone.systems.particle.data.*; +import team.lodestar.lodestone.systems.particle.data.spin.*; +import team.lodestar.lodestone.systems.particle.render_types.*; + +import java.util.function.*; + +public class DrainingBoltEntity extends AbstractBoltProjectileEntity { + + public DrainingBoltEntity(Level level) { + super(EntityRegistry.DRAINING_BOLT.get(), level); + noPhysics = false; + } + + public DrainingBoltEntity(Level level, double pX, double pY, double pZ) { + this(level); + setPos(pX, pY, pZ); + noPhysics = false; + } + + @Override + public void onDealDamage(LivingEntity target) { + MobEffect silenced = MobEffectRegistry.SILENCED.get(); + MobEffectInstance effect = target.getEffect(silenced); + if (effect == null) { + target.addEffect(new MobEffectInstance(silenced, 300, 0, true, true, true)); + } else { + EntityHelper.amplifyEffect(effect, target, 1, 9); + EntityHelper.extendEffect(effect, target, 60, 600); + } + } + + @Override + public void playSound(SoundEvent pSound, float pVolume, float pPitch) { + super.playSound(pSound, pVolume, pPitch-0.2f); + super.playSound(SoundRegistry.DRAINING_MOTIF.get(), pVolume, pPitch-0.1f); + } + + @Override + public int getMaxAge() { + return 20; + } + + @Override + public ParticleEffectType getImpactParticleEffect() { + return ParticleEffectTypeRegistry.DRAINING_BOLT_IMPACT; + } + + @Override + protected Item getDefaultItem() { + return ItemRegistry.MALIGNANT_SCEPTER.get(); + } + + @OnlyIn(Dist.CLIENT) + @Override + public void spawnParticles() { + Level level = level(); + Vec3 position = position(); + float scalar = getVisualEffectScalar(); + Vec3 norm = getDeltaMovement().normalize().scale(0.05f); + var lightSpecs = SpiritLightSpecs.spiritLightSpecs(level, position, MalignantScepterItem.MALIGNANT_COLOR_DATA); + lightSpecs.getBuilder().multiplyLifetime(1.5f).setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT).setMotion(norm); + lightSpecs.getBloomBuilder().multiplyLifetime(1.5f).setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT).setMotion(norm); + lightSpecs.spawnParticles(); + final SpinParticleData spinData = SpinParticleData.createRandomDirection(random, RandomHelper.randomBetween(random, 0.25f, 0.5f)).randomSpinOffset(random).build(); + final Consumer behavior = p -> p.setParticleMotion(p.getParticleSpeed().scale(0.95f)); + DirectionalParticleBuilder.create(ParticleRegistry.SAW) + .setTransparencyData(GenericParticleData.create(0.4f * scalar, 0.2f * scalar, 0f).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) + .setSpinData(spinData) + .setScaleData(GenericParticleData.create(0.3f * scalar, 0).setEasing(Easing.SINE_IN_OUT).build()) + .setColorData(MalignantScepterItem.MALIGNANT_COLOR_DATA) + .setLifetime(Math.min(6 + age * 3, 24)) + .setDirection(getDeltaMovement().normalize()) + .enableNoClip() + .enableForcedSpawn() + .addTickActor(behavior) + .spawn(level, position.x, position.y, position.z) + .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) + .setTransparencyData(GenericParticleData.create(0.9f * scalar, 0.4f * scalar, 0f).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) + .spawn(level, position.x, position.y, position.z); + } +} \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/MalignantStrongholdArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/MalignantStrongholdArmorItem.java new file mode 100644 index 000000000..6937dea5a --- /dev/null +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/MalignantStrongholdArmorItem.java @@ -0,0 +1,51 @@ +package com.sammy.malum.common.item.curiosities.armor; + +import com.sammy.malum.client.cosmetic.*; +import com.sammy.malum.common.item.cosmetic.skins.*; +import com.sammy.malum.registry.client.*; +import net.minecraft.client.*; +import net.minecraft.client.model.*; +import net.minecraft.util.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.item.*; +import net.minecraftforge.api.distmarker.*; +import net.minecraftforge.client.extensions.common.*; +import team.lodestar.lodestone.systems.model.*; + +import java.util.function.*; + +import static com.sammy.malum.registry.common.item.ArmorTiers.ArmorTierEnum.*; + +public class MalignantStrongholdArmorItem extends MalumArmorItem { + public MalignantStrongholdArmorItem(Type slot, Properties builder) { + super(MALIGNANT_ALLOY, slot, builder); + } + + public String getTexture() { + return "malignant_stronghold"; + } + + @OnlyIn(Dist.CLIENT) + @Override + public void initializeClient(Consumer consumer) { + consumer.accept(new IClientItemExtensions() { + @Override + public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack itemStack, EquipmentSlot armorSlot, HumanoidModel _default) { + float pticks = Minecraft.getInstance().getFrameTime(); + float f = Mth.rotLerp(pticks, entity.yBodyRotO, entity.yBodyRot); + float f1 = Mth.rotLerp(pticks, entity.yHeadRotO, entity.yHeadRot); + float netHeadYaw = f1 - f; + float netHeadPitch = Mth.lerp(pticks, entity.xRotO, entity.getXRot()); + ArmorSkin skin = ArmorSkin.getAppliedItemSkin(itemStack); + LodestoneArmorModel model = ModelRegistry.MALIGNANT_LEAD_ARMOR; + if (skin != null) { + model = ArmorSkinRenderingData.RENDERING_DATA.apply(skin).getModel(entity); + } + model.slot = armorSlot; + model.copyFromDefault(_default); + model.setupAnim(entity, entity.walkAnimation.position(), entity.walkAnimation.speed(), entity.tickCount + pticks, netHeadYaw, netHeadPitch); + return model; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java index e42bde177..99cc7ac2f 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java @@ -37,11 +37,6 @@ public ImmutableMultimap.Builder createExtraAttrib return builder; } - @Override - public String getTextureLocation() { - return "malum:textures/armor/"; - } - public String getTexture() { return "spirit_hunter_reforged"; } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java index 90ab2901d..4038f94d5 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java @@ -38,7 +38,7 @@ public ImmutableMultimap.Builder createExtraAttrib } public String getTexture() { - return "malignant_stronghold"; + return "soul_stained_steel_reforged"; } @OnlyIn(Dist.CLIENT) @@ -53,7 +53,7 @@ public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack float netHeadYaw = f1 - f; float netHeadPitch = Mth.lerp(pticks, entity.xRotO, entity.getXRot()); ArmorSkin skin = ArmorSkin.getAppliedItemSkin(itemStack); - LodestoneArmorModel model = ModelRegistry.MALIGNANT_LEAD_ARMOR; + LodestoneArmorModel model = ModelRegistry.SOUL_STAINED_ARMOR; if (skin != null) { model = ArmorSkinRenderingData.RENDERING_DATA.apply(skin).getModel(entity); } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/WeightOfWorldsItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/WeightOfWorldsItem.java index ff0580e86..a5b68bcc7 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/WeightOfWorldsItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/WeightOfWorldsItem.java @@ -1,10 +1,44 @@ package com.sammy.malum.common.item.curiosities.weapons; +import com.sammy.malum.common.item.curiosities.weapons.scythe.*; +import com.sammy.malum.registry.client.*; +import com.sammy.malum.registry.common.*; +import net.minecraft.world.effect.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraftforge.event.entity.living.*; +import team.lodestar.lodestone.systems.item.*; import team.lodestar.lodestone.systems.item.tools.*; -public class WeightOfWorldsItem extends LodestoneAxeItem { +public class WeightOfWorldsItem extends LodestoneAxeItem implements IEventResponderItem { public WeightOfWorldsItem(Tier material, int attackDamage, float attackSpeed, Properties properties) { super(material, attackDamage, attackSpeed, properties); } + + + @Override + public void killEvent(LivingDeathEvent event, LivingEntity attacker, LivingEntity target, ItemStack stack) { + attacker.addEffect(new MobEffectInstance(MobEffectRegistry.DEACONS_FORTUNE.get(), 200)); + } + + @Override + public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity target, ItemStack stack) { + if (attacker != null) { + if (attacker instanceof Player player) { + MalumScytheItem.spawnSweepParticles(player, ParticleRegistry.SCYTHE_CUT_PARTICLE.get()); + } + final Level level = attacker.level(); + level.playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.WEIGHT_OF_WORLDS_SLASH.get(), attacker.getSoundSource(), 1, 0.5f); + final MobEffect effect = MobEffectRegistry.DEACONS_FORTUNE.get(); + if (attacker.hasEffect(effect) || level.random.nextFloat() < 0.25f) { + event.setAmount(event.getAmount()*3); + level.playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.MALIGNANT_METAL_RESONATES.get(), attacker.getSoundSource(), 2, 0.5f); + level.playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.MALIGNANT_METAL_RESONATES.get(), attacker.getSoundSource(), 2, 1.5f); + level.playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.DRAINING_MOTIF.get(), attacker.getSoundSource(), 2, 0.5f); + attacker.removeEffect(effect); + } + } + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/scythe/MalumScytheItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/scythe/MalumScytheItem.java index 216350852..4331a0899 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/scythe/MalumScytheItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/scythe/MalumScytheItem.java @@ -59,7 +59,7 @@ public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity }); } - public void spawnSweepParticles(Player player, SimpleParticleType type) { + public static void spawnSweepParticles(Player player, SimpleParticleType type) { double d0 = (-Mth.sin(player.getYRot() * ((float) Math.PI / 180F))); double d1 = Mth.cos(player.getYRot() * ((float) Math.PI / 180F)); if (player.level() instanceof ServerLevel serverLevel) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AbstractStaffItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AbstractStaffItem.java index b9b9d61a5..60619b0c3 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AbstractStaffItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AbstractStaffItem.java @@ -4,12 +4,10 @@ import com.sammy.malum.common.capability.*; import com.sammy.malum.common.enchantment.*; import com.sammy.malum.common.entity.bolt.*; +import com.sammy.malum.common.item.curiosities.weapons.scythe.*; import com.sammy.malum.core.systems.item.*; import com.sammy.malum.registry.client.*; import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.core.particles.*; -import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.stats.*; import net.minecraft.util.*; @@ -56,7 +54,7 @@ public ImmutableMultimap.Builder createExtraAttrib public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity target, ItemStack stack) { if (attacker instanceof Player player && !(event.getSource().getDirectEntity() instanceof AbstractBoltProjectileEntity)) { Level level = player.level(); - spawnSweepParticles(player, ParticleRegistry.STAFF_SLAM_PARTICLE.get()); + MalumScytheItem.spawnSweepParticles(player, ParticleRegistry.STAFF_SLAM_PARTICLE.get()); level.playSound(null, target.blockPosition(), SoundRegistry.STAFF_STRIKES.get(), attacker.getSoundSource(), 0.75f, Mth.nextFloat(level.random, 0.5F, 1F)); if (event.getSource().is(LodestoneDamageTypeTags.IS_MAGIC)) { ReplenishingEnchantment.replenishStaffCooldown(attacker, stack); @@ -77,7 +75,7 @@ public void releaseUsing(ItemStack pStack, Level pLevel, LivingEntity pLivingEnt if (pLivingEntity instanceof Player player) { player.awardStat(Stats.ITEM_USED.get(this)); if (!player.getAbilities().instabuild) { - pStack.hurtAndBreak(1, player, (p_220009_1_) -> { + pStack.hurtAndBreak(2, player, (p_220009_1_) -> { p_220009_1_.broadcastBreakEvent(hand); }); final MalumPlayerDataCapability capability = MalumPlayerDataCapability.getCapability(player); @@ -144,14 +142,6 @@ public UseAnim getUseAnimation(ItemStack pStack) { return UseAnim.BOW; } - public void spawnSweepParticles(Player player, SimpleParticleType type) { - double d0 = (-Mth.sin(player.getYRot() * ((float) Math.PI / 180F))); - double d1 = Mth.cos(player.getYRot() * ((float) Math.PI / 180F)); - if (player.level() instanceof ServerLevel serverLevel) { - serverLevel.sendParticles(type, player.getX() + d0, player.getY(0.5D), player.getZ() + d1, 0, d0, 0.0D, d1, 0.0D); - } - } - public Vec3 getProjectileSpawnPos(LivingEntity player, InteractionHand hand, float distance, float spread) { int angle = hand == InteractionHand.MAIN_HAND ? 225 : 90; double radians = Math.toRadians(angle - player.yHeadRot); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AuricFlameStaffItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AuricFlameStaffItem.java index 861539383..498ad2d13 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AuricFlameStaffItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/AuricFlameStaffItem.java @@ -3,6 +3,7 @@ import com.sammy.malum.common.entity.bolt.*; import com.sammy.malum.common.entity.nitrate.*; import com.sammy.malum.registry.client.*; +import com.sammy.malum.registry.common.*; import net.minecraft.util.*; import net.minecraft.world.*; import net.minecraft.world.entity.*; @@ -10,6 +11,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.phys.*; import net.minecraftforge.api.distmarker.*; +import net.minecraftforge.event.entity.living.*; import team.lodestar.lodestone.helpers.*; import team.lodestar.lodestone.registry.common.*; import team.lodestar.lodestone.systems.easing.*; @@ -27,25 +29,13 @@ public AuricFlameStaffItem(Tier tier, float magicDamage, Properties builderIn) { super(tier, 20, magicDamage, builderIn); } - @OnlyIn(Dist.CLIENT) @Override - public void spawnChargeParticles(Level pLevel, LivingEntity pLivingEntity, Vec3 pos, ItemStack pStack, float pct) { - RandomSource random = pLevel.random; - final SpinParticleData spinData = SpinParticleData.createRandomDirection(random, 0.25f, 0.5f).setSpinOffset(RandomHelper.randomBetween(random, 0f, 6.28f)).build(); - DirectionalParticleBuilder.create(ParticleRegistry.HEXAGON) - .setTransparencyData(GenericParticleData.create(0.5f * pct, 0f).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) - .setScaleData(GenericParticleData.create(0.35f * pct, 0).setEasing(Easing.SINE_IN_OUT).build()) - .setSpinData(spinData) - .setColorData(AURIC_COLOR_DATA) - .setLifetime(5) - .setDirection(pLivingEntity.getLookAngle().normalize()) - .setMotion(pLivingEntity.getLookAngle().normalize().scale(0.05f)) - .enableNoClip() - .enableForcedSpawn() - .setLifeDelay(2) - .spawn(pLevel, pos.x, pos.y, pos.z) - .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) - .spawn(pLevel, pos.x, pos.y, pos.z);; + public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity target, ItemStack stack) { + if (!(event.getSource().getDirectEntity() instanceof AbstractBoltProjectileEntity)) { + target.setSecondsOnFire(4); + attacker.level().playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.AURIC_FLAME_MOTIF.get(), attacker.getSoundSource(), 1, 1.25f); + } + super.hurtEvent(event, attacker, target, stack); } @Override @@ -79,4 +69,25 @@ public void fireProjectile(LivingEntity player, ItemStack stack, Level level, In entity.setDeltaMovement(entity.getDeltaMovement().add(left.scale(spread))); level.addFreshEntity(entity); } + + @OnlyIn(Dist.CLIENT) + @Override + public void spawnChargeParticles(Level pLevel, LivingEntity pLivingEntity, Vec3 pos, ItemStack pStack, float pct) { + RandomSource random = pLevel.random; + final SpinParticleData spinData = SpinParticleData.createRandomDirection(random, 0.25f, 0.5f).setSpinOffset(RandomHelper.randomBetween(random, 0f, 6.28f)).build(); + DirectionalParticleBuilder.create(ParticleRegistry.HEXAGON) + .setTransparencyData(GenericParticleData.create(0.5f * pct, 0f).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) + .setScaleData(GenericParticleData.create(0.35f * pct, 0).setEasing(Easing.SINE_IN_OUT).build()) + .setSpinData(spinData) + .setColorData(AURIC_COLOR_DATA) + .setLifetime(5) + .setDirection(pLivingEntity.getLookAngle().normalize()) + .setMotion(pLivingEntity.getLookAngle().normalize().scale(0.05f)) + .enableNoClip() + .enableForcedSpawn() + .setLifeDelay(2) + .spawn(pLevel, pos.x, pos.y, pos.z) + .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) + .spawn(pLevel, pos.x, pos.y, pos.z);; + } } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/MalignantScepterItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/MalignantScepterItem.java new file mode 100644 index 000000000..77ef4fd0d --- /dev/null +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/staff/MalignantScepterItem.java @@ -0,0 +1,112 @@ +package com.sammy.malum.common.item.curiosities.weapons.staff; + +import com.sammy.malum.common.entity.bolt.*; +import com.sammy.malum.registry.client.*; +import com.sammy.malum.registry.common.*; +import net.minecraft.util.*; +import net.minecraft.world.*; +import net.minecraft.world.effect.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.phys.*; +import net.minecraftforge.api.distmarker.*; +import net.minecraftforge.event.entity.living.*; +import team.lodestar.lodestone.helpers.*; +import team.lodestar.lodestone.registry.common.*; +import team.lodestar.lodestone.systems.easing.*; +import team.lodestar.lodestone.systems.particle.builder.*; +import team.lodestar.lodestone.systems.particle.data.*; +import team.lodestar.lodestone.systems.particle.data.color.*; +import team.lodestar.lodestone.systems.particle.data.spin.*; +import team.lodestar.lodestone.systems.particle.render_types.*; + +import java.awt.*; + +public class MalignantScepterItem extends AbstractStaffItem { + + + public static final Color MALIGNANT_PURPLE = new Color(97, 19, 88); + public static final Color MALIGNANT_BLACK = new Color(26, 14, 22); + public static final ColorParticleData MALIGNANT_COLOR_DATA = ColorParticleData.create(MALIGNANT_PURPLE, MALIGNANT_BLACK).setEasing(Easing.BOUNCE_IN_OUT).setCoefficient(1.2f).build(); + + public MalignantScepterItem(Tier tier, float magicDamage, Properties builderIn) { + super(tier, 15, magicDamage, builderIn); + } + + @Override + public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity target, ItemStack stack) { + if (!(event.getSource().getDirectEntity() instanceof AbstractBoltProjectileEntity)) { + MobEffect silenced = MobEffectRegistry.SILENCED.get(); + MobEffectInstance effect = target.getEffect(silenced); + if (effect == null) { + target.addEffect(new MobEffectInstance(silenced, 300, 1, true, true, true)); + } else { + EntityHelper.amplifyEffect(effect, target, 2, 9); + EntityHelper.extendEffect(effect, target, 60, 600); + } + attacker.level().playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.DRAINING_MOTIF.get(), attacker.getSoundSource(), 1, 1.25f); + } + super.hurtEvent(event, attacker, target, stack); + } + + @Override + public int getCooldownDuration(Level level, LivingEntity livingEntity) { + return 60; + } + + @Override + public int getProjectileCount(Level level, LivingEntity livingEntity, float pct) { + return pct == 1f ? 2 : 0; + } + + @Override + public void fireProjectile(LivingEntity player, ItemStack stack, Level level, InteractionHand hand, float chargePercentage, int count) { + int spawnDelay = count * 5; + float velocity = 4f; + float magicDamage = (float) player.getAttributes().getValue(LodestoneAttributeRegistry.MAGIC_DAMAGE.get()) / 2f; + Vec3 pos = getProjectileSpawnPos(player, hand, 0.5f, 0.5f); + for (int i = 0; i < 8; i++) { + float xSpread = RandomHelper.randomBetween(level.random, -0.25f, 0.25f); + float ySpread = RandomHelper.randomBetween(level.random, -0.05f, 0.05f); + DrainingBoltEntity entity = new DrainingBoltEntity(level, pos.x, pos.y, pos.z); + if (i > 1) { + entity.setSilent(true); + } + entity.setData(player, magicDamage, spawnDelay); + entity.setItem(stack); + + entity.shootFromRotation(player, player.getXRot(), player.getYRot(), 0, velocity, 0F); + + Vec3 projectileDirection = entity.getDeltaMovement(); + float yRot = ((float) (Mth.atan2(projectileDirection.x, projectileDirection.z) * (double) (180F / (float) Math.PI))); + float yaw = (float) Math.toRadians(yRot); + Vec3 left = new Vec3(-Math.cos(yaw), 0, Math.sin(yaw)); + Vec3 up = left.cross(projectileDirection); + entity.setDeltaMovement(entity.getDeltaMovement().add(left.scale(xSpread)).add(up.scale(ySpread))); + + + level.addFreshEntity(entity); + } + } + + @OnlyIn(Dist.CLIENT) + @Override + public void spawnChargeParticles(Level pLevel, LivingEntity pLivingEntity, Vec3 pos, ItemStack pStack, float pct) { + RandomSource random = pLevel.random; + final SpinParticleData spinData = SpinParticleData.createRandomDirection(random, 0.25f, 0.5f).setSpinOffset(RandomHelper.randomBetween(random, 0f, 6.28f)).build(); + DirectionalParticleBuilder.create(ParticleRegistry.CIRCLE) + .setTransparencyData(GenericParticleData.create(0.8f * pct, 0f).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) + .setSpinData(spinData) + .setScaleData(GenericParticleData.create(0.3f * pct, 0).setEasing(Easing.SINE_IN_OUT).build()) + .setColorData(ColorParticleData.create(MALIGNANT_BLACK, MALIGNANT_BLACK).build()) + .setLifetime(5) + .setLifeDelay(2) + .setDirection(pLivingEntity.getLookAngle().normalize()) + .setMotion(pLivingEntity.getLookAngle().normalize().scale(0.05f)) + .enableNoClip() + .enableForcedSpawn() + .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) + .spawn(pLevel, pos.x, pos.y, pos.z); + } +} diff --git a/src/main/java/com/sammy/malum/common/sound/RareEarthSoundType.java b/src/main/java/com/sammy/malum/common/sound/RareEarthSoundType.java index 72d32f170..ef93cdb23 100644 --- a/src/main/java/com/sammy/malum/common/sound/RareEarthSoundType.java +++ b/src/main/java/com/sammy/malum/common/sound/RareEarthSoundType.java @@ -1,21 +1,18 @@ package com.sammy.malum.common.sound; -import com.sammy.malum.MalumMod; -import com.sammy.malum.registry.common.SoundRegistry; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.MultiPlayerGameMode; -import net.minecraft.client.resources.sounds.SimpleSoundInstance; -import net.minecraft.core.BlockPos; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import team.lodestar.lodestone.systems.sound.ExtendedSoundType; +import com.sammy.malum.*; +import com.sammy.malum.registry.common.*; +import net.minecraft.client.*; +import net.minecraft.client.multiplayer.*; +import net.minecraft.client.resources.sounds.*; +import net.minecraft.core.*; +import net.minecraft.sounds.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.level.*; +import net.minecraftforge.api.distmarker.*; +import team.lodestar.lodestone.systems.sound.*; -import java.util.function.Supplier; +import java.util.function.*; public class RareEarthSoundType extends ExtendedSoundType { public RareEarthSoundType(float volumeIn, float pitchIn, Supplier breakSoundIn, Supplier stepSoundIn, Supplier placeSoundIn, Supplier hitSoundIn, Supplier fallSoundIn) { @@ -24,12 +21,12 @@ public RareEarthSoundType(float volumeIn, float pitchIn, Supplier br @Override public void onPlayBreakSound(Level level, BlockPos pos) { - level.playLocalSound(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, SoundRegistry.CTHONIC_GOLD_BREAK.get(), SoundSource.BLOCKS, (getVolume() + 1.0F) / 4.0F, 0.95F - level.random.nextFloat() * 0.4f, false); + level.playLocalSound(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, SoundRegistry.CTHONIC_GOLD_BREAK.get(), SoundSource.BLOCKS, (getVolume() + 1.0F) / 2.0F, 0.95F - level.random.nextFloat() * 0.4f, false); } @Override public void onPlayPlaceSound(Level level, BlockPos pos, Player player) { - level.playSound(player, pos, SoundRegistry.CTHONIC_GOLD_PLACE.get(), SoundSource.BLOCKS, (getVolume() + 2.0F) / 4.0F, 1.05f - level.random.nextFloat() * 0.4f); + level.playSound(player, pos, SoundRegistry.CTHONIC_GOLD_PLACE.get(), SoundSource.BLOCKS, (getVolume() + 2.0F) / 2.0F, 1.05f - level.random.nextFloat() * 0.4f); } @Override @@ -38,9 +35,9 @@ public void onPlayHitSound(BlockPos pos) { MultiPlayerGameMode gameMode = Minecraft.getInstance().gameMode; if (gameMode != null) { float progress = gameMode.destroyProgress; - float volume = (getVolume() + progress * progress * 4f) / 12f; + float volume = (getVolume() + progress * progress * 4f) / 8f; float pitch = getPitch() * (0.5f + 0.15f * progress); - Minecraft.getInstance().getSoundManager().play(new SimpleSoundInstance(SoundEvents.NETHER_GOLD_ORE_HIT, SoundSource.BLOCKS, volume, pitch, MalumMod.RANDOM, pos)); + Minecraft.getInstance().getSoundManager().play(new SimpleSoundInstance(SoundRegistry.QUARTZ_CLUSTER_BLOCK_HIT.get(), SoundSource.BLOCKS, volume, pitch, MalumMod.RANDOM, pos)); } } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java b/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java index a2aa9d5a4..e3f676f27 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java @@ -164,7 +164,8 @@ protected void registerStatesAndModels() { BLOCK_OF_RAW_SOULSTONE, BLOCK_OF_SOULSTONE, BLOCK_OF_CTHONIC_GOLD, BLOCK_OF_ARCANE_CHARCOAL, BLOCK_OF_HALLOWED_GOLD, BLOCK_OF_ASTRAL_WEAVE, BLOCK_OF_HEX_ASH, MASS_OF_BLIGHTED_GUNK, BLOCK_OF_CURSED_GRIT, RUNIC_SAP_BLOCK, CURSED_SAP_BLOCK, BLOCK_OF_BLAZING_QUARTZ, - BLOCK_OF_BRILLIANCE, BLOCK_OF_NULL_SLATE, BLOCK_OF_VOID_SALTS, BLOCK_OF_MNEMONIC_FRAGMENT); + BLOCK_OF_BRILLIANCE, BLOCK_OF_NULL_SLATE, BLOCK_OF_VOID_SALTS, BLOCK_OF_MNEMONIC_FRAGMENT, + BLOCK_OF_MALIGNANT_ALLOY); setTexturePath("blight/"); MalumBlockStateSmithTypes.BLIGHTED_BLOCK.act(data, BLIGHTED_SOIL); diff --git a/src/main/java/com/sammy/malum/data/item/MalumItemTags.java b/src/main/java/com/sammy/malum/data/item/MalumItemTags.java index 49abc6e55..0bcd4e1d1 100644 --- a/src/main/java/com/sammy/malum/data/item/MalumItemTags.java +++ b/src/main/java/com/sammy/malum/data/item/MalumItemTags.java @@ -94,10 +94,10 @@ protected void addTags(HolderLookup.Provider pProvider) { tag(SOULWOOD_LOGS).add(SOULWOOD_LOG.get(), STRIPPED_SOULWOOD_LOG.get(), SOULWOOD.get(), STRIPPED_SOULWOOD.get(), EXPOSED_SOULWOOD_LOG.get(), REVEALED_SOULWOOD_LOG.get(), BLIGHTED_SOULWOOD.get()); tag(SCYTHE).add(CRUDE_SCYTHE.get(), SOUL_STAINED_STEEL_SCYTHE.get(), CREATIVE_SCYTHE.get()); - tag(STAFF).add(MNEMONIC_HEX_STAFF.get(), STAFF_OF_THE_AURIC_FLAME.get()); + tag(STAFF).add(MNEMONIC_HEX_STAFF.get(), STAFF_OF_THE_AURIC_FLAME.get(), MALIGNANT_SCEPTER.get()); - tag(SOUL_HUNTER_WEAPON).add(MNEMONIC_HEX_STAFF.get(), STAFF_OF_THE_AURIC_FLAME.get()); - tag(SOUL_HUNTER_WEAPON).add(TYRVING.get(), CRUDE_SCYTHE.get(), SOUL_STAINED_STEEL_SCYTHE.get(), CREATIVE_SCYTHE.get()); + tag(SOUL_HUNTER_WEAPON).add(MNEMONIC_HEX_STAFF.get(), STAFF_OF_THE_AURIC_FLAME.get(), MALIGNANT_SCEPTER.get()); + tag(SOUL_HUNTER_WEAPON).add(TYRVING.get(), CRUDE_SCYTHE.get(), SOUL_STAINED_STEEL_SCYTHE.get(), CREATIVE_SCYTHE.get(), WEIGHT_OF_WORLDS.get()); tag(SOUL_HUNTER_WEAPON).add(SOUL_STAINED_STEEL_AXE.get(), SOUL_STAINED_STEEL_PICKAXE.get(), SOUL_STAINED_STEEL_SHOVEL.get(), SOUL_STAINED_STEEL_SWORD.get(), SOUL_STAINED_STEEL_HOE.get(), SOUL_STAINED_STEEL_KNIFE.get()); tag(Tags.Items.NUGGETS).add(COPPER_NUGGET.get(), HALLOWED_GOLD_NUGGET.get(), SOUL_STAINED_STEEL_NUGGET.get()); diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java index c8b5814ba..f609759f5 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java @@ -484,6 +484,60 @@ protected static void buildRecipes(Consumer consumer) { .addSpirit(INFERNAL_SPIRIT, 4) .build(consumer); + new SpiritInfusionRecipeBuilder(Ingredient.of(Tags.Items.INGOTS_IRON), 4, ItemRegistry.MALIGNANT_ALLOY_INGOT.get(), 1) + .addExtraItem(ItemRegistry.MALIGNANT_LEAD.get(), 2) + .addExtraItem(Items.NETHERITE_SCRAP, 3) + .addSpirit(EARTHEN_SPIRIT, 16) + .addSpirit(ELDRITCH_SPIRIT, 4) + .build(consumer); + + new SpiritInfusionRecipeBuilder(ItemRegistry.MNEMONIC_HEX_STAFF.get(), 1, ItemRegistry.MALIGNANT_SCEPTER.get(), 1) + .addExtraItem(ItemRegistry.MALIGNANT_ALLOY_INGOT.get(), 2) + .addExtraItem(ItemRegistry.VOID_SALTS.get(), 8) + .addSpirit(AQUEOUS_SPIRIT, 32) + .addSpirit(WICKED_SPIRIT, 32) + .addSpirit(ELDRITCH_SPIRIT, 16) + .build(consumer); + + new SpiritInfusionRecipeBuilder(Items.IRON_AXE, 1, ItemRegistry.WEIGHT_OF_WORLDS.get(), 1) + .addExtraItem(ItemRegistry.MALIGNANT_ALLOY_INGOT.get(), 2) + .addSpirit(EARTHEN_SPIRIT, 32) + .addSpirit(WICKED_SPIRIT, 32) + .addSpirit(ELDRITCH_SPIRIT, 16) + .build(consumer); + + new SpiritInfusionRecipeBuilder(Items.IRON_HELMET, 1, ItemRegistry.MALIGNANT_STRONGHOLD_HELMET.get(), 1) + .addExtraItem(ItemRegistry.MALIGNANT_ALLOY_PLATING.get(), 3) + .addExtraItem(ItemRegistry.MNEMONIC_FRAGMENT.get(), 8) + .addSpirit(EARTHEN_SPIRIT, 32) + .addSpirit(WICKED_SPIRIT, 32) + .addSpirit(ELDRITCH_SPIRIT, 16) + .build(consumer); + + new SpiritInfusionRecipeBuilder(Items.IRON_CHESTPLATE, 1, ItemRegistry.MALIGNANT_STRONGHOLD_CHESTPLATE.get(), 1) + .addExtraItem(ItemRegistry.MALIGNANT_ALLOY_PLATING.get(), 3) + .addExtraItem(ItemRegistry.MNEMONIC_FRAGMENT.get(), 8) + .addSpirit(EARTHEN_SPIRIT, 32) + .addSpirit(WICKED_SPIRIT, 32) + .addSpirit(ELDRITCH_SPIRIT, 16) + .build(consumer); + + new SpiritInfusionRecipeBuilder(Items.IRON_LEGGINGS, 1, ItemRegistry.MALIGNANT_STRONGHOLD_LEGGINGS.get(), 1) + .addExtraItem(ItemRegistry.MALIGNANT_ALLOY_PLATING.get(), 3) + .addExtraItem(ItemRegistry.MNEMONIC_FRAGMENT.get(), 8) + .addSpirit(EARTHEN_SPIRIT, 32) + .addSpirit(WICKED_SPIRIT, 32) + .addSpirit(ELDRITCH_SPIRIT, 16) + .build(consumer); + + new SpiritInfusionRecipeBuilder(Items.IRON_BOOTS, 1, ItemRegistry.MALIGNANT_STRONGHOLD_BOOTS.get(), 1) + .addExtraItem(ItemRegistry.MALIGNANT_ALLOY_PLATING.get(), 3) + .addExtraItem(ItemRegistry.MNEMONIC_FRAGMENT.get(), 8) + .addSpirit(EARTHEN_SPIRIT, 32) + .addSpirit(WICKED_SPIRIT, 32) + .addSpirit(ELDRITCH_SPIRIT, 16) + .build(consumer); + new SpiritInfusionRecipeBuilder(ItemRegistry.SOULWOOD_PLANKS.get(), 2, ItemRegistry.MNEMONIC_HEX_STAFF.get(), 1) .addExtraItem(ItemRegistry.MNEMONIC_FRAGMENT.get(), 8) .addExtraItem(ItemRegistry.SOUL_STAINED_STEEL_INGOT.get(), 4) diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java index b13fd3084..8af563cfc 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java @@ -1,41 +1,32 @@ package com.sammy.malum.data.recipe; -import com.sammy.malum.MalumMod; -import com.sammy.malum.common.item.impetus.ImpetusItem; -import com.sammy.malum.data.recipe.builder.vanilla.TheDeviceRecipeBuilder; -import com.sammy.malum.registry.common.item.ItemRegistry; -import com.sammy.malum.registry.common.item.ItemTagRegistry; +import com.sammy.malum.*; +import com.sammy.malum.common.item.impetus.*; +import com.sammy.malum.data.recipe.builder.vanilla.*; +import com.sammy.malum.registry.common.item.*; import net.minecraft.advancements.critereon.*; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.data.recipes.RecipeCategory; -import net.minecraft.tags.ItemTags; -import net.minecraft.tags.TagKey; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.level.ItemLike; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.crafting.ConditionalRecipe; +import net.minecraft.data.recipes.*; +import net.minecraft.tags.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.*; +import net.minecraftforge.common.*; +import net.minecraftforge.common.crafting.*; import net.minecraftforge.common.crafting.conditions.*; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; -import team.lodestar.lodestone.data.builder.NBTCarryRecipeBuilder; -import team.lodestar.lodestone.systems.recipe.IngredientWithCount; - -import java.util.function.Consumer; -import java.util.function.Supplier; - -import static com.sammy.malum.MalumMod.malumPath; -import static com.sammy.malum.data.recipe.builder.vanilla.MetalNodeCookingRecipeBuilder.blastingWithTag; -import static com.sammy.malum.data.recipe.builder.vanilla.MetalNodeCookingRecipeBuilder.smeltingWithTag; -import static com.sammy.malum.data.recipe.builder.vanilla.StackedMalumCookingRecipeBuilder.blastingWithCount; -import static com.sammy.malum.data.recipe.builder.vanilla.StackedMalumCookingRecipeBuilder.smeltingWithCount; -import static net.minecraft.data.recipes.ShapedRecipeBuilder.shaped; -import static net.minecraft.data.recipes.ShapelessRecipeBuilder.shapeless; +import net.minecraftforge.registries.*; +import team.lodestar.lodestone.data.builder.*; +import team.lodestar.lodestone.systems.recipe.*; + +import java.util.function.*; + +import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.data.recipe.builder.vanilla.MetalNodeCookingRecipeBuilder.*; +import static com.sammy.malum.data.recipe.builder.vanilla.StackedMalumCookingRecipeBuilder.*; +import static net.minecraft.data.recipes.ShapedRecipeBuilder.*; +import static net.minecraft.data.recipes.ShapelessRecipeBuilder.*; import static net.minecraft.data.recipes.SimpleCookingRecipeBuilder.*; -import static net.minecraft.data.recipes.SingleItemRecipeBuilder.stonecutting; +import static net.minecraft.data.recipes.SingleItemRecipeBuilder.*; import static team.lodestar.lodestone.registry.common.tag.LodestoneItemTags.*; public class MalumVanillaRecipes implements IConditionBuilder { @@ -65,6 +56,14 @@ protected static void buildRecipes(Consumer consumer) { shapeless(RecipeCategory.MISC, ItemRegistry.HALLOWED_GOLD_NUGGET.get(), 9).requires(ItemRegistry.HALLOWED_GOLD_INGOT.get()).unlockedBy("has_hallowed_gold", has(ItemRegistry.HALLOWED_GOLD_INGOT.get())).save(consumer); shapeless(RecipeCategory.MISC, ItemRegistry.HALLOWED_GOLD_INGOT.get(), 9).requires(ItemRegistry.BLOCK_OF_HALLOWED_GOLD.get()).unlockedBy("has_hallowed_gold", has(ItemRegistry.HALLOWED_GOLD_INGOT.get())).save(consumer, malumPath("hallowed_gold_from_block")); + + shaped(RecipeCategory.MISC, ItemRegistry.BLOCK_OF_MALIGNANT_ALLOY.get()).define('#', ItemRegistry.MALIGNANT_ALLOY_INGOT.get()).pattern("###").pattern("###").pattern("###").unlockedBy("has_malignant_alloy", has(ItemRegistry.MALIGNANT_ALLOY_INGOT.get())).save(consumer); + shaped(RecipeCategory.MISC, ItemRegistry.MALIGNANT_ALLOY_INGOT.get()).define('#', ItemRegistry.MALIGNANT_ALLOY_NUGGET.get()).pattern("###").pattern("###").pattern("###").unlockedBy("has_malignant_alloy", has(ItemRegistry.MALIGNANT_ALLOY_INGOT.get())).save(consumer, malumPath("malignant_alloy_from_nuggets")); + shapeless(RecipeCategory.MISC, ItemRegistry.MALIGNANT_ALLOY_NUGGET.get(), 9).requires(ItemRegistry.MALIGNANT_ALLOY_INGOT.get()).unlockedBy("has_malignant_alloy", has(ItemRegistry.MALIGNANT_ALLOY_INGOT.get())).save(consumer); + shapeless(RecipeCategory.MISC, ItemRegistry.MALIGNANT_ALLOY_INGOT.get(), 9).requires(ItemRegistry.BLOCK_OF_MALIGNANT_ALLOY.get()).unlockedBy("has_malignant_alloy", has(ItemRegistry.MALIGNANT_ALLOY_INGOT.get())).save(consumer, malumPath("malignant_alloy_from_block")); + shaped(RecipeCategory.MISC, ItemRegistry.MALIGNANT_ALLOY_PLATING.get(), 2).define('X', ItemRegistry.MALIGNANT_ALLOY_INGOT.get()).define('Y', ItemRegistry.MALIGNANT_ALLOY_NUGGET.get()).pattern(" Y ").pattern("YXY").pattern(" Y ").unlockedBy("has_malignant_alloy", has(ItemRegistry.MALIGNANT_ALLOY_INGOT.get())).save(consumer); + + //NODES smeltingWithCount(Ingredient.of(ItemRegistry.IRON_NODE.get()), RecipeCategory.MISC, Items.IRON_NUGGET, 6, 0.25f, 200).unlockedBy("has_impetus", has(ItemRegistry.IRON_IMPETUS.get())).save(consumer, malumPath("iron_from_node_smelting")); blastingWithCount(Ingredient.of(ItemRegistry.IRON_NODE.get()), RecipeCategory.MISC, Items.IRON_NUGGET, 6, 0.25f, 100).unlockedBy("has_impetus", has(ItemRegistry.IRON_IMPETUS.get())).save(consumer, malumPath("iron_from_node_blasting")); diff --git a/src/main/java/com/sammy/malum/registry/common/MobEffectRegistry.java b/src/main/java/com/sammy/malum/registry/common/MobEffectRegistry.java index f41b2d616..ebdbf3f7c 100644 --- a/src/main/java/com/sammy/malum/registry/common/MobEffectRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/MobEffectRegistry.java @@ -37,6 +37,9 @@ public class MobEffectRegistry { public static final RegistryObject GLUTTONY = attachAlchemicalProficiency(EFFECTS.register("gluttony", GluttonyEffect::new), 0.5f); public static final RegistryObject CANCEROUS_GROWTH = EFFECTS.register("cancerous_growth", GrowingFleshEffect::new); public static final RegistryObject WICKED_INTENT = attachAlchemicalProficiency(EFFECTS.register("wicked_intent", WickedIntentEffect::new), 0.2f); + public static final RegistryObject SILENCED = EFFECTS.register("silenced", SilencedEffect::new); + public static final RegistryObject DEACONS_FORTUNE = EFFECTS.register("deacons_fortune", DeaconsFortuneEffect::new); + public static final RegistryObject REJECTED = EFFECTS.register("rejected", RejectedEffect::new); public static RegistryObject attachAlchemicalProficiency(RegistryObject effect, float proficiency) { diff --git a/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java b/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java index 94d811ccf..323cbed40 100644 --- a/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java @@ -42,6 +42,7 @@ public class ParticleEffectTypeRegistry { //Wand public static final ParticleEffectType HEX_BOLT_IMPACT = new HexBoltImpactParticleEffect("hex_bolt_impact"); + public static final ParticleEffectType DRAINING_BOLT_IMPACT = new DrainingBoltImpactParticleEffect("draining_bolt_impact"); public static final ParticleEffectType AURIC_BOLT_IMPACT = new AuricBoltImpactParticleEffect("auric_bolt_impact"); //Nitrate diff --git a/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java b/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java index 45b331985..f9cd5ba3c 100644 --- a/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java @@ -52,6 +52,7 @@ public class SoundRegistry { public static final RegistryObject SOUL_SHATTER = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("a_soul_shatters"))); public static final RegistryObject SCYTHE_CUT = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("scythe_cuts"))); + public static final RegistryObject WEIGHT_OF_WORLDS_SLASH = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("weight_of_worlds_slashes"))); public static final RegistryObject STAFF_FIRES = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("staff_fires"))); public static final RegistryObject STAFF_POWERS_UP = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("staff_powers_up"))); @@ -60,6 +61,7 @@ public class SoundRegistry { public static final RegistryObject STAFF_STRIKES = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("staff_strikes"))); public static final RegistryObject AURIC_FLAME_MOTIF = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("auric_flame_motif"))); + public static final RegistryObject DRAINING_MOTIF = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("draining_motif"))); public static final RegistryObject ALTAR_CRAFT = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("spirit_altar_completes_infusion"))); public static final RegistryObject ALTAR_LOOP = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("spirit_altar_infuses"))); @@ -98,6 +100,7 @@ public class SoundRegistry { public static final RegistryObject VOID_SLASH = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("void_slash_swooshes"))); public static final RegistryObject HIDDEN_BLADE_STRIKES = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("hidden_blade_strikes"))); + public static final RegistryObject MALIGNANT_METAL_RESONATES = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("malignant_metal_resonates"))); public static final RegistryObject HUNGRY_BELT_FEEDS = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("hungry_belt_feeds"))); public static final RegistryObject FLESH_RING_ABSORBS = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("flesh_ring_absorbs"))); public static final RegistryObject NITRATE_THROWN = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("nitrate_thrown"))); @@ -201,6 +204,7 @@ public class SoundRegistry { public static final SoundType QUARTZ_CLUSTER = new QuartzClusterSoundType(0.3F, 1.5f, QUARTZ_CLUSTER_BLOCK_BREAK, QUARTZ_CLUSTER_BLOCK_STEP, QUARTZ_CLUSTER_BLOCK_PLACE, QUARTZ_CLUSTER_BLOCK_HIT, () -> SoundEvents.AMETHYST_CLUSTER_FALL); public static final SoundType HALLOWED_GOLD = new ForgeSoundType(1.0F, 1.0F, HALLOWED_GOLD_BREAK, HALLOWED_GOLD_STEP, HALLOWED_GOLD_PLACE, HALLOWED_GOLD_HIT, () -> SoundEvents.METAL_FALL); public static final SoundType SOUL_STAINED_STEEL = new ForgeSoundType(1.0F, 1.0F, SOUL_STAINED_STEEL_BREAK, SOUL_STAINED_STEEL_STEP, SOUL_STAINED_STEEL_PLACE, SOUL_STAINED_STEEL_HIT, () -> SoundEvents.METAL_FALL); + public static final SoundType MALIGNANT_ALLOY = new RareEarthSoundType(1.0F, 1.0F, SOUL_STAINED_STEEL_BREAK, SOUL_STAINED_STEEL_STEP, SOUL_STAINED_STEEL_PLACE, SOUL_STAINED_STEEL_HIT, () -> SoundEvents.METAL_FALL); public static final SoundType TAINTED_ROCK = new ForgeSoundType(1.0F, 1.1F, ARCANE_ROCK_BREAK, ARCANE_ROCK_STEP, ARCANE_ROCK_PLACE, ARCANE_ROCK_HIT, () -> SoundEvents.BASALT_FALL); public static final SoundType TAINTED_ROCK_BRICKS = new ForgeSoundType(1.0F, 1.1F, ARCANE_ROCK_BRICKS_BREAK, ARCANE_ROCK_BRICKS_STEP, ARCANE_ROCK_BRICKS_PLACE, ARCANE_ROCK_BRICKS_HIT, () -> SoundEvents.BASALT_FALL); diff --git a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java index 6344c108a..05f2e59c2 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java @@ -348,8 +348,9 @@ public class BlockRegistry { public static final RegistryObject BLOCK_OF_RAW_SOULSTONE = BLOCKS.register("block_of_raw_soulstone", () -> new Block(MalumBlockProperties.SOULSTONE_BLOCK())); public static final RegistryObject BLOCK_OF_SOULSTONE = BLOCKS.register("block_of_soulstone", () -> new SoulstoneBlock(MalumBlockProperties.SOULSTONE_BLOCK())); - public static final RegistryObject BLOCK_OF_HALLOWED_GOLD = BLOCKS.register("block_of_hallowed_gold", () -> new Block(MalumBlockProperties.HALLOWED_GOLD())); public static final RegistryObject BLOCK_OF_SOUL_STAINED_STEEL = BLOCKS.register("block_of_soul_stained_steel", () -> new Block(MalumBlockProperties.SOUL_STAINED_STEEL_BLOCK())); + public static final RegistryObject BLOCK_OF_HALLOWED_GOLD = BLOCKS.register("block_of_hallowed_gold", () -> new Block(MalumBlockProperties.HALLOWED_GOLD())); + public static final RegistryObject BLOCK_OF_MALIGNANT_ALLOY = BLOCKS.register("block_of_malignant_alloy", () -> new Block(MalumBlockProperties.MALIGNANT_ALLOY_BLOCK())); public static final RegistryObject BLOCK_OF_ROTTING_ESSENCE = BLOCKS.register("block_of_rotting_essence", () -> new Block(new LodestoneBlockProperties().needsPickaxe().addTags(STORAGE_BLOCKS).strength(1F, 6.0F).sound(SoundType.CORAL_BLOCK))); public static final RegistryObject BLOCK_OF_GRIM_TALC = BLOCKS.register("block_of_grim_talc", () -> new Block(LodestoneBlockProperties.copy(Blocks.BONE_BLOCK).needsPickaxe().addTags(STORAGE_BLOCKS))); diff --git a/src/main/java/com/sammy/malum/registry/common/block/MalumBlockProperties.java b/src/main/java/com/sammy/malum/registry/common/block/MalumBlockProperties.java index 40fd34a54..bfac33928 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/MalumBlockProperties.java +++ b/src/main/java/com/sammy/malum/registry/common/block/MalumBlockProperties.java @@ -256,6 +256,16 @@ public static LodestoneBlockProperties ARCANE_CHARCOAL_BLOCK() { .sound(SoundRegistry.ARCANE_CHARCOAL_BLOCK); } + public static LodestoneBlockProperties SOUL_STAINED_STEEL_BLOCK() { + return new LodestoneBlockProperties() + .addTag(Tags.Blocks.STORAGE_BLOCKS) + .addTag(BlockTags.BEACON_BASE_BLOCKS) + .requiresCorrectToolForDrops() + .needsPickaxe() + .sound(SoundRegistry.SOUL_STAINED_STEEL) + .strength(5f, 64.0f); + } + public static LodestoneBlockProperties HALLOWED_GOLD() { return new LodestoneBlockProperties() .addTag(Tags.Blocks.STORAGE_BLOCKS) @@ -267,14 +277,14 @@ public static LodestoneBlockProperties HALLOWED_GOLD() { .strength(2F, 16.0F); } - public static LodestoneBlockProperties SOUL_STAINED_STEEL_BLOCK() { + public static LodestoneBlockProperties MALIGNANT_ALLOY_BLOCK() { return new LodestoneBlockProperties() .addTag(Tags.Blocks.STORAGE_BLOCKS) .addTag(BlockTags.BEACON_BASE_BLOCKS) .requiresCorrectToolForDrops() .needsPickaxe() - .sound(SoundRegistry.SOUL_STAINED_STEEL) - .strength(5f, 64.0f); + .sound(SoundRegistry.MALIGNANT_ALLOY) + .strength(10f, 9999f); } public static LodestoneBlockProperties SPIRIT_JAR() { diff --git a/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java b/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java index 58c16a594..208cf4858 100644 --- a/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java @@ -53,6 +53,10 @@ public class EntityRegistry { () -> EntityType.Builder.of((e, w) -> new HexBoltEntity(w), MobCategory.MISC).sized(1F, 1.2F).clientTrackingRange(10) .build(MalumMod.malumPath("hex_bolt").toString())); + public static final RegistryObject> DRAINING_BOLT = ENTITY_TYPES.register("draining_bolt", + () -> EntityType.Builder.of((e, w) -> new DrainingBoltEntity(w), MobCategory.MISC).sized(1F, 1f).clientTrackingRange(10) + .build(MalumMod.malumPath("draining_bolt").toString())); + public static final RegistryObject> AURIC_FLAME_BOLT = ENTITY_TYPES.register("auric_flame_bolt", () -> EntityType.Builder.of((e, w) -> new AuricFlameBoltEntity(w), MobCategory.MISC).sized(2F, 2F).clientTrackingRange(10) .build(MalumMod.malumPath("auric_flame_bolt").toString())); @@ -68,7 +72,9 @@ public static void bindEntityRenderers(EntityRenderersEvent.RegisterRenderers ev EntityRenderers.register(EntityRegistry.ETHERIC_NITRATE.get(), EthericNitrateEntityRenderer::new); EntityRenderers.register(EntityRegistry.VIVID_NITRATE.get(), VividNitrateEntityRenderer::new); + EntityRenderers.register(EntityRegistry.HEX_BOLT.get(), HexBoltEntityRenderer::new); + EntityRenderers.register(EntityRegistry.DRAINING_BOLT.get(), DrainingBoltEntityRenderer::new); EntityRenderers.register(EntityRegistry.AURIC_FLAME_BOLT.get(), AuricFlameBoltEntityRenderer::new); } } diff --git a/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java b/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java index f532f82c7..b78dcc5c3 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java @@ -12,8 +12,10 @@ public class ArmorTiers { public enum ArmorTierEnum implements ArmorMaterial { - SPIRIT_HUNTER("malum:spirit_hunter", 16, new int[]{1, 3, 4, 2}, 15, () -> SoundEvents.ARMOR_EQUIP_LEATHER, ItemRegistry.SPIRIT_FABRIC, 0), - SOUL_STAINED_STEEL("malum:soul_stained_steel", 22, new int[]{2, 6, 7, 3}, 11, () -> SoundEvents.ARMOR_EQUIP_IRON, ItemRegistry.SOUL_STAINED_STEEL_PLATING, 2); + SPIRIT_HUNTER("malum:spirit_hunter", 18, new int[]{1, 3, 4, 2}, 16, () -> SoundEvents.ARMOR_EQUIP_LEATHER, ItemRegistry.SPIRIT_FABRIC, 0), + SOUL_STAINED_STEEL("malum:soul_stained_steel", 22, new int[]{2, 6, 7, 3}, 16, () -> SoundEvents.ARMOR_EQUIP_IRON, ItemRegistry.SOUL_STAINED_STEEL_PLATING, 2), + MALIGNANT_ALLOY("malum:malignant_alloy", 32, new int[]{3, 6, 8, 3}, 24, () -> SoundEvents.ARMOR_EQUIP_NETHERITE, ItemRegistry.MALIGNANT_ALLOY_PLATING, 2); + private static final int[] MAX_DAMAGE_ARRAY = new int[]{13, 15, 16, 11}; private final String name; private final int durabilityMultiplier; private final int[] damageReduction; @@ -21,9 +23,12 @@ public enum ArmorTierEnum implements ArmorMaterial { private final Supplier equipSound; private final Supplier repairItem; private final float toughness; - private static final int[] MAX_DAMAGE_ARRAY = new int[]{13, 15, 16, 11}; + private final float knockbackResistance; ArmorTierEnum(String name, int durabilityMultiplier, int[] damageReduction, int enchantability, Supplier equipSound, Supplier repairItem, float toughness) { + this(name, durabilityMultiplier, damageReduction, enchantability, equipSound, repairItem, toughness, 0); + } + ArmorTierEnum(String name, int durabilityMultiplier, int[] damageReduction, int enchantability, Supplier equipSound, Supplier repairItem, float toughness, float knockbackResistance) { this.name = name; this.durabilityMultiplier = durabilityMultiplier; this.damageReduction = damageReduction; @@ -31,6 +36,7 @@ public enum ArmorTierEnum implements ArmorMaterial { this.equipSound = equipSound; this.repairItem = repairItem; this.toughness = toughness; + this.knockbackResistance = knockbackResistance; } @Override @@ -74,7 +80,7 @@ public float getToughness() { @Override public float getKnockbackResistance() { - return 0; + return knockbackResistance; } } } diff --git a/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java index de3b964da..c3bff2efd 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java @@ -434,15 +434,20 @@ public static RegistryObject register(String name, Item.Prop public static final RegistryObject COMPLETE_DESIGN = register("complete_design", DEFAULT_PROPERTIES(), SimpleFoiledItem::new); public static final RegistryObject FUSED_CONSCIOUSNESS = register("fused_consciousness", DEFAULT_PROPERTIES(), (p) -> new FusedConsciousnessItem(p.rarity(RARE))); - public static final RegistryObject HALLOWED_GOLD_INGOT = register("hallowed_gold_ingot", DEFAULT_PROPERTIES(), Item::new); - public static final RegistryObject HALLOWED_GOLD_NUGGET = register("hallowed_gold_nugget", DEFAULT_PROPERTIES(), Item::new); - public static final RegistryObject BLOCK_OF_HALLOWED_GOLD = register("block_of_hallowed_gold", DEFAULT_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.BLOCK_OF_HALLOWED_GOLD.get(), p)); - public static final RegistryObject SOUL_STAINED_STEEL_INGOT = register("soul_stained_steel_ingot", DEFAULT_PROPERTIES(), Item::new); public static final RegistryObject SOUL_STAINED_STEEL_PLATING = register("soul_stained_steel_plating", DEFAULT_PROPERTIES(), Item::new); public static final RegistryObject SOUL_STAINED_STEEL_NUGGET = register("soul_stained_steel_nugget", DEFAULT_PROPERTIES(), Item::new); public static final RegistryObject BLOCK_OF_SOUL_STAINED_STEEL = register("block_of_soul_stained_steel", DEFAULT_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.BLOCK_OF_SOUL_STAINED_STEEL.get(), p)); + public static final RegistryObject HALLOWED_GOLD_INGOT = register("hallowed_gold_ingot", DEFAULT_PROPERTIES(), Item::new); + public static final RegistryObject HALLOWED_GOLD_NUGGET = register("hallowed_gold_nugget", DEFAULT_PROPERTIES(), Item::new); + public static final RegistryObject BLOCK_OF_HALLOWED_GOLD = register("block_of_hallowed_gold", DEFAULT_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.BLOCK_OF_HALLOWED_GOLD.get(), p)); + + public static final RegistryObject MALIGNANT_ALLOY_INGOT = register("malignant_alloy_ingot", DEFAULT_PROPERTIES(), Item::new); + public static final RegistryObject MALIGNANT_ALLOY_PLATING = register("malignant_alloy_plating", DEFAULT_PROPERTIES(), Item::new); + public static final RegistryObject MALIGNANT_ALLOY_NUGGET = register("malignant_alloy_nugget", DEFAULT_PROPERTIES(), Item::new); + public static final RegistryObject BLOCK_OF_MALIGNANT_ALLOY = register("block_of_malignant_alloy", DEFAULT_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.BLOCK_OF_MALIGNANT_ALLOY.get(), p)); + //region ether public static final RegistryObject ETHER = register("ether", DEFAULT_PROPERTIES(), (p) -> new EtherItem(BlockRegistry.ETHER.get(), p, false)); public static final RegistryObject ETHER_TORCH = register("ether_torch", DEFAULT_PROPERTIES(), (p) -> new EtherTorchItem(BlockRegistry.ETHER_TORCH.get(), BlockRegistry.WALL_ETHER_TORCH.get(), p, false)); @@ -527,7 +532,14 @@ public static RegistryObject register(String name, Item.Prop public static final RegistryObject SOUL_HUNTER_BOOTS = register("soul_hunter_boots", GEAR_PROPERTIES(), (p) -> new SoulHunterArmorItem(ArmorItem.Type.BOOTS, p)); public static final RegistryObject TYRVING = register("tyrving", GEAR_PROPERTIES(), (p) -> new TyrvingItem(ItemTiers.ItemTierEnum.TYRVING, 0, -0.3f, p)); - public static final RegistryObject WEIGHT_OF_WORLDS = register("weight_of_worlds", GEAR_PROPERTIES(), (p) -> new WeightOfWorldsItem(ItemTiers.ItemTierEnum.MALIGNANT_LEAD, 1, -0.1f, p)); + + public static final RegistryObject MALIGNANT_STRONGHOLD_HELMET = register("malignant_stronghold_helmet", GEAR_PROPERTIES(), (p) -> new MalignantStrongholdArmorItem(ArmorItem.Type.HELMET, p)); + public static final RegistryObject MALIGNANT_STRONGHOLD_CHESTPLATE = register("malignant_stronghold_chestplate", GEAR_PROPERTIES(), (p) -> new MalignantStrongholdArmorItem(ArmorItem.Type.CHESTPLATE, p)); + public static final RegistryObject MALIGNANT_STRONGHOLD_LEGGINGS = register("malignant_stronghold_leggings", GEAR_PROPERTIES(), (p) -> new MalignantStrongholdArmorItem(ArmorItem.Type.LEGGINGS, p)); + public static final RegistryObject MALIGNANT_STRONGHOLD_BOOTS = register("malignant_stronghold_boots", GEAR_PROPERTIES(), (p) -> new MalignantStrongholdArmorItem(ArmorItem.Type.BOOTS, p)); + + public static final RegistryObject WEIGHT_OF_WORLDS = register("weight_of_worlds", GEAR_PROPERTIES(), (p) -> new WeightOfWorldsItem(ItemTiers.ItemTierEnum.MALIGNANT_ALLOY, 1, -0.1f, p)); + public static final RegistryObject MALIGNANT_SCEPTER = register("malignant_scepter", GEAR_PROPERTIES(), (p) -> new MalignantScepterItem(MALIGNANT_ALLOY, 4, p)); public static final RegistryObject MNEMONIC_HEX_STAFF = register("mnemonic_hex_staff", GEAR_PROPERTIES(), (p) -> new HexStaffItem(HEX_STAFF, 4, p)); public static final RegistryObject STAFF_OF_THE_AURIC_FLAME = register("staff_of_the_auric_flame", GEAR_PROPERTIES(), (p) -> new AuricFlameStaffItem(AURIC_STAFF, 6, p)); diff --git a/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java b/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java index a52ebd85f..4f6303230 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java @@ -9,8 +9,8 @@ public class ItemTiers { public enum ItemTierEnum implements Tier { SOUL_STAINED_STEEL(1250, 7.5f, 2.5f, 3, 16, ItemRegistry.SOUL_STAINED_STEEL_INGOT), - MALIGNANT_LEAD(2500, 8f, 4f, 3, 24, ItemRegistry.MALIGNANT_LEAD), - TYRVING(850, 8f, 1f, 3, 12, ItemRegistry.TWISTED_ROCK), + MALIGNANT_ALLOY(2500, 8f, 4f, 3, 24, ItemRegistry.MALIGNANT_ALLOY_INGOT), + TYRVING(850, 8f, 1f, 3, 16, ItemRegistry.TWISTED_ROCK), HEX_STAFF(1250, 8f, 2.5f, 3, 16, ItemRegistry.MNEMONIC_FRAGMENT), AURIC_STAFF(2500, 8f, 2.5f, 3, 16, ItemRegistry.AURIC_EMBERS); private final int maxUses; diff --git a/src/main/java/com/sammy/malum/visual_effects/WeepingWellParticleEffects.java b/src/main/java/com/sammy/malum/visual_effects/WeepingWellParticleEffects.java index dfcb0d440..6696c37d1 100644 --- a/src/main/java/com/sammy/malum/visual_effects/WeepingWellParticleEffects.java +++ b/src/main/java/com/sammy/malum/visual_effects/WeepingWellParticleEffects.java @@ -4,7 +4,7 @@ import com.sammy.malum.registry.client.*; import com.sammy.malum.visual_effects.networked.data.*; import net.minecraft.core.*; -import net.minecraft.util.RandomSource; +import net.minecraft.util.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.phys.*; @@ -20,10 +20,9 @@ import team.lodestar.lodestone.systems.particle.render_types.*; import java.awt.*; -import java.util.*; import java.util.function.*; -import static com.sammy.malum.visual_effects.SpiritLightSpecs.spiritLightSpecs; +import static com.sammy.malum.visual_effects.SpiritLightSpecs.*; public class WeepingWellParticleEffects { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/staff/DrainingBoltImpactParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/staff/DrainingBoltImpactParticleEffect.java new file mode 100644 index 000000000..ee6b2785d --- /dev/null +++ b/src/main/java/com/sammy/malum/visual_effects/networked/staff/DrainingBoltImpactParticleEffect.java @@ -0,0 +1,104 @@ +package com.sammy.malum.visual_effects.networked.staff; + +import com.sammy.malum.common.item.curiosities.weapons.staff.*; +import com.sammy.malum.visual_effects.*; +import com.sammy.malum.visual_effects.networked.*; +import com.sammy.malum.visual_effects.networked.data.*; +import net.minecraft.nbt.*; +import net.minecraft.util.*; +import net.minecraft.world.phys.*; +import net.minecraftforge.api.distmarker.*; +import team.lodestar.lodestone.helpers.*; +import team.lodestar.lodestone.systems.particle.builder.*; +import team.lodestar.lodestone.systems.particle.render_types.*; + +import java.util.function.*; + +import static com.sammy.malum.visual_effects.SpiritLightSpecs.*; + +public class DrainingBoltImpactParticleEffect extends ParticleEffectType { + + public DrainingBoltImpactParticleEffect(String id) { + super(id); + } + + public static NBTEffectData createData(Vec3 direction) { + CompoundTag tag = new CompoundTag(); + CompoundTag directionTag = new CompoundTag(); + directionTag.putDouble("x", direction.x); + directionTag.putDouble("y", direction.y); + directionTag.putDouble("z", direction.z); + tag.put("direction", directionTag); + return new NBTEffectData(tag); + } + + @OnlyIn(Dist.CLIENT) + @Override + public Supplier get() { + return () -> (level, random, positionData, colorData, nbtData) -> { + if (!nbtData.compoundTag.contains("direction")) { + return; + } + final CompoundTag directionData = nbtData.compoundTag.getCompound("direction"); + double dirX = directionData.getDouble("x"); + double dirY = directionData.getDouble("y"); + double dirZ = directionData.getDouble("z"); + Vec3 projectileDirection = new Vec3(dirX, dirY, dirZ); + float yRot = ((float) (Mth.atan2(projectileDirection.x, projectileDirection.z) * (double) (180F / (float) Math.PI))); + float yaw = (float) Math.toRadians(yRot); + Vec3 left = new Vec3(-Math.cos(yaw), 0, Math.sin(yaw)); + Vec3 up = left.cross(projectileDirection); + + double posX = positionData.posX; + double posY = positionData.posY; + double posZ = positionData.posZ; + Vec3 pos = new Vec3(posX, posY, posZ); + + for (int i = 0; i < 32; i++) { + float spread = RandomHelper.randomBetween(random, 0.1f, 0.5f); + float speed = RandomHelper.randomBetween(random, 0.3f, 0.4f); + float distance = RandomHelper.randomBetween(random, 3f, 6f); + float angle = i / 32f * (float) Math.PI * 2f; + + Vec3 direction = projectileDirection + .add(left.scale(Math.sin(angle) * spread)) + .add(up.scale(Math.cos(angle) * spread)) + .normalize().scale(speed); + Vec3 spawnPosition = pos.add(direction.scale(distance)); + direction = direction.reverse(); + float lifetimeMultiplier = 0.7f; + if (random.nextFloat() < 0.8f) { + var lightSpecs = spiritLightSpecs(level, spawnPosition, MalignantScepterItem.MALIGNANT_COLOR_DATA); + lightSpecs.getBuilder() + .multiplyLifetime(lifetimeMultiplier) + .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) + .enableForcedSpawn() + .modifyData(WorldParticleBuilder::getScaleData, d -> d.multiplyValue(1.75f)) + .setMotion(direction); + lightSpecs.getBloomBuilder() + .multiplyLifetime(lifetimeMultiplier) + .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) + .modifyData(WorldParticleBuilder::getScaleData, d -> d.multiplyValue(1.75f)) + .setMotion(direction); + lightSpecs.spawnParticles(); + } + if (random.nextFloat() < 0.8f) { + var sparks = SparkParticleEffects.spiritMotionSparks(level, spawnPosition, MalignantScepterItem.MALIGNANT_COLOR_DATA); + sparks.getBuilder() + .multiplyLifetime(lifetimeMultiplier) + .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) + .enableForcedSpawn() + .modifyData(SparkParticleBuilder::getScaleData, d -> d.multiplyValue(1.75f)) + .modifyData(SparkParticleBuilder::getLengthData, d -> d.multiplyValue(3f)) + .setMotion(direction.scale(1.5f)); + sparks.getBloomBuilder() + .multiplyLifetime(lifetimeMultiplier) + .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) + .modifyData(WorldParticleBuilder::getScaleData, d -> d.multiplyValue(1.75f)) + .setMotion(direction.scale(1.5f)); + sparks.spawnParticles(); + } + } + }; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/malum/sounds.json b/src/main/resources/assets/malum/sounds.json index cab5e5bd4..76d34c952 100644 --- a/src/main/resources/assets/malum/sounds.json +++ b/src/main/resources/assets/malum/sounds.json @@ -33,6 +33,7 @@ "a_soul_shatters": { "sounds":["malum:curiosities/soul_shatter1","malum:curiosities/soul_shatter2","malum:curiosities/soul_shatter3"], "subtitle": "malum.subtitle.a_soul_shatters" }, "scythe_cuts": { "sounds":["malum:curiosities/scythe/cut1","malum:curiosities/scythe/cut2","malum:curiosities/scythe/cut3"], "subtitle": "malum.subtitle.scythe_cuts" }, + "weight_of_worlds_slashes": { "sounds":["malum:curiosities/scythe/cut1","malum:curiosities/scythe/cut2","malum:curiosities/scythe/cut3"], "subtitle": "malum.subtitle.weight_of_worlds_slashes" }, "staff_fires": { "sounds":["malum:curiosities/staff/fire1","malum:curiosities/staff/fire2"], "subtitle": "malum.subtitle.staff_fires" }, "staff_powers_up": { "sounds":["malum:curiosities/staff/charge1","malum:curiosities/staff/charge2"], "subtitle": "malum.subtitle.staff_powers_up" }, @@ -41,6 +42,7 @@ "staff_strikes": { "sounds":["malum:curiosities/staff/hit1","malum:curiosities/staff/hit2","malum:curiosities/staff/hit3","malum:curiosities/staff/hit4"], "subtitle": "malum.subtitle.staff_strikes" }, "auric_flame_motif": { "sounds":["malum:curiosities/staff/auric_flame_motif1","malum:curiosities/staff/auric_flame_motif2","malum:curiosities/staff/auric_flame_motif3"]}, + "draining_motif": { "sounds":["malum:curiosities/staff/draining_motif1","malum:curiosities/staff/draining_motif2","malum:curiosities/staff/draining_motif3"]}, "the_unknown_weeps": { "sounds":["malum:weeping_well/uncanny_valley0","malum:weeping_well/uncanny_valley1"], "subtitle": "malum.subtitle.the_unknown_weeps" }, "the_void_heart_beats": { "sounds":["malum:weeping_well/void_heartbeat"], "subtitle": "malum.subtitle.the_void_heart_beats" }, @@ -80,6 +82,7 @@ "hungry_belt_feeds": { "sounds":["malum:curiosities/starved_belt/nom1", "malum:curiosities/starved_belt/nom2", "malum:curiosities/starved_belt/nom3", "malum:curiosities/starved_belt/nom4"], "subtitle": "malum.subtitle.hungry_belt_feeds" }, "flesh_ring_absorbs": { "sounds":["malum:curiosities/cancer_ring/grow1", "malum:curiosities/cancer_ring/grow2", "malum:curiosities/cancer_ring/grow3"], "subtitle": "malum.subtitle.flesh_ring_absorbs" }, "hidden_blade_strikes": { "sounds":["malum:curiosities/hidden_blade/strike1", "malum:curiosities/hidden_blade/strike2", "malum:curiosities/hidden_blade/strike3"], "subtitle": "malum.subtitle.hidden_blade_strikes" }, + "malignant_metal_resonates": { "sounds":["malum:curiosities/hidden_blade/strike1", "malum:curiosities/hidden_blade/strike2", "malum:curiosities/hidden_blade/strike3"], "subtitle": "malum.subtitle.malignant_metal_resonates" }, "nitrate_thrown": { "sounds":["minecraft:random/bow"], "subtitle": "malum.subtitle.nitrate_thrown" }, "spirit_mote_created": { "sounds":["malum:curiosities/spirit_mote/created1", "malum:curiosities/spirit_mote/created2", "malum:curiosities/spirit_mote/created3"], "subtitle": "malum.subtitle.spirit_mote_created" }, diff --git a/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif1.ogg b/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif1.ogg new file mode 100644 index 000000000..360de3d13 Binary files /dev/null and b/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif1.ogg differ diff --git a/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif2.ogg b/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif2.ogg new file mode 100644 index 000000000..e1d50b873 Binary files /dev/null and b/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif2.ogg differ diff --git a/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif3.ogg b/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif3.ogg new file mode 100644 index 000000000..b420528cd Binary files /dev/null and b/src/main/resources/assets/malum/sounds/curiosities/staff/draining_motif3.ogg differ diff --git a/src/main/resources/assets/malum/textures/armor/malignant_stronghold.png b/src/main/resources/assets/malum/textures/armor/malignant_stronghold.png index 71126aed6..84d649c04 100644 Binary files a/src/main/resources/assets/malum/textures/armor/malignant_stronghold.png and b/src/main/resources/assets/malum/textures/armor/malignant_stronghold.png differ diff --git a/src/main/resources/assets/malum/textures/block/storage_blocks/block_of_malignant_alloy.png b/src/main/resources/assets/malum/textures/block/storage_blocks/block_of_malignant_alloy.png new file mode 100644 index 000000000..8124da7f5 Binary files /dev/null and b/src/main/resources/assets/malum/textures/block/storage_blocks/block_of_malignant_alloy.png differ diff --git a/src/main/resources/assets/malum/textures/block/storage_blocks/block_of_soul_stained_steel.png b/src/main/resources/assets/malum/textures/block/storage_blocks/block_of_soul_stained_steel.png index 226b339c4..cd87f8827 100644 Binary files a/src/main/resources/assets/malum/textures/block/storage_blocks/block_of_soul_stained_steel.png and b/src/main/resources/assets/malum/textures/block/storage_blocks/block_of_soul_stained_steel.png differ diff --git a/src/main/resources/assets/malum/textures/gui/book/pages/weeping_well_page.png b/src/main/resources/assets/malum/textures/gui/book/pages/weeping_well_page.png index 470377147..7f590e85f 100644 Binary files a/src/main/resources/assets/malum/textures/gui/book/pages/weeping_well_page.png and b/src/main/resources/assets/malum/textures/gui/book/pages/weeping_well_page.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_alloy_ingot.png b/src/main/resources/assets/malum/textures/item/malignant_alloy_ingot.png new file mode 100644 index 000000000..86a206fbe Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_alloy_ingot.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_alloy_nugget.png b/src/main/resources/assets/malum/textures/item/malignant_alloy_nugget.png new file mode 100644 index 000000000..4b66c0c1c Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_alloy_nugget.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_alloy_plating.png b/src/main/resources/assets/malum/textures/item/malignant_alloy_plating.png new file mode 100644 index 000000000..7cdd3c0ee Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_alloy_plating.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_scepter.png b/src/main/resources/assets/malum/textures/item/malignant_scepter.png new file mode 100644 index 000000000..2ab714cab Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_scepter.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_stronghold_boots.png b/src/main/resources/assets/malum/textures/item/malignant_stronghold_boots.png new file mode 100644 index 000000000..bd2bebffa Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_stronghold_boots.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_stronghold_chestplate.png b/src/main/resources/assets/malum/textures/item/malignant_stronghold_chestplate.png new file mode 100644 index 000000000..6a676004f Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_stronghold_chestplate.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_stronghold_helmet.png b/src/main/resources/assets/malum/textures/item/malignant_stronghold_helmet.png new file mode 100644 index 000000000..37a7a037c Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_stronghold_helmet.png differ diff --git a/src/main/resources/assets/malum/textures/item/malignant_stronghold_leggings.png b/src/main/resources/assets/malum/textures/item/malignant_stronghold_leggings.png new file mode 100644 index 000000000..b8dad6107 Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/malignant_stronghold_leggings.png differ diff --git a/src/main/resources/assets/malum/textures/item/weight_of_worlds.png b/src/main/resources/assets/malum/textures/item/weight_of_worlds.png index 844c2309a..05adf973c 100644 Binary files a/src/main/resources/assets/malum/textures/item/weight_of_worlds.png and b/src/main/resources/assets/malum/textures/item/weight_of_worlds.png differ diff --git a/src/main/resources/assets/malum/textures/item/weight_of_worlds_huge.png b/src/main/resources/assets/malum/textures/item/weight_of_worlds_huge.png index 971304dc7..8cd93e434 100644 Binary files a/src/main/resources/assets/malum/textures/item/weight_of_worlds_huge.png and b/src/main/resources/assets/malum/textures/item/weight_of_worlds_huge.png differ diff --git a/src/main/resources/assets/malum/textures/mob_effect/deacons_fortune.png b/src/main/resources/assets/malum/textures/mob_effect/deacons_fortune.png new file mode 100644 index 000000000..506bf85fc Binary files /dev/null and b/src/main/resources/assets/malum/textures/mob_effect/deacons_fortune.png differ diff --git a/src/main/resources/assets/malum/textures/mob_effect/silenced.png b/src/main/resources/assets/malum/textures/mob_effect/silenced.png new file mode 100644 index 000000000..abdb821e0 Binary files /dev/null and b/src/main/resources/assets/malum/textures/mob_effect/silenced.png differ