From d9d37f7687cb45c6421a4061e5cf9bfc1666d508 Mon Sep 17 00:00:00 2001 From: Minecraftschurli Date: Tue, 16 Aug 2022 21:56:11 +0200 Subject: [PATCH] 1.19 API Update (#317) * Update stale.yml (#302) * update build.gradle and bug-report.yml (#306) * add api output to jarjar (#308) * add entity size attribute and shrink effect (#310) * additional shrink effect stuff * fix eye height for entities with hardcoded eye height * Bump to v1.18.2-1.1.1 (#311) * bump version in bug report template * add shrink update info to the changelog * Fix build process (#312) * Fix build.gradle * Fix release.yml * Update changelog.md * add altar power to TOP info (#314) * Fix fall damage (#315) * bump version number, update changelog and run datagen * fix release workflow (#316) * move a bunch of stuff to datapack registries * move a bunch of stuff to datapack registries (part 2) * add liquid essence fluid * implement hud config * add hud manager open translation * fix stats and disable ice guardian test * move even more stuff to dynamic registries * make liquid essence stop fall damage (liquid essence is subject to MinecraftForge/MinecraftForge#8897 and thus still a bit broken) * some tweaks and fixes * address comments by @IchHabeHunger54 * update to 1.19.2, move worldgen to datapack, fix recipes * apply suggested refactors * fix mixin config * hotfix for #318 (#320) * pin FG version because of bug in JiJ * update changelog and release workflow * update changelog * move inscription table and occulus blockstates to datagen * Prevent crash due to #321 (#322) * dedupe goals and remove unnecessary AT * add local.properties * add github helper for using dependencies from github packages * add safety for when mods f*** with attributes or use the wrong event to register them * bump version and changelog * merge ability and affinity packages Co-authored-by: IchHabeHunger54 --- .editorconfig | 4 +- .github/ISSUE_TEMPLATE/bug-report.yml | 4 +- .github/workflows/release.yml | 3 +- .gitignore | 1 + build.gradle | 38 +- changelog.md | 6 +- gradle.properties | 24 +- run/client/options.txt | 32 +- settings.gradle | 2 +- .../arsmagicalegacy/api/ArsMagicaAPI.java | 42 +- .../arsmagicalegacy/api/ability/IAbility.java | 22 - .../api/ability/IAbilityData.java | 28 - .../api/ability/IAbilityManager.java | 39 -- .../api/ability/package-info.java | 7 - .../arsmagicalegacy/api/affinity/Ability.java | 52 ++ .../api/affinity/Affinity.java | 201 ++++++ .../api/affinity/IAffinity.java | 81 --- .../api/affinity/IAffinityHelper.java | 18 +- .../api/affinity/IAffinityItem.java | 6 +- .../api/altar/AltarCapMaterial.java | 5 + .../api/altar/AltarStructureMaterial.java | 5 + .../api/client/OcculusTabRenderer.java | 10 +- .../api/data/AbilityBuilder.java | 29 +- .../api/data/AbilityProvider.java | 52 +- .../data/AltarStructureMaterialProvider.java | 103 ++- .../api/data/OcculusTabBuilder.java | 73 ++- .../api/data/OcculusTabProvider.java | 41 +- .../api/data/PrefabSpellProvider.java | 30 +- .../api/data/RitualProvider.java | 111 ++++ .../api/data/SkillBuilder.java | 41 +- .../api/data/SkillProvider.java | 48 +- .../api/data/SpellPartDataProvider.java | 6 +- .../api/data/SpellTransformationProvider.java | 67 +- .../api/event/AffinityChangingEvent.java | 10 +- .../api/magic/ContingencyType.java | 4 + .../api/occulus/IOcculusTab.java | 109 ---- .../api/occulus/IOcculusTabManager.java | 44 -- .../arsmagicalegacy/api}/ritual/Context.java | 2 +- .../arsmagicalegacy/api}/ritual/Ritual.java | 22 +- .../api/ritual/RitualEffect.java | 22 + .../api/ritual/RitualRequirement.java | 24 + .../api/ritual/RitualTrigger.java | 24 + .../api/{occulus => ritual}/package-info.java | 4 +- .../arsmagicalegacy/api/skill/ISkill.java | 49 -- .../api/skill/ISkillHelper.java | 27 +- .../api/skill/ISkillManager.java | 51 -- .../api/skill/ISkillPoint.java | 36 -- .../api/skill/ISkillPointItem.java | 18 +- .../arsmagicalegacy/api/skill/OcculusTab.java | 124 ++++ .../arsmagicalegacy/api/skill/Skill.java | 57 ++ .../arsmagicalegacy/api/skill/SkillPoint.java | 29 + .../api/spell/IPrefabSpell.java | 7 - .../api/spell/IPrefabSpellManager.java | 26 - .../arsmagicalegacy/api/spell/ISpell.java | 8 +- .../arsmagicalegacy/api/spell/ISpellItem.java | 72 +++ .../arsmagicalegacy/api/spell/ISpellPart.java | 4 + .../api/spell/ISpellPartData.java | 6 +- .../api/spell/PrefabSpell.java | 44 ++ .../api/spell/SpellTransformation.java | 25 + .../api/util/IDataManager.java | 30 - .../api/util/ITranslatable.java | 53 +- .../arsmagicalegacy/api/util/Range.java | 69 -- .../data/AMAbilityProvider.java | 69 +- .../AMAltarStructureMaterialProvider.java | 112 ++-- .../arsmagicalegacy/data/AMBlockFamilies.java | 11 + .../data/AMBlockStateProvider.java | 32 + .../arsmagicalegacy/data/AMDatagen.java | 22 +- .../data/AMEnglishLanguageProvider.java | 46 +- .../data/AMItemModelProvider.java | 42 +- .../data/AMObeliskFuelProvider.java | 3 +- .../data/AMOcculusTabProvider.java | 10 +- .../data/AMPatchouliBookProvider.java | 22 +- .../data/AMPrefabSpellProvider.java | 5 +- .../data/AMRecipeProvider.java | 166 +---- .../data/AMRitualProvider.java | 144 +---- .../arsmagicalegacy/data/AMSkillProvider.java | 5 +- .../data/AMSpellTransformationProvider.java | 43 +- .../data/AMWorldgenProvider.java | 83 +++ .../data/WorldgenProvider.java | 239 +++++++ .../data/mixin/RecipeProviderMixin.java | 47 ++ .../data/mixin/package-info.java | 1 + .../arsmagicalegacy_data.mixins.json | 13 + .../03e4de26f1265135874f8cdcaebc09d9c08eb42b | 2 +- .../1f78fb81ff6a6f1a26e310a50401acf3e39a2e96 | 66 +- .../3ca5fb735269924f2959739249fcac3c4d7dab3f | 3 +- .../514917ae98e925a35f49d34bc5f5420a95cc39e8 | 36 +- .../55f0273cb61243ff3d2fde23212f03e66541da02 | 2 +- .../6105d15ab67ad96ebc6a7b00490b938f89464181 | 108 ++++ .../64b328e8ca02181af0888a733cf726544b298906 | 5 - .../67cce32b1c3cbbcb1f646605f4914e3f196986c2 | 2 +- .../735031f3addf80804addae5e3f53249900116f1e | 2 +- .../75bcd4dba6ca7d365462b0ec45e291d1056349c4 | 2 +- .../833cd09e1a52f62164f243240fbe115c005d9482 | 3 +- .../9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e | 74 ++- .../ac420c79fa682b7dd66450d20527913a78925041 | 108 ---- .../b0298feb0277c6027113ec937c32b35a78b338eb | 20 +- .../c622617f6fabf890a00b9275cd5f643584a8a2c8 | 4 +- .../cd090bff9ca93079474b6df48215a8307e531e73 | 22 +- .../d77929551118acd4db709cfd511c31b0e5dea349 | 5 + .../e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 | 2 +- .../ed858a761f932c7e621a979ba5024c6adcf7c36e | 36 ++ .../eec194a88acc4b69ee022ff26153ceb1b8b9139a | 2 +- .../f1a70f0e7119518e28c5bc73aa0a338f8a211540 | 14 +- .../f22ca47c13fdf7441bc2ed81d49b4db199e05b79 | 6 +- .../f50c83242c37d443788ef8f88d6ccdab815cef9f | 145 ++--- .../fcc0d197db45e404a8bc894ca09c0611e5a65cab | 2 +- .../ffeb12d8d0aeb162044956ba28fb50b2d456c99c | 32 +- .../blockstates/inscription_table.json | 297 +++++++++ .../blockstates/liquid_essence.json | 7 + .../arsmagicalegacy/blockstates/occulus.json | 6 +- .../assets/arsmagicalegacy/lang/en_us.json | 1 + .../models/block/liquid_essence.json | 5 + .../models/item/liquid_essence_bucket.json | 5 + .../en_us/entries/affinities/air.json | 10 +- .../en_us/entries/affinities/arcane.json | 8 +- .../en_us/entries/affinities/earth.json | 10 +- .../en_us/entries/affinities/ender.json | 14 +- .../en_us/entries/affinities/fire.json | 8 +- .../en_us/entries/affinities/ice.json | 8 +- .../en_us/entries/affinities/life.json | 8 +- .../en_us/entries/affinities/lightning.json | 8 +- .../en_us/entries/affinities/nature.json | 8 +- .../en_us/entries/affinities/water.json | 8 +- ...chimerite_from_blasting_chimerite_ore.json | 34 + ...from_blasting_deepslate_chimerite_ore.json | 34 + ...chimerite_from_smelting_chimerite_ore.json | 34 + ...from_smelting_deepslate_chimerite_ore.json | 34 + ...from_blasting_deepslate_moonstone_ore.json | 34 + ...moonstone_from_blasting_moonstone_ore.json | 34 + ...from_smelting_deepslate_moonstone_ore.json | 34 + ...moonstone_from_smelting_moonstone_ore.json | 34 + .../arsmagicalegacy/stripped_witchwood.json | 4 +- ...paz_from_blasting_deepslate_topaz_ore.json | 34 + .../topaz_from_blasting_topaz_ore.json | 34 + ...paz_from_smelting_deepslate_topaz_ore.json | 34 + .../topaz_from_smelting_topaz_ore.json | 34 + ...t_from_blasting_deepslate_vinteum_ore.json | 34 + ...inteum_dust_from_blasting_vinteum_ore.json | 34 + ...t_from_smelting_deepslate_vinteum_ore.json | 34 + ...inteum_dust_from_smelting_vinteum_ore.json | 34 + .../recipes/arsmagicalegacy/witchwood.json | 16 +- .../arsmagicalegacy/witchwood_button.json | 16 +- .../arsmagicalegacy/witchwood_door.json | 16 +- .../arsmagicalegacy/witchwood_fence.json | 16 +- .../arsmagicalegacy/witchwood_fence_gate.json | 16 +- .../arsmagicalegacy/witchwood_planks.json | 16 +- .../witchwood_pressure_plate.json | 16 +- .../arsmagicalegacy/witchwood_slab.json | 16 +- .../arsmagicalegacy/witchwood_stairs.json | 16 +- .../arsmagicalegacy/witchwood_trapdoor.json | 16 +- .../recipes/misc/arcane_compendium.json | 30 +- .../ability}/clarity.json | 2 +- .../ability}/enderman_pumpkin.json | 2 +- .../ability}/enderman_thorns.json | 2 +- .../ability}/fall_damage.json | 2 +- .../ability}/feather_falling.json | 2 +- .../ability}/fire_punch.json | 2 +- .../ability}/fire_resistance.json | 2 +- .../ability}/frost_punch.json | 2 +- .../ability}/frost_walker.json | 2 +- .../ability}/gravity.json | 2 +- .../ability}/haste.json | 2 +- .../ability}/jump_boost.json | 2 +- .../ability}/light_health_reduction.json | 0 .../ability}/magic_damage.json | 2 +- .../ability}/mana_reduction.json | 2 +- .../ability}/nausea.json | 2 +- .../ability}/nether_damage_nature.json | 2 +- .../ability}/nether_damage_water.json | 2 +- .../ability}/night_vision.json | 2 +- .../ability}/poison_resistance.json | 2 +- .../ability}/regeneration.json | 2 +- .../ability}/resistance.json | 2 +- .../ability}/saturation.json | 2 +- .../ability}/slowness.json | 2 +- .../ability}/smite.json | 2 +- .../ability}/speed.json | 2 +- .../ability}/step_assist.json | 2 +- .../ability}/swim_speed.json | 2 +- .../ability}/thorns.json | 2 +- .../ability}/water_damage_fire.json | 2 +- .../ability}/water_damage_lightning.json | 2 +- .../ability}/water_health_reduction.json | 0 .../altar/cap/chimerite.json | 0 .../{ => arsmagicalegacy}/altar/cap/coal.json | 0 .../altar/cap/copper.json | 0 .../altar/cap/diamond.json | 0 .../altar/cap/emerald.json | 0 .../altar/cap/exposed_copper.json | 0 .../altar/cap/glass.json | 0 .../{ => arsmagicalegacy}/altar/cap/gold.json | 0 .../{ => arsmagicalegacy}/altar/cap/iron.json | 0 .../altar/cap/lapis.json | 0 .../arsmagicalegacy/altar/cap/moonstone.json | 4 + .../altar/cap/netherite.json | 0 .../altar/cap/oxidized_copper.json | 0 .../altar/cap/redstone.json | 0 .../arsmagicalegacy/altar/cap/sunstone.json | 4 + .../altar/cap/topaz.json | 0 .../altar/cap/vinteum.json | 0 .../altar/cap/waxed_copper.json | 0 .../altar/cap/waxed_exposed_copper.json | 0 .../altar/cap/waxed_oxidized_copper.json | 0 .../altar/cap/waxed_weathered_copper.json | 0 .../altar/cap/weathered_copper.json | 0 .../altar/structure/acacia_planks.json | 0 .../altar/structure/andesite.json | 0 .../altar/structure/birch_planks.json | 0 .../altar/structure/blackstone.json | 0 .../altar/structure/bricks.json | 0 .../altar/structure/cobbled_deepslate.json | 0 .../altar/structure/cobblestone.json | 0 .../altar/structure/crimson_planks.json | 0 .../altar/structure/cut_copper.json | 0 .../altar/structure/dark_oak_planks.json | 0 .../altar/structure/dark_prismarine.json | 0 .../altar/structure/deepslate_bricks.json | 0 .../altar/structure/deepslate_tiles.json | 0 .../altar/structure/diorite.json | 0 .../altar/structure/end_stone_bricks.json | 0 .../altar/structure/exposed_cut_copper.json | 0 .../altar/structure/granite.json | 0 .../altar/structure/jungle_planks.json | 0 .../altar/structure/mangrove_planks.json | 0 .../altar/structure/mossy_cobblestone.json | 0 .../altar/structure/mossy_stone_bricks.json | 0 .../altar/structure/mud_bricks.json | 0 .../altar/structure/nether_bricks.json | 0 .../altar/structure/oak_planks.json | 0 .../altar/structure/oxidized_cut_copper.json | 0 .../altar/structure/polished_andesite.json | 0 .../altar/structure/polished_blackstone.json | 0 .../structure/polished_blackstone_bricks.json | 0 .../altar/structure/polished_deepslate.json | 0 .../altar/structure/polished_diorite.json | 0 .../altar/structure/polished_granite.json | 0 .../altar/structure/prismarine.json | 0 .../altar/structure/prismarine_bricks.json | 0 .../altar/structure/purpur_block.json | 0 .../altar/structure/quartz_block.json | 0 .../altar/structure/red_nether_bricks.json | 0 .../altar/structure/red_sandstone.json | 0 .../altar/structure/sandstone.json | 0 .../altar/structure/smooth_quartz.json | 0 .../altar/structure/smooth_red_sandstone.json | 0 .../altar/structure/smooth_sandstone.json | 0 .../altar/structure/spruce_planks.json | 0 .../altar/structure/stone.json | 5 + .../altar/structure/stone_bricks.json | 0 .../altar/structure/warped_planks.json | 0 .../altar/structure/waxed_cut_copper.json | 0 .../structure/waxed_exposed_cut_copper.json | 0 .../structure/waxed_oxidized_cut_copper.json | 0 .../structure/waxed_weathered_cut_copper.json | 0 .../altar/structure/weathered_cut_copper.json | 0 .../altar/structure/witchwood_planks.json | 0 .../occulus_tab}/affinity.json | 0 .../occulus_tab}/defense.json | 0 .../occulus_tab}/offense.json | 0 .../occulus_tab}/utility.json | 0 .../prefab_spell}/arcane_bolt.json | 0 .../prefab_spell}/area_lightning.json | 0 .../prefab_spell}/blink.json | 0 .../prefab_spell}/chaos_water_bolt.json | 0 .../prefab_spell}/dispel.json | 0 .../prefab_spell}/ender_bolt.json | 0 .../prefab_spell}/ender_torrent.json | 0 .../prefab_spell}/ender_wave.json | 0 .../prefab_spell}/fire_bolt.json | 0 .../prefab_spell}/heal_self.json | 0 .../prefab_spell}/lightning_bolt.json | 0 .../prefab_spell}/lightning_rune.json | 0 .../prefab_spell}/melt_armor.json | 0 .../prefab_spell}/nausea.json | 0 .../prefab_spell}/otherworldly_roar.json | 0 .../prefab_spell}/scramble_synapses.json | 0 .../prefab_spell}/water_bolt.json | 0 .../ritual}/spawn_air_guardian.json | 0 .../ritual}/spawn_arcane_guardian.json | 0 .../ritual}/spawn_earth_guardian.json | 0 .../ritual}/spawn_ender_guardian.json | 0 .../ritual}/spawn_fire_guardian.json | 0 .../ritual}/spawn_ice_guardian.json | 4 + .../ritual}/spawn_life_guardian.json | 0 .../ritual}/spawn_lightning_guardian.json | 0 .../ritual}/spawn_water_guardian.json | 0 .../skill}/absorption.json | 1 + .../skill}/agility.json | 1 + .../skill}/aoe.json | 1 + .../skill}/astral_distortion.json | 1 + .../skill}/attract.json | 1 + .../skill}/banish_rain.json | 1 + .../skill}/beam.json | 1 + .../skill}/blindness.json | 1 + .../skill}/blink.json | 1 + .../skill}/blizzard.json | 2 + .../skill}/bounce.json | 1 + .../skill}/chain.json | 1 + .../skill}/channel.json | 1 + .../skill}/charm.json | 1 + .../skill}/contingency_damage.json | 1 + .../skill}/contingency_death.json | 1 + .../skill}/contingency_fall.json | 1 + .../skill}/contingency_fire.json | 1 + .../skill}/contingency_health.json | 1 + .../skill}/create_water.json | 1 + .../skill}/damage.json | 1 + .../skill}/daylight.json | 2 + .../skill}/dig.json | 1 + .../skill}/disarm.json | 1 + .../skill}/dismembering.json | 2 + .../skill}/dispel.json | 1 + .../skill}/divine_intervention.json | 1 + .../skill}/drought.json | 1 + .../skill}/drowning_damage.json | 1 + .../skill}/duration.json | 1 + .../skill}/effect_power.json | 2 + .../skill}/ender_intervention.json | 1 + .../skill}/entangle.json | 1 + .../skill}/explosion.json | 1 + .../skill}/falling_star.json | 2 + .../skill}/fire_damage.json | 1 + .../skill}/fire_rain.json | 2 + .../skill}/flight.json | 1 + .../skill}/fling.json | 1 + .../skill}/forge.json | 1 + .../skill}/frost.json | 1 + .../skill}/frost_damage.json | 1 + .../skill}/fury.json | 1 + .../skill}/gravity.json | 1 + .../skill}/gravity_well.json | 1 + .../skill}/grow.json | 1 + .../skill}/harvest.json | 1 + .../skill}/haste.json | 1 + .../skill}/heal.json | 1 + .../skill}/healing.json | 1 + .../skill}/ignition.json | 1 + .../skill}/invisibility.json | 1 + .../skill}/jump_boost.json | 1 + .../skill}/knockback.json | 1 + .../skill}/levitation.json | 1 + .../skill}/life_drain.json | 1 + .../skill}/life_tap.json | 1 + .../skill}/light.json | 1 + .../skill}/lightning_damage.json | 1 + .../skill}/lunar.json | 1 + .../skill}/magic_damage.json | 1 + .../skill}/mana_blast.json | 2 + .../skill}/mana_drain.json | 1 + .../skill}/mana_shield.json | 2 + .../skill}/mining_power.json | 1 + .../skill}/moonrise.json | 2 + .../skill}/night_vision.json | 1 + .../skill}/physical_damage.json | 1 + .../skill}/piercing.json | 1 + .../skill}/place_block.json | 1 + .../skill}/plant.json | 1 + .../skill}/plow.json | 1 + .../skill}/projectile.json | 2 + .../skill}/prosperity.json | 2 + .../skill}/random_teleport.json | 1 + .../skill}/range.json | 1 + .../skill}/recall.json | 1 + .../skill}/reflect.json | 1 + .../skill}/regeneration.json | 1 + .../skill}/repel.json | 1 + .../skill}/rift.json | 1 + .../skill}/rune.json | 1 + .../skill}/rune_procs.json | 1 + .../skill}/self.json | 2 + .../skill}/shield.json | 1 + .../skill}/shrink.json | 1 + .../skill}/silence.json | 1 + .../skill}/silk_touch.json | 1 + .../skill}/slow_falling.json | 1 + .../skill}/slowness.json | 1 + .../skill}/solar.json | 1 + .../skill}/storm.json | 1 + .../skill}/summon.json | 1 + .../skill}/swift_swim.json | 1 + .../skill}/target_non_solid.json | 1 + .../skill}/telekinesis.json | 1 + .../skill}/temporal_anchor.json | 1 + .../skill}/touch.json | 2 + .../skill}/transplace.json | 1 + .../skill}/true_sight.json | 1 + .../skill}/velocity.json | 1 + .../skill}/wall.json | 1 + .../skill}/water_breathing.json | 1 + .../skill}/watery_grave.json | 1 + .../skill}/wave.json | 1 + .../skill}/wizards_autumn.json | 1 + .../skill}/zone.json | 1 + .../clay_to_sand_drought.json | 0 ...s_to_cracked_deepslate_bricks_drought.json | 0 ...es_to_cracked_deepslate_tiles_drought.json | 0 .../dirt_to_sand_drought.json | 0 .../gravel_to_sand_drought.json | 0 ...infested_cracked_stone_bricks_drought.json | 0 ...stone_to_infested_cobblestone_drought.json | 0 ...icks_to_cracked_nether_bricks_drought.json | 0 ...ed_polished_blackstone_bricks_drought.json | 0 ...quartz_block_to_smooth_quartz_drought.json | 0 ...stone_to_smooth_red_sandstone_drought.json | 0 ...sandstone_to_smooth_sandstone_drought.json | 0 .../small_flowers_to_dead_bush_drought.json | 0 ...ricks_to_cracked_stone_bricks_drought.json | 0 .../stone_to_cobblestone_drought.json | 0 .../forge/biome_modifier/aum.json | 12 + .../forge/biome_modifier/cerublossom.json | 18 + .../forge/biome_modifier/chimerite_ore.json | 6 + .../forge/biome_modifier/desert_nova.json | 12 + .../forge/biome_modifier/dryad.json | 16 + .../biome_modifier/liquid_essence_lake.json | 6 + .../forge/biome_modifier/tarma_root.json | 19 + .../forge/biome_modifier/topaz_extra_ore.json | 12 + .../forge/biome_modifier/topaz_ore.json | 6 + .../forge/biome_modifier/vinteum_ore.json | 6 + .../forge/biome_modifier/wakebloom.json | 18 + .../forge/biome_modifier/witchwood_tree.json | 12 + .../obelisk_fuel/liquid_essence_bucket.json | 7 + .../recipes/arcane_compendium.json | 2 +- .../recipes/battlemage_boots.json | 3 +- .../recipes/battlemage_chestplate.json | 3 +- .../recipes/battlemage_helmet.json | 3 +- .../recipes/battlemage_leggings.json | 3 +- ...chimerite_from_blasting_chimerite_ore.json | 10 + ...from_blasting_deepslate_chimerite_ore.json | 10 + ...chimerite_from_smelting_chimerite_ore.json | 10 + ...from_smelting_deepslate_chimerite_ore.json | 10 + .../arsmagicalegacy/recipes/mana_martini.json | 3 +- ...from_blasting_deepslate_moonstone_ore.json | 10 + ...moonstone_from_blasting_moonstone_ore.json | 10 + ...from_smelting_deepslate_moonstone_ore.json | 10 + ...moonstone_from_smelting_moonstone_ore.json | 10 + ...paz_from_blasting_deepslate_topaz_ore.json | 10 + .../topaz_from_blasting_topaz_ore.json | 10 + ...paz_from_smelting_deepslate_topaz_ore.json | 10 + .../topaz_from_smelting_topaz_ore.json | 10 + ...t_from_blasting_deepslate_vinteum_ore.json | 10 + ...inteum_dust_from_blasting_vinteum_ore.json | 10 + ...t_from_smelting_deepslate_vinteum_ore.json | 10 + ...inteum_dust_from_smelting_vinteum_ore.json | 10 + .../recipes/witchwood_fence.json | 10 +- .../recipes/witchwood_fence_gate.json | 10 +- .../data/arsmagicalegacy/spell_parts/aoe.json | 4 +- .../spell_parts/contingency_damage.json | 4 +- .../spell_parts/contingency_fall.json | 4 +- .../spell_parts/contingency_fire.json | 4 +- .../arsmagicalegacy/spell_parts/wall.json | 4 +- .../arsmagicalegacy/spell_parts/wave.json | 4 +- .../worldgen/configured_feature/aum.json | 30 + .../configured_feature/cerublossom.json | 30 + .../configured_feature/chimerite_ore.json | 27 + .../configured_feature/desert_nova.json | 30 + .../liquid_essence_lake.json | 23 + .../configured_feature/tarma_root.json | 30 + .../configured_feature/topaz_ore.json | 27 + .../configured_feature/topaz_ore_extra.json | 27 + .../configured_feature/vinteum_ore.json | 27 + .../configured_feature/wakebloom.json | 30 + .../configured_feature/witchwood_tree.json | 53 ++ .../worldgen/placed_feature/aum.json | 19 + .../worldgen/placed_feature/cerublossom.json | 19 + .../placed_feature/chimerite_ore.json | 27 + .../worldgen/placed_feature/desert_nova.json | 19 + .../placed_feature/liquid_essence_lake.json | 19 + .../worldgen/placed_feature/tarma_root.json | 19 + .../worldgen/placed_feature/topaz_ore.json | 27 + .../placed_feature/topaz_ore_extra.json | 27 + .../placed_feature/trees_witchwood.json | 51 ++ .../worldgen/placed_feature/vinteum_ore.json | 27 + .../worldgen/placed_feature/wakebloom.json | 19 + .../placed_feature/witchwood_tree.json | 17 + .../arsmagicalegacy/ArsMagicaAPIImpl.java | 40 +- .../arsmagicalegacy/ArsMagicaLegacy.java | 12 +- .../arsmagicalegacy/Config.java | 105 ++- .../arsmagicalegacy/client/ClientHelper.java | 13 + .../arsmagicalegacy/client/ClientInit.java | 22 +- .../client/gui/InscriptionTableScreen.java | 22 +- .../client/gui/SpellCustomizationScreen.java | 6 +- .../client/gui/dropdis/DragHandler.java | 4 +- .../client/gui/dropdis/DragPane.java | 1 + .../occulus/OcculusAffinityTabRenderer.java | 56 +- .../client/gui/occulus/OcculusScreen.java | 25 +- .../occulus/OcculusSkillTreeTabRenderer.java | 76 +-- .../client/gui/occulus/OcculusTabButton.java | 9 +- .../client/hud/AbstractHUD.java | 48 +- .../client/hud/BurnoutHUD.java | 11 +- .../arsmagicalegacy/client/hud/ManaHUD.java | 11 +- .../client/hud/ShapeGroupHUD.java | 13 +- .../client/hud/SpellBookHUD.java | 32 +- .../arsmagicalegacy/client/hud/XpHUD.java | 25 +- .../client/model/AffinityOverrideModel.java | 6 +- .../client/model/SkillPointOverrideModel.java | 4 +- .../client/model/SpellItemModel.java | 5 +- .../common/ability/AbilityManager.java | 79 --- .../common/ability/package-info.java | 7 - .../{ability => affinity}/AbilityUUIDs.java | 2 +- .../common/affinity/Affinity.java | 163 ----- .../common/affinity/AffinityHelper.java | 26 +- .../common/block/OcculusBlock.java | 2 +- .../block/altar/AltarCoreBlockEntity.java | 17 +- .../block/altar/AltarMaterialManager.java | 100 --- .../InscriptionTableBlock.java | 2 +- .../InscriptionTableBlockEntity.java | 4 +- .../InscriptionTableMenu.java | 5 +- .../common/block/obelisk/ObeliskBlock.java | 2 +- .../common/entity/ArcaneGuardian.java | 10 +- .../common/entity/FireGuardian.java | 8 +- .../common/entity/LifeGuardian.java | 8 +- .../common/entity/LightningGuardian.java | 12 +- .../common/entity/ManaCreeper.java | 16 +- .../common/entity/WaterGuardian.java | 4 +- .../common/entity/ai/ChaosWaterBoltGoal.java | 5 +- .../common/entity/ai/DispelGoal.java | 4 +- .../common/entity/ai/EnderBoltGoal.java | 5 +- .../common/entity/ai/EnderTorrentGoal.java | 5 +- .../common/entity/ai/EnderWaveGoal.java | 5 +- .../common/entity/ai/OtherwordlyRoarGoal.java | 5 +- .../common/entity/ai/ProtectGoal.java | 5 +- .../common/handler/AbilityHandler.java | 119 ++-- .../common/handler/EffectHandler.java | 1 + .../common/handler/EventHandler.java | 42 +- .../common/handler/TickHandler.java | 85 ++- .../common/init/AMAbilities.java | 85 +-- .../common/init/AMAffinities.java | 27 +- .../common/init/AMAttributes.java | 6 +- .../common/init/AMBlockEntities.java | 16 +- .../arsmagicalegacy/common/init/AMBlocks.java | 2 + .../common/init/AMDataSerializers.java | 4 +- .../common/init/AMEntities.java | 36 +- .../common/init/AMFeatures.java | 207 ------ .../arsmagicalegacy/common/init/AMFluids.java | 44 ++ .../arsmagicalegacy/common/init/AMItems.java | 3 + .../common/init/AMRegistries.java | 137 ++-- .../common/init/AMRituals.java | 48 ++ .../common/init/AMSkillPoints.java | 10 +- .../arsmagicalegacy/common/init/AMStats.java | 32 +- .../common/item/AffinityEssenceItem.java | 6 +- .../common/item/AffinityTomeItem.java | 6 +- .../common/item/InfinityOrbItem.java | 4 +- .../common/item/SpellItem.java | 107 +--- .../common/level/WitchwoodTreeGrower.java | 8 +- .../common/ritual/RitualEffect.java | 15 - .../common/ritual/RitualManager.java | 95 --- .../common/ritual/RitualRequirement.java | 17 - .../common/ritual/RitualTrigger.java | 17 - .../effect/EntitySpawnRitualEffect.java | 2 +- .../ritual/requirement/BiomeRequirement.java | 2 +- .../requirement/DimensionRequirement.java | 2 +- .../requirement/DimensionTypeRequirement.java | 2 +- .../ritual/requirement/HeightRequirement.java | 2 +- .../requirement/MagicLevelRequirement.java | 2 +- .../requirement/MoonPhaseRequirement.java | 2 +- .../RitualStructureRequirement.java | 4 +- .../UltrawarmDimensionRequirement.java | 2 +- .../ritual/trigger/EntityDeathTrigger.java | 6 +- .../ritual/trigger/EntitySummonTrigger.java | 6 +- .../trigger/GameEventRitualTrigger.java | 6 +- .../ritual/trigger/ItemDropRitualTrigger.java | 6 +- .../common/skill/OcculusTab.java | 135 ---- .../common/skill/OcculusTabManager.java | 58 -- .../arsmagicalegacy/common/skill/Skill.java | 117 ---- .../common/skill/SkillHelper.java | 88 +-- .../common/skill/SkillManager.java | 78 +-- .../common/skill/SkillPoint.java | 5 - .../common/spell/PrefabSpellManager.java | 82 --- .../arsmagicalegacy/common/spell/Spell.java | 18 +- .../common/spell/SpellDataManager.java | 6 +- .../common/spell/SpellHelper.java | 6 +- .../spell/SpellTransformationManager.java | 23 +- .../common/spell/component/Drought.java | 4 - .../common/spell/shape/Projectile.java | 4 +- .../arsmagicalegacy/common/util/AMUtil.java | 6 +- .../common/util/TranslationConstants.java | 1 - .../arsmagicalegacy/compat/jei/JEICompat.java | 14 +- .../compat/patchouli/CapStateMatcher.java | 8 +- .../patchouli/MainBlockStateMatcher.java | 8 +- .../compat/patchouli/SpellPartPage.java | 11 +- .../patchouli/StairBlockStateMatcher.java | 8 +- .../network/LearnSkillPacket.java | 3 +- .../network/SpellIconSelectPacket.java | 6 +- .../server/commands/AffinityCommand.java | 14 +- .../server/commands/SkillCommand.java | 42 +- .../server/commands/SkillPointCommand.java | 16 +- .../resources/META-INF/accesstransformer.cfg | 1 - .../blockstates/inscription_table.json | 601 ------------------ .../models/block/inscription_table_left2.json | 3 +- .../block/inscription_table_right2.json | 3 +- .../textures/block/liquid_essence_flowing.png | Bin 0 -> 11915 bytes .../block/liquid_essence_flowing.png.mcmeta | 3 + .../textures/block/liquid_essence_still.png | Bin 0 -> 15689 bytes .../block/liquid_essence_still.png.mcmeta | 5 + .../arsmagicalegacy/test/BossSpawnTest.java | 3 +- 595 files changed, 5554 insertions(+), 4486 deletions(-) delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbility.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityData.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityManager.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/package-info.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Ability.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Affinity.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinity.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/RitualProvider.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTab.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTabManager.java rename src/{main/java/com/github/minecraftschurlimods/arsmagicalegacy/common => api/java/com/github/minecraftschurlimods/arsmagicalegacy/api}/ritual/Context.java (91%) rename src/{main/java/com/github/minecraftschurlimods/arsmagicalegacy/common => api/java/com/github/minecraftschurlimods/arsmagicalegacy/api}/ritual/Ritual.java (50%) create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualEffect.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualRequirement.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualTrigger.java rename src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/{occulus => ritual}/package-info.java (55%) delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkill.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillManager.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPoint.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/OcculusTab.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/Skill.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/SkillPoint.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpellManager.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/PrefabSpell.java create mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/SpellTransformation.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/IDataManager.java delete mode 100644 src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/Range.java create mode 100644 src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockFamilies.java create mode 100644 src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMWorldgenProvider.java create mode 100644 src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/WorldgenProvider.java create mode 100644 src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/RecipeProviderMixin.java create mode 100644 src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/package-info.java create mode 100644 src/data/resources/arsmagicalegacy_data.mixins.json create mode 100644 src/main/generated/.cache/6105d15ab67ad96ebc6a7b00490b938f89464181 delete mode 100644 src/main/generated/.cache/64b328e8ca02181af0888a733cf726544b298906 delete mode 100644 src/main/generated/.cache/ac420c79fa682b7dd66450d20527913a78925041 create mode 100644 src/main/generated/.cache/d77929551118acd4db709cfd511c31b0e5dea349 create mode 100644 src/main/generated/.cache/ed858a761f932c7e621a979ba5024c6adcf7c36e create mode 100644 src/main/generated/assets/arsmagicalegacy/blockstates/inscription_table.json create mode 100644 src/main/generated/assets/arsmagicalegacy/blockstates/liquid_essence.json rename src/main/{resources => generated}/assets/arsmagicalegacy/blockstates/occulus.json (100%) create mode 100644 src/main/generated/assets/arsmagicalegacy/models/block/liquid_essence.json create mode 100644 src/main/generated/assets/arsmagicalegacy/models/item/liquid_essence_bucket.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_deepslate_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_deepslate_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_deepslate_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_deepslate_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_deepslate_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_deepslate_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_deepslate_vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_deepslate_vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_vinteum_ore.json rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/clarity.json (80%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/enderman_pumpkin.json (80%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/enderman_thorns.json (80%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/fall_damage.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/feather_falling.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/fire_punch.json (79%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/fire_resistance.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/frost_punch.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/frost_walker.json (79%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/gravity.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/haste.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/jump_boost.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/light_health_reduction.json (100%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/magic_damage.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/mana_reduction.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/nausea.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/nether_damage_nature.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/nether_damage_water.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/night_vision.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/poison_resistance.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/regeneration.json (79%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/resistance.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/saturation.json (80%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/slowness.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/smite.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/speed.json (83%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/step_assist.json (81%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/swim_speed.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/thorns.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/water_damage_fire.json (82%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/water_damage_lightning.json (83%) rename src/main/generated/data/arsmagicalegacy/{affinity_abilities => arsmagicalegacy/ability}/water_health_reduction.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/chimerite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/coal.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/diamond.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/emerald.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/exposed_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/glass.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/gold.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/iron.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/lapis.json (100%) create mode 100644 src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/moonstone.json rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/netherite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/oxidized_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/redstone.json (100%) create mode 100644 src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/sunstone.json rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/topaz.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/vinteum.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/waxed_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/waxed_exposed_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/waxed_oxidized_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/waxed_weathered_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/cap/weathered_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/acacia_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/andesite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/birch_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/blackstone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/cobbled_deepslate.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/cobblestone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/crimson_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/dark_oak_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/dark_prismarine.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/deepslate_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/deepslate_tiles.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/diorite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/end_stone_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/exposed_cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/granite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/jungle_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/mangrove_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/mossy_cobblestone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/mossy_stone_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/mud_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/nether_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/oak_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/oxidized_cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/polished_andesite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/polished_blackstone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/polished_blackstone_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/polished_deepslate.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/polished_diorite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/polished_granite.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/prismarine.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/prismarine_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/purpur_block.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/quartz_block.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/red_nether_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/red_sandstone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/sandstone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/smooth_quartz.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/smooth_red_sandstone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/smooth_sandstone.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/spruce_planks.json (100%) create mode 100644 src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone.json rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/stone_bricks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/warped_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/waxed_cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/waxed_exposed_cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/waxed_oxidized_cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/waxed_weathered_cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/weathered_cut_copper.json (100%) rename src/main/generated/data/arsmagicalegacy/{ => arsmagicalegacy}/altar/structure/witchwood_planks.json (100%) rename src/main/generated/data/arsmagicalegacy/{occulus_tabs => arsmagicalegacy/occulus_tab}/affinity.json (100%) rename src/main/generated/data/arsmagicalegacy/{occulus_tabs => arsmagicalegacy/occulus_tab}/defense.json (100%) rename src/main/generated/data/arsmagicalegacy/{occulus_tabs => arsmagicalegacy/occulus_tab}/offense.json (100%) rename src/main/generated/data/arsmagicalegacy/{occulus_tabs => arsmagicalegacy/occulus_tab}/utility.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/arcane_bolt.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/area_lightning.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/blink.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/chaos_water_bolt.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/dispel.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/ender_bolt.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/ender_torrent.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/ender_wave.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/fire_bolt.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/heal_self.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/lightning_bolt.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/lightning_rune.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/melt_armor.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/nausea.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/otherworldly_roar.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/scramble_synapses.json (100%) rename src/main/generated/data/arsmagicalegacy/{prefab_spells => arsmagicalegacy/prefab_spell}/water_bolt.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_air_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_arcane_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_earth_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_ender_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_fire_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_ice_guardian.json (81%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_life_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_lightning_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_rituals => arsmagicalegacy/ritual}/spawn_water_guardian.json (100%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/absorption.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/agility.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/aoe.json (93%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/astral_distortion.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/attract.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/banish_rain.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/beam.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/blindness.json (91%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/blink.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/blizzard.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/bounce.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/chain.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/channel.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/charm.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/contingency_damage.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/contingency_death.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/contingency_fall.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/contingency_fire.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/contingency_health.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/create_water.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/damage.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/daylight.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/dig.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/disarm.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/dismembering.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/dispel.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/divine_intervention.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/drought.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/drowning_damage.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/duration.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/effect_power.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/ender_intervention.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/entangle.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/explosion.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/falling_star.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/fire_damage.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/fire_rain.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/flight.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/fling.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/forge.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/frost.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/frost_damage.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/fury.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/gravity.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/gravity_well.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/grow.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/harvest.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/haste.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/heal.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/healing.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/ignition.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/invisibility.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/jump_boost.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/knockback.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/levitation.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/life_drain.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/life_tap.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/light.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/lightning_damage.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/lunar.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/magic_damage.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/mana_blast.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/mana_drain.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/mana_shield.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/mining_power.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/moonrise.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/night_vision.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/physical_damage.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/piercing.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/place_block.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/plant.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/plow.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/projectile.json (76%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/prosperity.json (73%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/random_teleport.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/range.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/recall.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/reflect.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/regeneration.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/repel.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/rift.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/rune.json (91%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/rune_procs.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/self.json (76%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/shield.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/shrink.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/silence.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/silk_touch.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/slow_falling.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/slowness.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/solar.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/storm.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/summon.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/swift_swim.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/target_non_solid.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/telekinesis.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/temporal_anchor.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/touch.json (76%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/transplace.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/true_sight.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/velocity.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/wall.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/water_breathing.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/watery_grave.json (90%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/wave.json (91%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/wizards_autumn.json (89%) rename src/main/generated/data/arsmagicalegacy/{am_skills => arsmagicalegacy/skill}/zone.json (89%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/clay_to_sand_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/deepslate_bricks_to_cracked_deepslate_bricks_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/deepslate_tiles_to_cracked_deepslate_tiles_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/dirt_to_sand_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/gravel_to_sand_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/infested_stone_bricks_to_infested_cracked_stone_bricks_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/infested_stone_to_infested_cobblestone_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/nether_bricks_to_cracked_nether_bricks_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/quartz_block_to_smooth_quartz_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/red_sandstone_to_smooth_red_sandstone_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/sandstone_to_smooth_sandstone_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/small_flowers_to_dead_bush_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/stone_bricks_to_cracked_stone_bricks_drought.json (100%) rename src/main/generated/data/arsmagicalegacy/{spell_transformations => arsmagicalegacy/spell_transformation}/stone_to_cobblestone_drought.json (100%) create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/aum.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/cerublossom.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/desert_nova.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/dryad.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/liquid_essence_lake.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/tarma_root.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_extra_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/wakebloom.json create mode 100644 src/main/generated/data/arsmagicalegacy/forge/biome_modifier/witchwood_tree.json create mode 100644 src/main/generated/data/arsmagicalegacy/obelisk_fuel/liquid_essence_bucket.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_deepslate_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_deepslate_chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_deepslate_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_deepslate_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_moonstone_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_deepslate_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_deepslate_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_deepslate_vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_deepslate_vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/aum.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/cerublossom.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/desert_nova.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/liquid_essence_lake.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/tarma_root.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore_extra.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/wakebloom.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/witchwood_tree.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/aum.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/cerublossom.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/chimerite_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/desert_nova.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/liquid_essence_lake.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/tarma_root.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore_extra.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/trees_witchwood.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/vinteum_ore.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/wakebloom.json create mode 100644 src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/witchwood_tree.json delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/AbilityManager.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/package-info.java rename src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/{ability => affinity}/AbilityUUIDs.java (98%) delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/Affinity.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarMaterialManager.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFeatures.java create mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFluids.java create mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRituals.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualEffect.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualManager.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualRequirement.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualTrigger.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTab.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTabManager.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/Skill.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillPoint.java delete mode 100644 src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/PrefabSpellManager.java delete mode 100644 src/main/resources/assets/arsmagicalegacy/blockstates/inscription_table.json create mode 100644 src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_flowing.png create mode 100644 src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_flowing.png.mcmeta create mode 100644 src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_still.png create mode 100644 src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_still.png.mcmeta diff --git a/.editorconfig b/.editorconfig index fb26491ed..2adda7664 100644 --- a/.editorconfig +++ b/.editorconfig @@ -111,8 +111,8 @@ ij_java_for_brace_force = always ij_java_for_statement_new_line_after_left_paren = false ij_java_for_statement_right_paren_on_new_line = false ij_java_for_statement_wrap = off -ij_java_generate_final_locals = true -ij_java_generate_final_parameters = true +ij_java_generate_final_locals = false +ij_java_generate_final_parameters = false ij_java_if_brace_force = always ij_java_imports_layout = *,|,javax.**,java.**,|,$* ij_java_indent_case_from_switch = true diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 7bfc83240..2ea55c5ef 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -52,7 +52,9 @@ body: - 1.18.2-1.1.0 - 1.18.2-1.1.1 - 1.18.2-1.1.2 - - 1.19-1.1.2 + - 1.18.2-1.1.3 + - 1.18.2-1.1.4 + - 1.19.2-1.1.4 validations: required: true - type: input diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ab46ce786..e513838dc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,6 +49,7 @@ jobs: build/libs/${{ steps.build.outputs.modid }}-${{ steps.build.outputs.version }}-sources.jar build/libs/${{ steps.build.outputs.modid }}-${{ steps.build.outputs.version }}-javadoc.jar build/libs/${{ steps.build.outputs.modid }}-${{ steps.build.outputs.version }}-deobf.jar + build/libs/${{ steps.build.outputs.modid }}-${{ steps.build.outputs.version }}-all.jar body: > ${{ steps.changelog.outputs.content }} - name: CF upload @@ -60,7 +61,7 @@ jobs: token: ${{ secrets.CF_API_TOKEN }} project_id: ${{ steps.build.outputs.project_id }} game_versions: ${{ steps.build.outputs.curse_versions }} - file_path: build/libs/${{ steps.build.outputs.modid }}-${{ steps.build.outputs.version }}.jar + file_path: build/libs/${{ steps.build.outputs.modid }}-${{ steps.build.outputs.version }}-all.jar relations: ${{ steps.build.outputs.curse_relations }} changelog_type: markdown changelog: > diff --git a/.gitignore b/.gitignore index fd0c0c5dd..2e6ed149c 100644 --- a/.gitignore +++ b/.gitignore @@ -116,3 +116,4 @@ run/ /src/generated/resources/.cache/ !run/client/options.txt !run/server/eula.txt +/local.properties diff --git a/build.gradle b/build.gradle index b6cd8575a..a0bd9c0f3 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,15 @@ plugins { //============================================= +if (project.rootProject.file("local.properties").exists()) { + try (def stream = project.rootProject.file("local.properties").newDataInputStream()) { + def properties = new Properties() + properties.load(stream) + properties.forEach { key, value -> + project.ext.set(key, value) + } + } +} mixin { add sourceSets.main, "${project.mod_id}.refmap.json" @@ -71,7 +80,7 @@ sourceSets { srcDirs += 'src/main/generated' exclude '.cache' } - data.resources.srcDirs = [] + data {} } configurations { @@ -113,6 +122,19 @@ configurations { dataImplementation.extendsFrom(datagenLibrary) } +def github(RepositoryHandler rep, String ownerRepo) { + if (project.hasProperty('github_packages_user') && project.hasProperty('github_packages_token')) { + rep.maven { + name = "${ownerRepo}" + url = "https://maven.pkg.github.com/${ownerRepo}" + credentials { + username = "${project.github_packages_user}" + password = "${project.github_packages_token}" + } + } + } +} + repositories { mavenLocal() mavenCentral() @@ -185,8 +207,8 @@ dependencies { annotationProcessor group: 'org.spongepowered', name: 'mixin', version: project.mixin_version, classifier: 'processor' // jei for integration - modAPI fg.deobf("mezz.jei:jei-${project.mc_version}-common-api:${project.jei_version}") - //runtimeMod fg.deobf("mezz.jei:jei-${project.mc_version}-forge:${project.jei_version}") + modAPI fg.deobf("mezz.jei:jei-1.19.1-common-api:${project.jei_version}") + runtimeMod fg.deobf("mezz.jei:jei-1.19.1-forge:${project.jei_version}") // curios for additional inventory slots modAPI fg.deobf("top.theillusivec4.curios:curios-forge:${project.curios_version}:api") @@ -201,8 +223,11 @@ dependencies { runtimeMod fg.deobf("mcjty.theoneprobe:theoneprobe:${project.top_version}") { transitive = false } if (!System.getenv('GITHUB_ACTIONS')) { + if (project.hasProperty('github_packages_user') && project.hasProperty('github_packages_token')) { + println 'Using github packages' + } runtimeMod fg.deobf("com.github.minecraftschurlimods:potionbundles:${project.potionbundles_version}") - runtimeMod fg.deobf("com.blamejared.controlling:Controlling-forge-${project.mc_version}:${project.controlling_version}") + runtimeMod fg.deobf("com.blamejared.controlling:Controlling-forge-1.19.1:${project.controlling_version}") } // add internal libraries @@ -215,6 +240,9 @@ dependencies { include fg.deobf('com.github.minecraftschurlimods:betterkeybindlib:1.19-1.1-SNAPSHOT') { jarJar.ranged(it, '[1.19-1.1-SNAPSHOT,)') } + include fg.deobf('com.github.minecraftschurlimods:betterhudlib:1.19-1.0-SNAPSHOT') { + jarJar.ranged(it, '[1.19-1.0-SNAPSHOT,)') + } datagenLibrary fg.deobf('com.github.minecraftschurlimods:patchouli_datagen-forge-1.19:1.0-SNAPSHOT') implementation sourceSets.api.output @@ -254,7 +282,7 @@ minecraft { data { ideaModule "${project.name.replace(' ', '_')}.data" singleInstance true - args '--mod', project.mod_id, '--all', '--output', file('src/main/generated/'), '--existing', file('src/main/resources/') + args '--mod', project.mod_id, '--all', '--output', file('src/main/generated/'), '--existing', file('src/main/resources/'), '--mixin.config', "${project.mod_id}_data.mixins.json" mods.create("${project.mod_id}") { source sourceSets.api as SourceSet source sourceSets.main as SourceSet diff --git a/changelog.md b/changelog.md index 50f4c9156..fbf871730 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,7 @@ -# Version 1.19-1.1.2 +# Version 1.19.2-1.1.4 ## Changes -- Update to 1.19 +- Update to 1.19.2 +- Moved some Datapack stuff +- Added HUD management diff --git a/gradle.properties b/gradle.properties index 3333e273f..36e53157f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.daemon=false mod_group=com.github.minecraftschurlimods mod_id=arsmagicalegacy mod_name=Ars Magica: Legacy -mod_version=1.1.2 +mod_version=1.1.4 mod_author=Minecraftschurli, IchHabeHunger54 mod_credits=Mithion for the original mod mod_url=https://www.curseforge.com/minecraft/mc-mods/ars-magica-legacy @@ -18,25 +18,25 @@ java_version=17 mixin_version=0.8.5 mappings_channel=parchment -mappings_version=1.18.2-2022.06.05-1.19 +mappings_version=1.18.2-2022.06.05-1.19.2 -mc_version=1.19 -forge_version=41.0.99 +mc_version=1.19.2 +forge_version=43.0.7 -loader_version_range=[41,) -forge_version_range=[41.0.99,) -mc_version_range=[1.19,1.20) +loader_version_range=[43,) +forge_version_range=[43.0.7,) +mc_version_range=[1.19.2,1.20) patchouli_version_range=[1.19-75,1.20) -curios_version_range=[1.19,1.20) +curios_version_range=[1.19.2,1.20) jei_version_range=[11,) -jei_version=11.0.0.206 +jei_version=11.2.0.244 top_version=1.19-6.2.0-6 -curios_version=1.19-5.1.0.4 +curios_version=1.19.2-5.1.1.0 patchouli_version=1.19-76-SNAPSHOT potionbundles_version=1.19-1.4-SNAPSHOT -controlling_version=10.0+3 +controlling_version=10.0+4 curse_project_id=350734 -curse_versions=Java 17,Forge,Minecraft 1.19:1.19 +curse_versions=Java 17,Forge,Minecraft 1.19:1.19.2 curse_relations=configured:optionalDependency,catalogue:optionalDependency,potion-bundles:optionalDependency,jei:optionalDependency,curios:optionalDependency,patchouli:requiredDependency,the-one-probe:optionalDependency diff --git a/run/client/options.txt b/run/client/options.txt index fcff7148b..9a0b9c62e 100644 --- a/run/client/options.txt +++ b/run/client/options.txt @@ -111,11 +111,41 @@ key_key.hotbar.6:key.keyboard.6 key_key.hotbar.7:key.keyboard.7 key_key.hotbar.8:key.keyboard.8 key_key.hotbar.9:key.keyboard.9 -key_key.toggleLiquids:key.keyboard.unknown key_key.toggleVisible:key.keyboard.unknown +key_key.toggleLiquids:key.keyboard.unknown key_key.curios.open.desc:key.keyboard.g +key_hud_manager.open:key.keyboard.m:ALT key_key.arsmagicalegacy.next_shape_group:key.keyboard.c:SHIFT key_key.arsmagicalegacy.configure_spell:key.keyboard.m:CONTROL +key_key.jei.previousSearch:key.keyboard.up +key_key.jei.previousPage:key.keyboard.unknown +key_key.jei.nextSearch:key.keyboard.down +key_key.jei.toggleHideIngredient:key.mouse.left:CONTROL +key_key.jei.showUses:key.keyboard.u +key_key.jei.toggleBookmarkOverlay:key.keyboard.unknown +key_key.jei.bookmark:key.keyboard.a +key_key.jei.toggleCheatMode:key.keyboard.unknown +key_key.jei.cheatOneItem:key.mouse.left +key_key.jei.showRecipe2:key.mouse.left +key_key.jei.previousRecipePage:key.keyboard.page.up +key_key.jei.nextCategory:key.keyboard.page.down:SHIFT +key_key.jei.cheatItemStack2:key.mouse.middle +key_key.jei.toggleEditMode:key.keyboard.unknown +key_key.jei.toggleCheatModeConfigButton:key.mouse.left:CONTROL +key_key.jei.toggleWildcardHideIngredient:key.mouse.right:CONTROL +key_key.jei.nextPage:key.keyboard.unknown +key_key.jei.cheatItemStack:key.mouse.left:SHIFT +key_key.jei.closeRecipeGui:key.keyboard.escape +key_key.jei.toggleOverlay:key.keyboard.o:CONTROL +key_key.jei.recipeBack:key.keyboard.backspace +key_key.jei.showRecipe:key.keyboard.r +key_key.jei.nextRecipePage:key.keyboard.page.down +key_key.jei.clearSearchBar:key.mouse.right +key_key.jei.previousCategory:key.keyboard.page.up:SHIFT +key_key.jei.copy.recipe.id:key.keyboard.unknown +key_key.jei.cheatOneItem2:key.mouse.right +key_key.jei.focusSearch:key.keyboard.f:CONTROL +key_key.jei.showUses2:key.mouse.right soundCategory_master:0.01986755 soundCategory_music:0.0 soundCategory_record:1.0 diff --git a/settings.gradle b/settings.gradle index 9972c76b8..094e842ec 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,7 +1,7 @@ pluginManagement { plugins { id 'org.ec4j.editorconfig' version '0.0.3' - id 'net.minecraftforge.gradle' version '5.1.+' + id 'net.minecraftforge.gradle' version '5.1.53' id 'org.spongepowered.mixin' version '0.7-SNAPSHOT' id 'org.parchmentmc.librarian.forgegradle' version '1.2+' } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ArsMagicaAPI.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ArsMagicaAPI.java index c2b22d2cc..ebca96765 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ArsMagicaAPI.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ArsMagicaAPI.java @@ -1,8 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbilityManager; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.etherium.IEtheriumHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.ContingencyType; @@ -11,10 +9,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IMagicHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IManaHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IRiftHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTabManager; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualEffect; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillManager; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellDataManager; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellHelper; @@ -22,6 +21,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellTransformationManager; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ShapeGroup; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellStack; +import com.mojang.serialization.Codec; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.CreativeModeTab; @@ -32,6 +32,7 @@ import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.registries.IForgeRegistry; import org.apache.logging.log4j.LogManager; +import org.jetbrains.annotations.ApiStatus.Experimental; import org.jetbrains.annotations.ApiStatus.NonExtendable; import org.jetbrains.annotations.Unmodifiable; @@ -78,48 +79,37 @@ static ArsMagicaAPI get() { /** * @return The registry for skill points. */ - IForgeRegistry getSkillPointRegistry(); + IForgeRegistry getSkillPointRegistry(); /** * @return The registry for affinities. */ - IForgeRegistry getAffinityRegistry(); + IForgeRegistry getAffinityRegistry(); /** * @return The registry for spell parts. */ IForgeRegistry getSpellPartRegistry(); - /** - * @return The registry for abilities. - */ - IForgeRegistry getAbilityRegistry(); - /** * @return The registry for contingency types. */ IForgeRegistry getContingencyTypeRegistry(); - /** - * @return The skill manager instance. - */ - ISkillManager getSkillManager(); + @Experimental + IForgeRegistry> getRitualTriggerTypeRegistry(); - /** - * @return The occulus tab manager instance. - */ - IOcculusTabManager getOcculusTabManager(); + @Experimental + IForgeRegistry> getRitualRequirementTypeRegistry(); + + @Experimental + IForgeRegistry> getRitualEffectTypeRegistry(); /** * @return The spell data manager instance. */ ISpellDataManager getSpellDataManager(); - /** - * @return The ability manager instance. - */ - IAbilityManager getAbilityManager(); - /** * @return The spell data manager instance. */ diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbility.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbility.java deleted file mode 100644 index 017aad55e..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbility.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.ability; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; -import net.minecraft.resources.ResourceLocation; - -import java.util.Objects; - -/** - * Base interface for all abilities. - */ -public interface IAbility extends ITranslatable.WithDescription { - @Override - default String getType() { - return "ability"; - } - - @Override - default ResourceLocation getId() { - return Objects.requireNonNull(ArsMagicaAPI.get().getAbilityRegistry().getKey(this)); - } -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityData.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityData.java deleted file mode 100644 index dc9d910f6..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.ability; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; -import net.minecraft.advancements.critereon.MinMaxBounds; -import net.minecraft.world.entity.player.Player; - -import java.util.function.Predicate; - -/** - * The data holding interface for an affinity ability. - */ -public interface IAbilityData extends Predicate { - /** - * @return The bounds of affinity depth the ability is active in. - */ - MinMaxBounds.Doubles bounds(); - - /** - * @return The affinity the ability belongs to. - */ - IAffinity affinity(); - - @Override - default boolean test(Player player) { - return bounds().matches(ArsMagicaAPI.get().getAffinityHelper().getAffinityDepth(player, affinity())); - } -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityManager.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityManager.java deleted file mode 100644 index 954a5b054..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/IAbilityManager.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.ability; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.IDataManager; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.player.Player; - -import java.util.List; - -/** - * Provides and manages the data for all abilities and some helper methods. - */ -public interface IAbilityManager extends IDataManager { - - /** - * @param player The player to check. - * @return The abilities the given player currently has. - */ - List getAbilitiesForPlayer(Player player); - - /** - * @param affinity The affinity to check. - * @return All abilities for the given affinity. - */ - List getAbilitiesForAffinity(IAffinity affinity); - - /** - * @param affinity The id of the affinity to check. - * @return All abilities for the given affinity. - */ - List getAbilitiesForAffinity(ResourceLocation affinity); - - /** - * @param player The player to check. - * @param ability The ability to check. - * @return Whether the player has the ability. - */ - boolean hasAbility(Player player, ResourceLocation ability); -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/package-info.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/package-info.java deleted file mode 100644 index 2fdd8d1ad..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ability/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package com.github.minecraftschurlimods.arsmagicalegacy.api.ability; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Ability.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Ability.java new file mode 100644 index 000000000..f2280eadc --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Ability.java @@ -0,0 +1,52 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.affinity; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; +import com.github.minecraftschurlimods.codeclib.CodecHelper; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.advancements.critereon.MinMaxBounds; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.RegistryCodecs; +import net.minecraft.resources.RegistryFileCodec; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; + +import java.util.Objects; +import java.util.function.Predicate; + +/** + * @param affinity The affinity the ability belongs to. + * @param bounds The bounds of affinity depth the ability is active in. + */ +public record Ability(Affinity affinity, MinMaxBounds.Doubles bounds) implements ITranslatable.WithDescription, Predicate { + public static final String ABILITY = "ability"; + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, ABILITY)); + + public static final Codec DIRECT_CODEC = RecordCodecBuilder.create(inst -> inst.group( + CodecHelper.forRegistry(ArsMagicaAPI.get()::getAffinityRegistry).fieldOf("affinity").forGetter(Ability::affinity), + CodecHelper.DOUBLE_MIN_MAX_BOUNDS.fieldOf("bounds").forGetter(Ability::bounds) + ).apply(inst, Ability::new)); + + public static final Codec> REFERENCE_CODEC = RegistryFileCodec.create(REGISTRY_KEY, DIRECT_CODEC); + public static final Codec> LIST_CODEC = RegistryCodecs.homogeneousList(REGISTRY_KEY, DIRECT_CODEC); + + @Override + public boolean test(Player player) { + return bounds().matches(ArsMagicaAPI.get().getAffinityHelper().getAffinityDepth(player, affinity())); + } + + @Override + public String getType() { + return ABILITY; + } + + @Override + public ResourceLocation getId(RegistryAccess registryAccess) { + return Objects.requireNonNull(registryAccess.registryOrThrow(REGISTRY_KEY).getKey(this)); + } +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Affinity.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Affinity.java new file mode 100644 index 000000000..4d9747a4e --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/Affinity.java @@ -0,0 +1,201 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.affinity; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +/** + * @param color The color for this affinity. + * @param minorOpposites The minor opposing affinities for this affinity. + * @param majorOpposites The major opposing affinities for this affinity. + * @param directOpposite The direct opposing affinity for this affinity. + * @param castSound The sound to play when casting a spell with this affinity. + * @param loopSound The sound to play when casting a continuous spell with this affinity. + */ +public record Affinity(int color, Set minorOpposites, Set majorOpposites, ResourceLocation directOpposite, Supplier castSound, Supplier loopSound) implements Comparable, ITranslatable { + public static final String AFFINITY = "affinity"; + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, AFFINITY)); + + public static final ResourceLocation NONE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "none"); + public static final ResourceLocation ARCANE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "arcane"); + public static final ResourceLocation WATER = new ResourceLocation(ArsMagicaAPI.MOD_ID, "water"); + public static final ResourceLocation FIRE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "fire"); + public static final ResourceLocation EARTH = new ResourceLocation(ArsMagicaAPI.MOD_ID, "earth"); + public static final ResourceLocation AIR = new ResourceLocation(ArsMagicaAPI.MOD_ID, "air"); + public static final ResourceLocation LIGHTNING = new ResourceLocation(ArsMagicaAPI.MOD_ID, "lightning"); + public static final ResourceLocation ICE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "ice"); + public static final ResourceLocation NATURE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "nature"); + public static final ResourceLocation LIFE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "life"); + public static final ResourceLocation ENDER = new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender"); + + /** + * @return A new affinity builder. + */ + public static Builder builder() { + return new Builder(); + } + + /** + * @return The minor opposing affinities for this affinity. + */ + @Unmodifiable + @Override + public Set minorOpposites() { + return Collections.unmodifiableSet(minorOpposites); + } + + /** + * @return The major opposing affinities for this affinity. + */ + @Unmodifiable + @Override + public Set majorOpposites() { + return Collections.unmodifiableSet(majorOpposites); + } + + /** + * @return The adjacent affinities for this affinity. + */ + public Set getAdjacentAffinities() { + return ArsMagicaAPI.get().getAffinityRegistry().getValues().stream().filter(iAffinity -> !minorOpposites().contains(iAffinity.getId()) && !majorOpposites().contains(iAffinity.getId()) && !directOpposite().equals(iAffinity.getId())).map(Affinity::getId).collect(Collectors.toSet()); + } + + /** + * @return The sound that should be played when casting a spell with this affinity. + */ + @Nullable + public SoundEvent getCastSound() { + return castSound().get(); + } + + /** + * @return The sound that should be played when casting a continuous spell with this affinity. + */ + @Nullable + public SoundEvent getLoopSound() { + return loopSound().get(); + } + + @Override + public String getType() { + return AFFINITY; + } + + @Override + public ResourceLocation getId() { + return Objects.requireNonNull(ArsMagicaAPI.get().getAffinityRegistry().getKey(this)); + } + + @Override + public int compareTo(Affinity o) { + return Comparator.comparing(ArsMagicaAPI.get().getAffinityRegistry()::getKey).compare(this, o); + } + + public static class Builder { + private final Set minorOpposites = new HashSet<>(); + private final Set majorOpposites = new HashSet<>(); + private Integer color; + private ResourceLocation directOpposite; + private Supplier castSound; + private Supplier loopSound; + + /** + * @param color The color to set. + * @return This builder, for chaining. + */ + public Builder setColor(int color) { + this.color = color; + return this; + } + + /** + * @param minorOpposite The minor opposite to add. + * @return This builder, for chaining. + */ + public Builder addMinorOpposite(ResourceLocation minorOpposite) { + minorOpposites.add(minorOpposite); + return this; + } + + /** + * @param majorOpposite The major opposite to add. + * @return This builder, for chaining. + */ + public Builder addMajorOpposite(ResourceLocation majorOpposite) { + majorOpposites.add(majorOpposite); + return this; + } + + /** + * @param minorOpposite The minor opposite(s) to add. + * @return This builder, for chaining. + */ + public Builder addMinorOpposites(ResourceLocation... minorOpposite) { + minorOpposites.addAll(Arrays.asList(minorOpposite)); + return this; + } + + /** + * @param majorOpposite The major opposite(s) to add. + * @return This builder, for chaining. + */ + public Builder addMajorOpposites(ResourceLocation... majorOpposite) { + majorOpposites.addAll(Arrays.asList(majorOpposite)); + return this; + } + + /** + * @param directOpposite The direct opposite to set. + * @return This builder, for chaining. + */ + public Builder setDirectOpposite(ResourceLocation directOpposite) { + this.directOpposite = directOpposite; + return this; + } + + /** + * @param castSound The cast sound to set. + * @return This builder, for chaining. + */ + public Builder setCastSound(Supplier castSound) { + this.castSound = castSound; + return this; + } + + /** + * @param loopSound The loop sound to set. + * @return This builder, for chaining. + */ + public Builder setLoopSound(Supplier loopSound) { + this.loopSound = loopSound; + return this; + } + + /** + * @return The affinity created from this builder. + */ + public Affinity build() { + if (color == null) { + throw new IllegalStateException("An affinity needs a color!"); + } + if (directOpposite == null) { + throw new IllegalStateException("An affinity needs a direct opposite!"); + } + return new Affinity(color, minorOpposites, majorOpposites, directOpposite, castSound, loopSound); + } + } +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinity.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinity.java deleted file mode 100644 index 9906bdc01..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinity.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.affinity; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.sounds.SoundEvent; -import org.jetbrains.annotations.Nullable; - -import java.util.Comparator; -import java.util.Objects; -import java.util.Set; - -/** - * Interface representing an affinity. - */ -public interface IAffinity extends Comparable, ITranslatable { - String AFFINITY = "affinity"; - ResourceLocation NONE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "none"); - ResourceLocation ARCANE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "arcane"); - ResourceLocation WATER = new ResourceLocation(ArsMagicaAPI.MOD_ID, "water"); - ResourceLocation FIRE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "fire"); - ResourceLocation EARTH = new ResourceLocation(ArsMagicaAPI.MOD_ID, "earth"); - ResourceLocation AIR = new ResourceLocation(ArsMagicaAPI.MOD_ID, "air"); - ResourceLocation LIGHTNING = new ResourceLocation(ArsMagicaAPI.MOD_ID, "lightning"); - ResourceLocation ICE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "ice"); - ResourceLocation NATURE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "nature"); - ResourceLocation LIFE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "life"); - ResourceLocation ENDER = new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender"); - - /** - * @return The color of this affinity. - */ - int getColor(); - - /** - * @return The minor opposing affinities for this affinity. - */ - Set getMinorOpposingAffinities(); - - /** - * @return The major opposing affinities for this affinity. - */ - Set getMajorOpposingAffinities(); - - /** - * @return The adjacent affinities for this affinity. - */ - Set getAdjacentAffinities(); - - /** - * @return The direct opposing affinity for this affinity. - */ - ResourceLocation getDirectOpposingAffinity(); - - /** - * @return The sound that should be played when casting a spell with this affinity. - */ - @Nullable - SoundEvent getCastSound(); - - /** - * @return The sound that should be played when casting a continuous spell with this affinity. - */ - @Nullable - SoundEvent getLoopSound(); - - @Override - default String getType() { - return AFFINITY; - } - - @Override - default ResourceLocation getId() { - return Objects.requireNonNull(ArsMagicaAPI.get().getAffinityRegistry().getKey(this)); - } - - @Override - default int compareTo(IAffinity o) { - return Comparator.comparing(ArsMagicaAPI.get().getAffinityRegistry()::getKey).compare(this, o); - } -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityHelper.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityHelper.java index 6df59f64a..9ba645809 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityHelper.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityHelper.java @@ -19,7 +19,7 @@ public interface IAffinityHelper { * @param affinity The affinity to get the essence stack for. * @return An item stack containing the affinity essence. */ - ItemStack getEssenceForAffinity(IAffinity affinity); + ItemStack getEssenceForAffinity(Affinity affinity); /** * @param affinity The id of the affinity to get the tome stack for. @@ -31,12 +31,12 @@ public interface IAffinityHelper { * @param affinity The affinity to get the tome stack for. * @return An item stack containing the affinity tome. */ - ItemStack getTomeForAffinity(IAffinity affinity); + ItemStack getTomeForAffinity(Affinity affinity); /** * @param item The item to make the item stack from. * @param affinity The id of the affinity to set on the item stack. - * @param The item implementing IAffinityItem. + * @param The item implementing AffinityItem. * @return An item stack of the given item with the given affinity stored in it. */ ItemStack getStackForAffinity(T item, ResourceLocation affinity); @@ -44,16 +44,16 @@ public interface IAffinityHelper { /** * @param item The item to make the item stack from. * @param affinity The affinity to set on the item stack. - * @param The item implementing IAffinityItem. + * @param The item implementing AffinityItem. * @return An item stack of the given item with the given affinity stored in it. */ - ItemStack getStackForAffinity(T item, IAffinity affinity); + ItemStack getStackForAffinity(T item, Affinity affinity); /** * @param stack The stack to get the affinity from. * @return The affinity stored in the stack, or the NONE affinity if the stack does not contain one. */ - IAffinity getAffinityForStack(ItemStack stack); + Affinity getAffinityForStack(ItemStack stack); /** * @param player The player to get the affinity depth for. @@ -67,7 +67,7 @@ public interface IAffinityHelper { * @param affinity The affinity to get the depth for. * @return The depth of the given player in the given affinity. */ - double getAffinityDepth(Player player, IAffinity affinity); + double getAffinityDepth(Player player, Affinity affinity); /** * @param player The player to set the affinity depth for. @@ -81,7 +81,7 @@ public interface IAffinityHelper { * @param affinity The affinity to set the depth for. * @param amount The amount the affinity should have. */ - void setAffinityDepth(Player player, IAffinity affinity, float amount); + void setAffinityDepth(Player player, Affinity affinity, float amount); /** * Applies the affinity shift for the given player and affinity. @@ -99,5 +99,5 @@ public interface IAffinityHelper { * @param affinity The affinity to shift. * @param shift The amount to shift. */ - void applyAffinityShift(Player player, IAffinity affinity, float shift); + void applyAffinityShift(Player player, Affinity affinity, float shift); } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityItem.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityItem.java index d19b36cdc..c2298cf7d 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityItem.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/affinity/IAffinityItem.java @@ -14,11 +14,11 @@ public interface IAffinityItem { * @param stack The stack to get the affinity from. * @return The affinity stored in the stack, or the NONE affinity if the stack does not contain one. */ - default IAffinity getAffinity(ItemStack stack) { + default Affinity getAffinity(ItemStack stack) { var registry = ArsMagicaAPI.get().getAffinityRegistry(); ResourceLocation key = ResourceLocation.tryParse(stack.getOrCreateTag().getString(registry.getRegistryName().toString())); if (key == null) { - key = IAffinity.NONE; + key = Affinity.NONE; } return Objects.requireNonNull(registry.getValue(key)); } @@ -28,7 +28,7 @@ default IAffinity getAffinity(ItemStack stack) { * @param affinity The affinity to set. * @return The stack, now with the given affinity set on it. */ - default ItemStack setAffinity(ItemStack stack, IAffinity affinity) { + default ItemStack setAffinity(ItemStack stack, Affinity affinity) { stack.getOrCreateTag().putString(ArsMagicaAPI.get().getAffinityRegistry().getRegistryName().toString(), affinity.getId().toString()); return stack; } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarCapMaterial.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarCapMaterial.java index cec074b80..15b062d28 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarCapMaterial.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarCapMaterial.java @@ -1,12 +1,17 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.altar; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraftforge.registries.ForgeRegistries; public record AltarCapMaterial(Block cap, int power) { + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "altar/cap")); public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( CodecHelper.forRegistry(() -> ForgeRegistries.BLOCKS).fieldOf("cap").forGetter(AltarCapMaterial::cap), Codec.INT.fieldOf("power").forGetter(AltarCapMaterial::power) diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarStructureMaterial.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarStructureMaterial.java index d3b2a7027..d1da12bf1 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarStructureMaterial.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/altar/AltarStructureMaterial.java @@ -1,8 +1,12 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.altar; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StairBlock; import net.minecraftforge.registries.ForgeRegistries; @@ -10,6 +14,7 @@ import java.util.function.Function; public record AltarStructureMaterial(Block block, StairBlock stair, int power) { + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "altar/structure")); public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( CodecHelper.forRegistry(() -> ForgeRegistries.BLOCKS).fieldOf("block").forGetter(AltarStructureMaterial::block), CodecHelper.forRegistry(() -> ForgeRegistries.BLOCKS).xmap(block1 -> block1 instanceof StairBlock stairBlock ? stairBlock : null, Function.identity()).fieldOf("stair").forGetter(AltarStructureMaterial::stair), diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/client/OcculusTabRenderer.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/client/OcculusTabRenderer.java index d16268a1f..1c547fbd6 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/client/OcculusTabRenderer.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/client/OcculusTabRenderer.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.client; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; @@ -24,7 +24,7 @@ public abstract class OcculusTabRenderer extends AbstractContainerEventHandler implements Widget, NarratableEntry { protected final int textureHeight; protected final int textureWidth; - protected final IOcculusTab occulusTab; + protected final OcculusTab occulusTab; protected final Screen parent; protected int screenWidth; protected int screenHeight; @@ -33,9 +33,9 @@ public abstract class OcculusTabRenderer extends AbstractContainerEventHandler i protected int posX; protected int posY; - protected OcculusTabRenderer(IOcculusTab occulusTab, Screen parent) { - textureHeight = occulusTab.getHeight(); - textureWidth = occulusTab.getWidth(); + protected OcculusTabRenderer(OcculusTab occulusTab, Screen parent) { + this.textureHeight = occulusTab.height(); + this.textureWidth = occulusTab.width(); this.occulusTab = occulusTab; this.parent = parent; } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityBuilder.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityBuilder.java index bf52746cb..f5294dd0b 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityBuilder.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityBuilder.java @@ -1,11 +1,10 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; -import com.google.gson.JsonObject; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.resources.ResourceLocation; -import org.apache.commons.lang3.SerializationException; import org.jetbrains.annotations.Contract; import java.util.Objects; @@ -42,7 +41,7 @@ public ResourceLocation getId() { * @return This builder, for chaining. */ @Contract("_ -> this") - public AbilityBuilder setAffinity(ResourceLocation affinity) { + public AbilityBuilder withAffinity(ResourceLocation affinity) { this.affinity = affinity; return this; } @@ -54,8 +53,8 @@ public AbilityBuilder setAffinity(ResourceLocation affinity) { * @return This builder, for chaining. */ @Contract("_ -> this") - public AbilityBuilder setAffinity(IAffinity affinity) { - return setAffinity(Objects.requireNonNull(ArsMagicaAPI.get().getAffinityRegistry().getKey(affinity))); + public AbilityBuilder withAffinity(Affinity affinity) { + return withAffinity(Objects.requireNonNull(ArsMagicaAPI.get().getAffinityRegistry().getKey(affinity))); } /** @@ -64,7 +63,7 @@ public AbilityBuilder setAffinity(IAffinity affinity) { * @param bounds The bounds to set. * @return This builder, for chaining. */ - public AbilityBuilder setBounds(MinMaxBounds.Doubles bounds) { + public AbilityBuilder withBounds(MinMaxBounds.Doubles bounds) { this.bounds = bounds; return this; } @@ -81,22 +80,10 @@ public AbilityBuilder build(Consumer consumer) { return this; } - /** - * @return The affinity for this ability. - */ - public ResourceLocation getAffinity() { - if (affinity == null) throw new SerializationException("An ability needs an affinity!"); - return affinity; - } - /** * @return The serialized ability. */ - JsonObject serialize() { - JsonObject json = new JsonObject(); - json.addProperty("affinity", this.getAffinity().toString()); - if (bounds == null) throw new SerializationException("An ability needs bounds!"); - json.add("bounds", this.bounds.serializeToJson()); - return json; + Ability build() { + return new Ability(Objects.requireNonNull(ArsMagicaAPI.get().getAffinityRegistry().getValue(this.affinity)), this.bounds); } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityProvider.java index 91e37d7f8..c45ea7558 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityProvider.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AbilityProvider.java @@ -1,33 +1,33 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; +import com.mojang.serialization.JsonOps; import net.minecraft.advancements.critereon.MinMaxBounds; +import net.minecraft.core.RegistryAccess; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; import org.jetbrains.annotations.ApiStatus.Internal; import java.io.IOException; import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.HashMap; +import java.util.Map; import java.util.function.Consumer; public abstract class AbilityProvider implements DataProvider { - private static final Logger LOGGER = LogManager.getLogger(); - private final DataGenerator generator; private final String namespace; - private final Multimap abilitiesByAffinity = HashMultimap.create(); + private final Map abilities = new HashMap<>(); + private final JsonCodecProvider provider; - protected AbilityProvider(String namespace, DataGenerator generator) { + protected AbilityProvider(String namespace, DataGenerator generator, ExistingFileHelper existingFileHelper) { this.namespace = namespace; - this.generator = generator; + this.provider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()), Ability.REGISTRY_KEY, abilities); } /** @@ -37,24 +37,16 @@ protected AbilityProvider(String namespace, DataGenerator generator) { * @return The abilities for the given affinity. */ public Collection getAbilitiesForAffinity(ResourceLocation affinity) { - return Collections.unmodifiableCollection(abilitiesByAffinity.get(affinity)); + return abilities.entrySet().stream().filter(ability -> ability.getValue().affinity().getId().equals(affinity)).map(Map.Entry::getKey).toList(); } protected abstract void createAbilities(Consumer consumer); @Internal @Override - public void run(CachedOutput pCache) { - Set ids = new HashSet<>(); - createAbilities(consumer -> { - if (!ids.add(consumer.getId())) throw new IllegalStateException("Duplicate ability " + consumer.getId()); - abilitiesByAffinity.put(consumer.getAffinity(), consumer.getId()); - try { - DataProvider.saveStable(pCache, consumer.serialize(), generator.getOutputFolder().resolve("data/" + consumer.getId().getNamespace() + "/affinity_abilities/" + consumer.getId().getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Couldn't save ability {}", consumer.getId(), e); - } - }); + public void run(CachedOutput pCache) throws IOException { + createAbilities(builder -> abilities.put(builder.getId(), builder.build())); + provider.run(pCache); } @Override @@ -62,6 +54,10 @@ public String getName() { return "Abilities[" + namespace + "]"; } + public Ability get(ResourceLocation id) { + return abilities.get(id); + } + /** * @param ability The id of the ability. * @param affinity The id of the ability's affinity. @@ -69,7 +65,7 @@ public String getName() { * @return A new ability. */ protected AbilityBuilder createAbility(ResourceLocation ability, ResourceLocation affinity, MinMaxBounds.Doubles bounds) { - return AbilityBuilder.create(ability).setAffinity(affinity).setBounds(bounds); + return AbilityBuilder.create(ability).withAffinity(affinity).withBounds(bounds); } /** @@ -78,7 +74,7 @@ protected AbilityBuilder createAbility(ResourceLocation ability, ResourceLocatio * @param bounds The ability's bounds. * @return A new ability. */ - protected AbilityBuilder createAbility(ResourceLocation ability, IAffinity affinity, MinMaxBounds.Doubles bounds) { - return AbilityBuilder.create(ability).setAffinity(affinity.getId()).setBounds(bounds); + protected AbilityBuilder createAbility(ResourceLocation ability, Affinity affinity, MinMaxBounds.Doubles bounds) { + return AbilityBuilder.create(ability).withAffinity(affinity.getId()).withBounds(bounds); } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AltarStructureMaterialProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AltarStructureMaterialProvider.java index dbb14b0b0..c4a6ae032 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AltarStructureMaterialProvider.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/AltarStructureMaterialProvider.java @@ -2,57 +2,48 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarCapMaterial; import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarStructureMaterial; +import com.google.gson.JsonElement; import com.mojang.serialization.JsonOps; +import net.minecraft.core.RegistryAccess; +import net.minecraft.data.BlockFamily; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StairBlock; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; +import net.minecraftforge.registries.ForgeRegistries; import java.io.IOException; -import java.nio.file.Path; import java.util.HashMap; import java.util.Map; public abstract class AltarStructureMaterialProvider implements DataProvider { - private static final Logger LOGGER = LogManager.getLogger(); protected final DataGenerator generator; private final String namespace; private final Map capMaterials = new HashMap<>(); private final Map structureMaterials = new HashMap<>(); + private final JsonCodecProvider capProvider; + private final JsonCodecProvider structureProvider; - public AltarStructureMaterialProvider(String namespace, DataGenerator generator) { + public AltarStructureMaterialProvider(String namespace, DataGenerator generator, ExistingFileHelper existingFileHelper) { this.namespace = namespace; this.generator = generator; + RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()); + this.capProvider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, registryOps, AltarCapMaterial.REGISTRY_KEY, capMaterials); + this.structureProvider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, registryOps, AltarStructureMaterial.REGISTRY_KEY, structureMaterials); } protected abstract void createStructureMaterials(); @Override - public void run(CachedOutput pCache) { + public void run(CachedOutput pCache) throws IOException { createStructureMaterials(); - Path path = generator.getOutputFolder(); - for (Map.Entry entry : structureMaterials.entrySet()) { - ResourceLocation resourceLocation = entry.getKey(); - AltarStructureMaterial altarStructureMaterial = entry.getValue(); - try { - DataProvider.saveStable(pCache, AltarStructureMaterial.CODEC.encodeStart(JsonOps.INSTANCE, altarStructureMaterial).getOrThrow(false, LOGGER::warn), path.resolve("data/" + resourceLocation.getNamespace() + "/altar/structure/" + resourceLocation.getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Couldn't save structure material {}", resourceLocation, e); - } - } - for (Map.Entry entry : capMaterials.entrySet()) { - ResourceLocation resourceLocation = entry.getKey(); - AltarCapMaterial altarStructureMaterial = entry.getValue(); - try { - DataProvider.saveStable(pCache, AltarCapMaterial.CODEC.encodeStart(JsonOps.INSTANCE, altarStructureMaterial).getOrThrow(false, LOGGER::warn), path.resolve("data/" + resourceLocation.getNamespace() + "/altar/cap/" + resourceLocation.getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Couldn't save cap material {}", resourceLocation, e); - } - } + structureProvider.run(pCache); + capProvider.run(pCache); } @Override @@ -72,17 +63,63 @@ protected void addCapMaterial(String name, Block cap, int power) { } /** - * Adds a new structure material. + * Adds a new cap material. * - * @param name The name of the new cap material. - * @param block The block for the new cap material. - * @param stair The stair block for the new cap material. + * @param cap The block for the new cap material. * @param power The power of the new cap material. */ + protected void addCapMaterial(Block cap, int power) { + addCapMaterial(new ResourceLocation(this.namespace, getNameFor(cap)), cap, power); + } + + /** + * Adds a new structure material. + * + * @param name The name of the new structure material. + * @param block The block for the new structure material. + * @param stair The stair block for the new structure material. + * @param power The power of the new structure material. + */ protected void addStructureMaterial(String name, Block block, StairBlock stair, int power) { addStructureMaterial(new ResourceLocation(this.namespace, name), block, stair, power); } + /** + * Adds a new structure material. + * + * @param block The block for the new structure material. + * @param stair The stair block for the new structure material. + * @param power The power of the new structure material. + */ + protected void addStructureMaterial(Block block, StairBlock stair, int power) { + addStructureMaterial(new ResourceLocation(this.namespace, getNameFor(block)), block, stair, power); + } + + /** + * Adds a new structure material. + * + * @param name The name of the new structure material. + * @param blockFamily The block family for the new structure material. + * @param power The power of the new structure material. + */ + protected void addStructureMaterial(String name, BlockFamily blockFamily, int power) { + addStructureMaterial(new ResourceLocation(this.namespace, name), blockFamily.getBaseBlock(), (StairBlock) blockFamily.get(BlockFamily.Variant.STAIRS), power); + } + + /** + * Adds a new structure material. + * + * @param blockFamily The block family for the new structure material. + * @param power The power of the new structure material. + */ + protected void addStructureMaterial(BlockFamily blockFamily, int power) { + addStructureMaterial(new ResourceLocation(this.namespace, getNameFor(blockFamily.getBaseBlock())), blockFamily.getBaseBlock(), (StairBlock) blockFamily.get(BlockFamily.Variant.STAIRS), power); + } + + private String getNameFor(Block baseBlock) { + return ForgeRegistries.BLOCKS.getKey(baseBlock).getPath(); + } + /** * Adds a new cap material. * @@ -97,10 +134,10 @@ protected void addCapMaterial(ResourceLocation id, Block cap, int power) { /** * Adds a new structure material. * - * @param id The id of the new cap material. - * @param block The block for the new cap material. - * @param stair The stair block for the new cap material. - * @param power The power of the new cap material. + * @param id The id of the new structure material. + * @param block The block for the new structure material. + * @param stair The stair block for the new structure material. + * @param power The power of the new structure material. */ protected void addStructureMaterial(ResourceLocation id, Block block, StairBlock stair, int power) { structureMaterials.put(id, new AltarStructureMaterial(block, stair, power)); diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabBuilder.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabBuilder.java index 77497399f..089882ead 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabBuilder.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabBuilder.java @@ -1,19 +1,22 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; import com.github.minecraftschurlimods.arsmagicalegacy.api.client.OcculusTabRenderer; -import com.google.gson.JsonObject; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; import net.minecraft.resources.ResourceLocation; -import org.apache.commons.lang3.SerializationException; import org.jetbrains.annotations.Contract; import java.util.function.Consumer; public class OcculusTabBuilder { private final ResourceLocation id; - private Integer index; - private Integer startX; - private Integer startY; - private String renderer; + private String renderer = OcculusTab.DEFAULT_RENDERER; + private int index; + private int startX = 0; + private int startY = 0; + private int width = OcculusTab.TEXTURE_WIDTH; + private int height = OcculusTab.TEXTURE_HEIGHT; + private ResourceLocation background; + private ResourceLocation icon; protected OcculusTabBuilder(ResourceLocation id) { this.id = id; @@ -70,6 +73,54 @@ public OcculusTabBuilder setStartY(int startY) { return this; } + /** + * Sets the width of the occulus tab. + * + * @param width The width to set. + * @return This builder, for chaining. + */ + @Contract("_ -> this") + public OcculusTabBuilder setWidth(int width) { + this.width = width; + return this; + } + + /** + * Sets the height of the occulus tab. + * + * @param height The height to set. + * @return This builder, for chaining. + */ + @Contract("_ -> this") + public OcculusTabBuilder setHeight(int height) { + this.height = height; + return this; + } + + /** + * Sets the background of the occulus tab. + * + * @param background The background to set. + * @return This builder, for chaining. + */ + @Contract("_ -> this") + public OcculusTabBuilder setBackground(ResourceLocation background) { + this.background = background; + return this; + } + + /** + * Sets the icon of the occulus tab. + * + * @param icon The icon to set. + * @return This builder, for chaining. + */ + @Contract("_ -> this") + public OcculusTabBuilder setIcon(ResourceLocation icon) { + this.icon = icon; + return this; + } + /** * Sets the renderer class of the occulus tab. * @@ -108,13 +159,7 @@ public OcculusTabBuilder build(Consumer consumer) { /** * @return The serialized occulus tab. */ - JsonObject serialize() { - JsonObject json = new JsonObject(); - if (index == null) throw new SerializationException("An occulus tab needs an index!"); - json.addProperty("index", this.index); - json.addProperty("renderer", this.renderer); - json.addProperty("start_x", this.startX); - json.addProperty("start_y", this.startY); - return json; + OcculusTab build() { + return new OcculusTab(renderer, background, icon, width, height, startX, startY, index, null); } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabProvider.java index 0dc7dad91..621d849fd 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabProvider.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/OcculusTabProvider.java @@ -1,53 +1,42 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; +import com.mojang.serialization.JsonOps; +import net.minecraft.core.RegistryAccess; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; import org.jetbrains.annotations.ApiStatus.Internal; import java.io.IOException; -import java.util.HashSet; -import java.util.Set; +import java.util.HashMap; +import java.util.Map; import java.util.function.Consumer; /** * Base class for occulus tab data generators. */ public abstract class OcculusTabProvider implements DataProvider { - private static final Logger LOGGER = LogManager.getLogger(); - private final DataGenerator generator; + private final JsonCodecProvider provider; + private final Map data = new HashMap<>(); private final String namespace; - protected OcculusTabProvider(String namespace, DataGenerator generator) { + protected OcculusTabProvider(String namespace, DataGenerator generator, ExistingFileHelper existingFileHelper) { this.namespace = namespace; - this.generator = generator; + this.provider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()), OcculusTab.REGISTRY_KEY, data); } protected abstract void createOcculusTabs(Consumer consumer); @Internal @Override - public void run(CachedOutput pCache) { - Set ids = new HashSet<>(); - createOcculusTabs(consumer -> { - if (!ids.add(consumer.getId())) - throw new IllegalStateException("Duplicate occulus tab " + consumer.getId()); - else { - try { - DataProvider.saveStable(pCache, consumer.serialize(), generator.getOutputFolder().resolve("data/" + consumer.getId().getNamespace() + "/occulus_tabs/" + consumer.getId().getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Couldn't save occulus tab {}", consumer.getId(), e); - } - } - }); - } - - @Override - public String getName() { - return "Occulus Tabs[" + namespace + "]"; + public void run(CachedOutput pCache) throws IOException { + createOcculusTabs(occulusTabBuilder -> data.put(occulusTabBuilder.getId(), occulusTabBuilder.build())); + provider.run(pCache); } /** diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/PrefabSpellProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/PrefabSpellProvider.java index 0bc34b69f..910d05cea 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/PrefabSpellProvider.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/PrefabSpellProvider.java @@ -1,17 +1,18 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.google.gson.JsonObject; import com.mojang.serialization.JsonOps; +import net.minecraft.core.RegistryAccess; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; -import net.minecraft.data.HashCache; import net.minecraft.network.chat.Component; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -20,31 +21,24 @@ import java.util.Map; public abstract class PrefabSpellProvider implements DataProvider { - private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); private static final Logger LOGGER = LogManager.getLogger(); private final DataGenerator generator; private final String namespace; - private final Map data = new HashMap<>(); + private final Map data = new HashMap<>(); + private final JsonCodecProvider provider; - public PrefabSpellProvider(String namespace, DataGenerator generator) { + public PrefabSpellProvider(String namespace, DataGenerator generator, ExistingFileHelper existingFileHelper) { this.namespace = namespace; this.generator = generator; + this.provider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()), PrefabSpell.REGISTRY_KEY, data); } protected abstract void createPrefabSpells(); @Override - public void run(CachedOutput pCache) { + public void run(CachedOutput pCache) throws IOException { createPrefabSpells(); - for (Map.Entry entry : data.entrySet()) { - ResourceLocation id = entry.getKey(); - JsonElement spell = entry.getValue(); - try { - DataProvider.saveStable(pCache, spell, generator.getOutputFolder().resolve("data/" + id.getNamespace() + "/prefab_spells/" + id.getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Couldn't save prefab spell {}", id, e); - } - } + provider.run(pCache); } @Override @@ -110,7 +104,7 @@ public void build() { json.add("name", Component.Serializer.toJsonTree(name)); json.addProperty("icon", icon.toString()); json.add("spell", ISpell.CODEC.encodeStart(JsonOps.INSTANCE, spell).getOrThrow(false, LOGGER::warn)); - data.put(id, json); + data.put(id, new PrefabSpell(name, spell, icon)); } } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/RitualProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/RitualProvider.java new file mode 100644 index 000000000..c2b473b78 --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/RitualProvider.java @@ -0,0 +1,111 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.data; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Ritual; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualEffect; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; +import com.mojang.serialization.JsonOps; +import net.minecraft.core.BlockPos; +import net.minecraft.core.RegistryAccess; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.DataProvider; +import net.minecraft.resources.RegistryOps; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + +public abstract class RitualProvider implements DataProvider { + protected final Map data = new HashMap<>(); + protected final JsonCodecProvider provider; + private final String namespace; + + public RitualProvider(String namespace, DataGenerator generator, ExistingFileHelper existingFileHelper) { + this.namespace = namespace; + this.provider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()), Ritual.REGISTRY_KEY, data); + } + + @Override + public void run(CachedOutput pCache) throws IOException { + addRituals(this::addRitual); + provider.run(pCache); + } + + @Override + public String getName() { + return "AMRituals[" + namespace + "]"; + } + + public RitualBuilder builder(String id) { + return new RitualBuilder(new ResourceLocation(namespace, id)); + } + + protected abstract void addRituals(BiConsumer consumer); + + private void addRitual(ResourceLocation id, Ritual ritual) { + data.put(id, ritual); + } + + protected static class RitualBuilder { + private final List requirements = new ArrayList<>(); + private final ResourceLocation id; + private RitualEffect effect; + private RitualTrigger trigger; + private BlockPos offset = BlockPos.ZERO; + + private RitualBuilder(ResourceLocation id) { + this.id = id; + } + + public RitualBuilder with(RitualRequirement requirement) { + this.requirements.add(requirement); + return this; + } + + public RitualBuilder with(RitualRequirement... requirements) { + return with(Arrays.asList(requirements)); + } + + public RitualBuilder with(List requirements) { + this.requirements.addAll(requirements); + return this; + } + + public RitualBuilder with(RitualEffect effect) { + this.effect = effect; + return this; + } + + public RitualBuilder with(RitualTrigger trigger) { + this.trigger = trigger; + return this; + } + + public RitualBuilder with(BlockPos offset) { + this.offset = offset; + return this; + } + + private Ritual buildInternal() { + if (trigger == null) { + throw new IllegalStateException("Trigger must be set"); + } + if (effect == null) { + throw new IllegalStateException("Effect must be set"); + } + return new Ritual(trigger, requirements, effect, offset); + } + + public void build(BiConsumer consumer) { + consumer.accept(id, buildInternal()); + } + } +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillBuilder.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillBuilder.java index 675a76998..f79c14783 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillBuilder.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillBuilder.java @@ -1,12 +1,9 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkill; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import net.minecraft.resources.ResourceLocation; -import org.apache.commons.lang3.SerializationException; import org.jetbrains.annotations.Contract; import java.util.HashMap; @@ -47,7 +44,7 @@ public static SkillBuilder create(ResourceLocation id, ResourceLocation occulusT * @return A new builder for the skill. */ @Contract("_, _ -> new") - public static SkillBuilder create(ResourceLocation id, IOcculusTab occulusTab) { + public static SkillBuilder create(ResourceLocation id, OcculusTab occulusTab) { return new SkillBuilder(id).setOcculusTab(occulusTab); } @@ -79,7 +76,7 @@ public SkillBuilder addCost(ResourceLocation point, int amt) { * @return This builder, for chaining. */ @Contract("_, _ -> this") - public SkillBuilder addCost(ISkillPoint point, int amt) { + public SkillBuilder addCost(SkillPoint point, int amt) { return addCost(point.getId(), amt); } @@ -101,7 +98,7 @@ public SkillBuilder addCost(ResourceLocation point) { * @return This builder, for chaining. */ @Contract("_ -> this") - public SkillBuilder addCost(ISkillPoint point) { + public SkillBuilder addCost(SkillPoint point) { return addCost(point, 1); } @@ -124,7 +121,7 @@ public SkillBuilder addParent(ResourceLocation parent) { * @return This builder, for chaining. */ @Contract("_ -> this") - public SkillBuilder addParent(ISkill parent) { + public SkillBuilder addParent(Skill parent) { return addParent(parent.getId()); } @@ -194,7 +191,7 @@ protected SkillBuilder setOcculusTab(ResourceLocation occulusTab) { * @return This builder, for chaining. */ @Contract("_ -> this") - protected SkillBuilder setOcculusTab(IOcculusTab occulusTab) { + protected SkillBuilder setOcculusTab(OcculusTab occulusTab) { return setOcculusTab(occulusTab.getId()); } @@ -213,25 +210,7 @@ public SkillBuilder build(Consumer consumer) { /** * @return The serialized occulus tab. */ - JsonObject serialize() { - JsonObject json = new JsonObject(); - json.addProperty("occulus_tab", occulusTab.toString()); - if (x == null || y == null) throw new SerializationException("A skill needs a position!"); - json.addProperty("x", this.x); - json.addProperty("y", this.y); - if (hidden != null) { - json.addProperty("hidden", this.hidden); - } - if (!parents.isEmpty()) { - JsonArray parents = new JsonArray(); - this.parents.forEach(id -> parents.add(id.toString())); - json.add("parents", parents); - } - if (!cost.isEmpty()) { - JsonObject cost = new JsonObject(); - this.cost.forEach((id, amt) -> cost.addProperty(id.toString(), amt)); - json.add("cost", cost); - } - return json; + Skill build() { + return new Skill(parents, cost, occulusTab, x, y, hidden != null ? hidden : false); } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillProvider.java index d784ba209..e1a7c466a 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillProvider.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SkillProvider.java @@ -1,25 +1,24 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; +import com.mojang.serialization.JsonOps; +import net.minecraft.core.RegistryAccess; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; -import net.minecraft.data.HashCache; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.ApiStatus.Internal; -import java.io.BufferedWriter; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.Collections; -import java.util.HashSet; -import java.util.Objects; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import java.util.function.Consumer; @@ -28,40 +27,31 @@ */ public abstract class SkillProvider implements DataProvider { private static final Logger LOGGER = LogManager.getLogger(); - private final DataGenerator generator; private final String namespace; - private Set data; + private final JsonCodecProvider provider; + private final Map data = new HashMap<>(); - protected SkillProvider(String namespace, DataGenerator generator) { + protected SkillProvider(String namespace, DataGenerator generator, ExistingFileHelper existingFileHelper) { this.namespace = namespace; - this.generator = generator; + this.provider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()), Skill.REGISTRY_KEY, data); } protected abstract void createSkills(Consumer consumer); @Internal @Override - public void run(CachedOutput pCache) { - data = new HashSet<>(); - createSkills(skill -> { - if (!data.add(skill.getId())) throw new IllegalStateException("Duplicate skill " + skill.getId()); - else { - try { - DataProvider.saveStable(pCache, skill.serialize(), generator.getOutputFolder().resolve("data/" + skill.getId().getNamespace() + "/am_skills/" + skill.getId().getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Couldn't save skill {}", skill.getId(), e); - } - } - }); + public void run(CachedOutput pCache) throws IOException { + createSkills(skill -> data.put(skill.getId(), skill.build())); + provider.run(pCache); } @Override public String getName() { - return "Skills[" + namespace + "]"; + return provider.getName(); } public Set getSkills() { - return Collections.unmodifiableSet(data); + return Collections.unmodifiableSet(data.keySet()); } /** @@ -78,7 +68,7 @@ protected SkillBuilder createSkill(String name, ResourceLocation occulusTab) { * @param occulusTab The occulus tab to display the skill in. * @return A new skill. */ - protected SkillBuilder createSkill(String name, IOcculusTab occulusTab) { + protected SkillBuilder createSkill(String name, OcculusTab occulusTab) { return SkillBuilder.create(new ResourceLocation(namespace, name), occulusTab); } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellPartDataProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellPartDataProvider.java index 2340eaebc..10e3bf2b9 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellPartDataProvider.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellPartDataProvider.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellIngredient; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; import com.google.gson.JsonArray; @@ -207,7 +207,7 @@ public SpellPartDataBuilder withIngredient(ISpellIngredient ingredient) { * @param affinity The affinity to add. * @return This builder, for chaining. */ - public SpellPartDataBuilder withAffinity(Supplier affinity, float shift) { + public SpellPartDataBuilder withAffinity(Supplier affinity, float shift) { return withAffinity(affinity.get(), shift); } @@ -217,7 +217,7 @@ public SpellPartDataBuilder withAffinity(Supplier affinity, float shi * @param affinity The affinity to add. * @return This builder, for chaining. */ - public SpellPartDataBuilder withAffinity(IAffinity affinity, float shift) { + public SpellPartDataBuilder withAffinity(Affinity affinity, float shift) { affinities.put(affinity.getId(), shift); return this; } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellTransformationProvider.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellTransformationProvider.java index bc1a592e7..77a7c3db8 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellTransformationProvider.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/data/SpellTransformationProvider.java @@ -1,13 +1,19 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.data; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellTransformation; import com.google.gson.JsonObject; import com.mojang.serialization.JsonOps; +import net.minecraft.core.RegistryAccess; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; +import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -20,29 +26,21 @@ */ public abstract class SpellTransformationProvider implements DataProvider { private static final Logger LOGGER = LogManager.getLogger(); - private final Map data = new HashMap<>(); + private final Map data = new HashMap<>(); private final String namespace; - private final DataGenerator generator; + private final JsonCodecProvider provider; - public SpellTransformationProvider(String namespace, DataGenerator generator) { + public SpellTransformationProvider(String namespace, DataGenerator generator, ExistingFileHelper existingFileHelper) { this.namespace = namespace; - this.generator = generator; + this.provider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()), SpellTransformation.REGISTRY_KEY, data); } protected abstract void createSpellTransformations(); @Override - public void run(CachedOutput pCache) { + public void run(CachedOutput pCache) throws IOException { createSpellTransformations(); - for (Map.Entry entry : data.entrySet()) { - ResourceLocation resourceLocation = entry.getKey(); - JsonObject jsonObject = entry.getValue(); - try { - DataProvider.saveStable(pCache, jsonObject, generator.getOutputFolder().resolve("data/" + resourceLocation.getNamespace() + "/spell_transformations/" + resourceLocation.getPath() + ".json")); - } catch (IOException e) { - LOGGER.error("Couldn't save spell transformation {}", resourceLocation, e); - } - } + provider.run(pCache); } @Override @@ -58,36 +56,19 @@ public String getName() { * @param to The block state to transform to. * @param spellPart The spell part this transformation is for. */ - public void addSpellTransformation(ResourceLocation id, RuleTest from, BlockState to, ResourceLocation spellPart) { - new SpellTransformationBuilder(id, from, to, spellPart).build(); + public void addSpellTransformation(String id, RuleTest from, BlockState to, ResourceLocation spellPart) { + data.put(new ResourceLocation(namespace, id), new SpellTransformation(from, to, spellPart)); } - public class SpellTransformationBuilder { - private final ResourceLocation id; - private final RuleTest from; - private final BlockState to; - private final ResourceLocation spellPart; - - public SpellTransformationBuilder(ResourceLocation id, RuleTest from, BlockState to, ResourceLocation spellPart) { - this.id = id; - this.from = from; - this.to = to; - this.spellPart = spellPart; - } - - /** - * Builds the spell part data object. - */ - public void build() { - data.put(id, serialize()); - } - - JsonObject serialize() { - JsonObject json = new JsonObject(); - json.add("from", RuleTest.CODEC.encodeStart(JsonOps.INSTANCE, from).getOrThrow(false, s -> {})); - json.add("to", BlockState.CODEC.encodeStart(JsonOps.INSTANCE, to).getOrThrow(false, s -> {})); - json.addProperty("spell_part", spellPart.toString()); - return json; - } + /** + * Adds a new spell transformation. + * + * @param id The id of the transformation. + * @param from The block to apply the transformation to. + * @param to The block state to transform to. + * @param spellPart The spell part this transformation is for. + */ + public void addSpellTransformation(String id, RuleTest from, BlockState to, ISpellPart spellPart) { + data.put(new ResourceLocation(namespace, id), new SpellTransformation(from, to, spellPart.getId())); } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/event/AffinityChangingEvent.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/event/AffinityChangingEvent.java index cc5cc05f6..47071c5ea 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/event/AffinityChangingEvent.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/event/AffinityChangingEvent.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.event; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.Cancelable; @@ -9,13 +9,13 @@ public abstract class AffinityChangingEvent extends PlayerEvent { /** * The affinity being shifted. */ - public final IAffinity affinity; + public final Affinity affinity; /** * Whether this event was caused by a command or not. */ public final boolean commandSource; - public AffinityChangingEvent(Player player, IAffinity affinity, boolean commandSource) { + public AffinityChangingEvent(Player player, Affinity affinity, boolean commandSource) { super(player); this.affinity = affinity; this.commandSource = commandSource; @@ -31,7 +31,7 @@ public static final class Pre extends AffinityChangingEvent { */ public float shift; - public Pre(Player player, IAffinity affinity, float shift, boolean commandSource) { + public Pre(Player player, Affinity affinity, float shift, boolean commandSource) { super(player, affinity, commandSource); this.shift = shift; } @@ -47,7 +47,7 @@ public static final class Post extends AffinityChangingEvent { */ public final float shift; - public Post(Player player, IAffinity affinity, float shift, boolean commandSource) { + public Post(Player player, Affinity affinity, float shift, boolean commandSource) { super(player, affinity, commandSource); this.shift = shift; } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/magic/ContingencyType.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/magic/ContingencyType.java index 7a874519d..e818fbb4d 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/magic/ContingencyType.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/magic/ContingencyType.java @@ -3,12 +3,16 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; /** * Class representing a contingency type. Only used to register them. */ public final class ContingencyType { + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "contingency_type")); + public static final ResourceLocation NONE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "none"); public static final ResourceLocation DEATH = new ResourceLocation(ArsMagicaAPI.MOD_ID, "death"); public static final ResourceLocation FIRE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "fire"); diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTab.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTab.java deleted file mode 100644 index 42157c6be..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTab.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.occulus; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.client.OcculusTabRenderer; -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.resources.ResourceLocation; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.function.Supplier; - -/** - * Interface representing a tab inside the occulus. - */ -public interface IOcculusTab extends ITranslatable { - String OCCULUS_TAB = "occulus_tab"; - int TEXTURE_WIDTH = 1024; - int TEXTURE_HEIGHT = 1024; - - /** - * @return The location of the background texture for this skill tree. - */ - ResourceLocation getBackground(); - - /** - * @return The location of the icon texture for this skill tree. - */ - ResourceLocation getIcon(); - - /** - * @return The index this tab should appear at in the occulus. - */ - int getOcculusIndex(); - - /** - * @return The width of the background texture. - */ - int getWidth(); - - /** - * @return The height of the background texture. - */ - int getHeight(); - - /** - * @return The initial X coordinate of the background texture. - */ - int getStartX(); - - /** - * @return The initial Y coordinate of the background texture. - */ - int getStartY(); - - /** - * @return The path of the renderer class. - */ - String getRenderer(); - - /** - * Only call this on the client. - * - * @return The lazy renderer factory. - */ - Supplier getRendererFactory(); - - @Override - default String getType() { - return OCCULUS_TAB; - } - - /** - * Factory interface to create occulus tab renderers. - */ - interface OcculusTabRendererFactory { - /** - * Helper method to create occulus tab renderers. - * - * @param clazz The renderer class to use. - * @return A new occulus tab renderer. - */ - @SuppressWarnings("unchecked") - static Supplier of(String clazz) { - return () -> { - try { - Constructor constructor = ((Class) Class.forName(clazz)).getConstructor(IOcculusTab.class, Screen.class); - return (tab, parent) -> { - try { - return constructor.newInstance(tab, parent); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - }; - } catch (NoSuchMethodException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - }; - } - - /** - * Creates a new occulus tab renderer. Functional method of this interface. - * - * @param tab The occulus tab to create the renderer for. - * @param parent The parent screen to create the renderer for. - * @return A new occulus tab renderer. - */ - OcculusTabRenderer create(IOcculusTab tab, Screen parent); - } -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTabManager.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTabManager.java deleted file mode 100644 index 255e3a1ea..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/IOcculusTabManager.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.occulus; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.IDataManager; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; - -import java.util.Collection; -import java.util.Optional; - -/** - * Interface representing an occulus tab manager. - */ -public interface IOcculusTabManager extends IDataManager { - /** - * @param id The id of the occulus tab to get. - * @return An optional of the occulus tab, or an empty optional if the occulus tab is not loaded. - */ - Optional getOptional(ResourceLocation id); - - /** - * @param id The id of the occulus tab to get. - * @return The occulus tab, or null if the occulus tab is not loaded. - */ - @Nullable - IOcculusTab get(ResourceLocation id); - - /** - * @param id The id of the occulus tab to get. - * @return The occulus tab. Throws an exception if the occulus tab is not loaded. - */ - IOcculusTab getOrThrow(ResourceLocation id); - - /** - * @return An unmodifiable collection of all tabs. - */ - Collection getTabs(); - - /** - * @param index The index to get the occulus tab for. - * @return The occulus tab at the given index. - * @throws ArrayIndexOutOfBoundsException If no occulus tab exists by that index. - */ - IOcculusTab getByIndex(int index) throws ArrayIndexOutOfBoundsException; -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/Context.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/Context.java similarity index 91% rename from src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/Context.java rename to src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/Context.java index 944a3b955..4ea7c028d 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/Context.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/Context.java @@ -1,4 +1,4 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual; +package com.github.minecraftschurlimods.arsmagicalegacy.api.ritual; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/Ritual.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/Ritual.java similarity index 50% rename from src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/Ritual.java rename to src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/Ritual.java index a8f9bc2d8..a88be2a89 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/Ritual.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/Ritual.java @@ -1,22 +1,34 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual; +package com.github.minecraftschurlimods.arsmagicalegacy.api.ritual; -import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMStats; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryCodecs; +import net.minecraft.resources.RegistryFileCodec; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; +import net.minecraftforge.registries.RegistryObject; import java.util.List; public record Ritual(RitualTrigger trigger, List requirements, RitualEffect effect, BlockPos offset) { - public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ritual")); + public static final Codec DIRECT_CODEC = RecordCodecBuilder.create(inst -> inst.group( RitualTrigger.CODEC.fieldOf("trigger").forGetter(Ritual::trigger), RitualRequirement.CODEC.listOf().fieldOf("requirements").forGetter(Ritual::requirements), RitualEffect.CODEC.fieldOf("effect").forGetter(Ritual::effect), BlockPos.CODEC.optionalFieldOf("offset", BlockPos.ZERO).forGetter(Ritual::offset) ).apply(inst, Ritual::new)); + public static final Codec> REFERENCE_CODEC = RegistryFileCodec.create(REGISTRY_KEY, DIRECT_CODEC); + public static final Codec> LIST_CODEC = RegistryCodecs.homogeneousList(REGISTRY_KEY, DIRECT_CODEC); + + private static final RegistryObject STAT = RegistryObject.create(new ResourceLocation(ArsMagicaAPI.MOD_ID, "rituals_triggered"), Registry.CUSTOM_STAT_REGISTRY, ArsMagicaAPI.MOD_ID); public Ritual { trigger.register(this); @@ -29,7 +41,7 @@ public boolean perform(Player player, ServerLevel level, BlockPos pos, Context c } if (!this.trigger.trigger(player, level, pos, ctx)) return false; if (!this.effect.performEffect(player, level, pos)) return false; - player.awardStat(AMStats.RITUALS_TRIGGERED); + player.awardStat(STAT.get()); return true; } } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualEffect.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualEffect.java new file mode 100644 index 000000000..a28e4254c --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualEffect.java @@ -0,0 +1,22 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.ritual; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.codeclib.CodecHelper; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; + +import java.util.function.Function; + +public interface RitualEffect { + ResourceKey>> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ritual_effect_type")); + Codec CODEC = CodecHelper.forRegistry(ArsMagicaAPI.get()::getRitualEffectTypeRegistry).dispatch(RitualEffect::codec, Function.identity()); + + boolean performEffect(Player player, ServerLevel level, BlockPos pos); + + Codec codec(); +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualRequirement.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualRequirement.java new file mode 100644 index 000000000..b9bdb0520 --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualRequirement.java @@ -0,0 +1,24 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.ritual; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.codeclib.CodecHelper; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.common.util.TriPredicate; + +import java.util.function.Function; + +public interface RitualRequirement extends TriPredicate { + ResourceKey>> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ritual_requirement_type")); + Codec CODEC = CodecHelper.forRegistry(ArsMagicaAPI.get()::getRitualRequirementTypeRegistry).dispatch(RitualRequirement::codec, Function.identity()); + + @Override + boolean test(Player player, ServerLevel serverLevel, BlockPos pos); + + Codec codec(); +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualTrigger.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualTrigger.java new file mode 100644 index 000000000..522128019 --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/RitualTrigger.java @@ -0,0 +1,24 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.ritual; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.codeclib.CodecHelper; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; + +import java.util.function.Function; + +public interface RitualTrigger { + ResourceKey>> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ritual_trigger_type")); + Codec CODEC = CodecHelper.forRegistry(ArsMagicaAPI.get()::getRitualTriggerTypeRegistry).dispatch(RitualTrigger::codec, Function.identity()); + + void register(Ritual ritual); + + boolean trigger(Player player, ServerLevel level, BlockPos pos, Context ctx); + + Codec codec(); +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/package-info.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/package-info.java similarity index 55% rename from src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/package-info.java rename to src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/package-info.java index 9d5d927cd..24e2031d8 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/occulus/package-info.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/ritual/package-info.java @@ -1,7 +1,9 @@ +@Experimental @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -package com.github.minecraftschurlimods.arsmagicalegacy.api.occulus; +package com.github.minecraftschurlimods.arsmagicalegacy.api.ritual; import net.minecraft.MethodsReturnNonnullByDefault; +import org.jetbrains.annotations.ApiStatus.Experimental; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkill.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkill.java deleted file mode 100644 index 6084f7385..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkill.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.skill; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; -import net.minecraft.resources.ResourceLocation; - -import java.util.Map; -import java.util.Set; - -/** - * Interface representing a skill. - */ -public interface ISkill extends ITranslatable.WithDescription { - String SKILL = "skill"; - - /** - * @return The id of the occulus tab this skill belongs to. - */ - ResourceLocation getOcculusTab(); - - /** - * @return The ids of this skill's parents. - */ - Set getParents(); - - /** - * @return The x coordinate of this skill. - */ - int getX(); - - /** - * @return The y coordinate of this skill. - */ - int getY(); - - /** - * @return The cost for learning this skill. - */ - Map getCost(); - - /** - * @return Whether this skill is hidden or not. - */ - boolean isHidden(); - - @Override - default String getType() { - return SKILL; - } -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillHelper.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillHelper.java index 7a943f06e..4b90a3438 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillHelper.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillHelper.java @@ -1,5 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.skill; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -24,7 +25,7 @@ public interface ISkillHelper { * @param skill The skill to check for. * @return True if the given player knows the given skill, false otherwise. */ - boolean knows(Player player, ISkill skill); + boolean knows(Player player, Skill skill, RegistryAccess registryAccess); /** * @param player The player to check the skill requirements for. @@ -38,7 +39,7 @@ public interface ISkillHelper { * @param skill The skill to check for. * @return True if the given player can learn the given skill, false otherwise. */ - boolean canLearn(Player player, ISkill skill); + boolean canLearn(Player player, Skill skill, RegistryAccess registryAccess); /** * Unlocks the given skill for the given player. @@ -54,7 +55,7 @@ public interface ISkillHelper { * @param player The player to unlock the skill for. * @param skill The skill to unlock. */ - void learn(Player player, ISkill skill); + void learn(Player player, Skill skill, RegistryAccess registryAccess); /** * Locks the given skill for the given player. @@ -70,14 +71,14 @@ public interface ISkillHelper { * @param player The player to lock the skill for. * @param skill The skill to lock. */ - void forget(Player player, ISkill skill); + void forget(Player player, Skill skill, RegistryAccess registryAccess); /** * Unlocks all skills for the given player. * * @param player The player to unlock the skills for. */ - void learnAll(Player player); + void learnAll(Player player, RegistryAccess registryAccess); /** * Locks all skills for the given player. @@ -98,7 +99,7 @@ public interface ISkillHelper { * @param point The skill point to get the amount for. * @return The amount of skill points of the given skill point type the given player has. */ - int getSkillPoint(Player player, ISkillPoint point); + int getSkillPoint(Player player, SkillPoint point); /** * Adds skill points of a given type to a given player. @@ -116,7 +117,7 @@ public interface ISkillHelper { * @param skillPoint The skill point type to add. * @param amount The amount of skill points to add. */ - void addSkillPoint(Player player, ISkillPoint skillPoint, int amount); + void addSkillPoint(Player player, SkillPoint skillPoint, int amount); /** * Adds a skill point of a given type to a given player. @@ -132,7 +133,7 @@ public interface ISkillHelper { * @param player The player to add the skill point to. * @param skillPoint The skill point type to add. */ - void addSkillPoint(Player player, ISkillPoint skillPoint); + void addSkillPoint(Player player, SkillPoint skillPoint); /** * Consumes skill points of a given type for a given player. @@ -152,7 +153,7 @@ public interface ISkillHelper { * @param amount The amount of skill points to consume. * @return Whether the consumption was successful or not. */ - boolean consumeSkillPoint(Player player, ISkillPoint skillPoint, int amount); + boolean consumeSkillPoint(Player player, SkillPoint skillPoint, int amount); /** * Consumes one skill point of a given type for a given player. @@ -170,7 +171,7 @@ public interface ISkillHelper { * @param skillPoint The skill point type to consume. * @return Whether the consumption was successful or not. */ - boolean consumeSkillPoint(Player player, ISkillPoint skillPoint); + boolean consumeSkillPoint(Player player, SkillPoint skillPoint); /** * @param skillPoint The id of the skill point type to get the orb stack for. @@ -182,7 +183,7 @@ public interface ISkillHelper { * @param skillPoint The skill point type to get the orb stack for. * @return An item stack containing the orb. */ - ItemStack getOrbForSkillPoint(ISkillPoint skillPoint); + ItemStack getOrbForSkillPoint(SkillPoint skillPoint); /** * @param item The item to make the item stack from. @@ -198,14 +199,14 @@ public interface ISkillHelper { * @param The item implementing ISkillPointItem. * @return An item stack of the given item with the given skill point type stored in it. */ - ItemStack getStackForSkillPoint(T item, ISkillPoint skillPoint); + ItemStack getStackForSkillPoint(T item, SkillPoint skillPoint); /** * @param stack The stack to get the skill point type from. * @return The skill point type stored in the stack, or null if the stack does not contain one. */ @Nullable - ISkillPoint getSkillPointForStack(ItemStack stack); + SkillPoint getSkillPointForStack(ItemStack stack); /** * @param player The player to get the skills for. diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillManager.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillManager.java deleted file mode 100644 index fa220b6e9..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillManager.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.skill; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.IDataManager; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; - -import java.util.Collection; -import java.util.Optional; -import java.util.Set; - -/** - * Interface representing a skill manager. - */ -public interface ISkillManager extends IDataManager { - /** - * @param id The id of the occulus tab to get the skills for. - * @return The skills in the given occulus tab. - */ - Set getSkillsForOcculusTab(ResourceLocation id); - - /** - * @param tab The occulus tab to get the skills for. - * @return The skills in the given occulus tab. - */ - Set getSkillsForOcculusTab(IOcculusTab tab); - - /** - * @param id The id of the skill to get. - * @return The skill, or null if the skill is not loaded. - */ - Optional getOptional(ResourceLocation id); - - /** - * @param id The id of the skill to get. - * @return The skill, or null if the skill is not loaded. - */ - @Nullable - ISkill get(ResourceLocation id); - - /** - * @param id The id of the skill to get. - * @return The skill. Throws an exception if the skill is not loaded. - */ - ISkill getOrThrow(ResourceLocation id); - - /** - * @return An unmodifiable collection of all skills. - */ - Collection getSkills(); -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPoint.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPoint.java deleted file mode 100644 index e9d49f24f..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPoint.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.skill; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; -import net.minecraft.resources.ResourceLocation; - -import java.util.Objects; - -public interface ISkillPoint extends ITranslatable { - String SKILL_POINT = "skill_point"; - - /** - * @return The color for this skill point. - */ - int color(); - - /** - * @return The amount of levels needed to get the next skill point. - */ - int levelsForPoint(); - - /** - * @return The minimum amount of levels needed to get this skill point. - */ - int minEarnLevel(); - - @Override - default String getType() { - return SKILL_POINT; - } - - @Override - default ResourceLocation getId() { - return Objects.requireNonNull(ArsMagicaAPI.get().getSkillPointRegistry().getKey(this)); - } -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPointItem.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPointItem.java index e65970177..02723abfd 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPointItem.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/ISkillPointItem.java @@ -11,25 +11,25 @@ */ public interface ISkillPointItem { /** - * Get the {@link ISkillPoint} stored in the {@link ItemStack}. + * Get the {@link SkillPoint} stored in the {@link ItemStack}. * - * @param stack the {@link ItemStack} that has the {@link ISkillPoint} stored in it - * @return the stored {@link ISkillPoint} + * @param stack the {@link ItemStack} that has the {@link SkillPoint} stored in it + * @return the stored {@link SkillPoint} */ - default ISkillPoint getSkillPoint(ItemStack stack) { + default SkillPoint getSkillPoint(ItemStack stack) { var registry = ArsMagicaAPI.get().getSkillPointRegistry(); ResourceLocation key = ResourceLocation.tryParse(stack.getOrCreateTag().getString(registry.getRegistryName().toString())); return Objects.requireNonNull(registry.getValue(key)); } /** - * Set the {@link ISkillPoint} stored in the {@link ItemStack} + * Set the {@link SkillPoint} stored in the {@link ItemStack} * - * @param stack the {@link ItemStack} to set the {@link ISkillPoint} for - * @param skillPoint the {@link ISkillPoint} to set - * @return the {@link ItemStack} with the {@link ISkillPoint} stored in it + * @param stack the {@link ItemStack} to set the {@link SkillPoint} for + * @param skillPoint the {@link SkillPoint} to set + * @return the {@link ItemStack} with the {@link SkillPoint} stored in it */ - default ItemStack setSkillPoint(ItemStack stack, ISkillPoint skillPoint) { + default ItemStack setSkillPoint(ItemStack stack, SkillPoint skillPoint) { stack.getOrCreateTag().putString(ArsMagicaAPI.get().getSkillPointRegistry().getRegistryName().toString(), skillPoint.getId().toString()); return stack; } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/OcculusTab.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/OcculusTab.java new file mode 100644 index 000000000..6f485b304 --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/OcculusTab.java @@ -0,0 +1,124 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.skill; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.client.OcculusTabRenderer; +import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.util.Lazy; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.Optional; +import java.util.function.Supplier; + +/** + * @param rendererClass The path of the renderer class. + * @param background The location of the background texture for this skill tree. + * @param icon The location of the icon texture for this skill tree. + * @param width The width of the background texture. + * @param height The height of the background texture. + * @param startX The initial X coordinate of the background texture. + * @param startY The initial Y coordinate of the background texture. + * @param index The index this tab should appear at in the occulus. + * @param rendererFactory The lazy renderer factory. (Only call on the client side) + */ +public record OcculusTab(String rendererClass, @Nullable ResourceLocation background, @Nullable ResourceLocation icon, int width, int height, int startX, int startY, int index, Supplier rendererFactory) implements ITranslatable { + public static final String DEFAULT_RENDERER = "com.github.minecraftschurlimods.arsmagicalegacy.client.gui.occulus.OcculusSkillTreeTabRenderer"; + + public static final String OCCULUS_TAB = "occulus_tab"; + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, OCCULUS_TAB)); + public static final int TEXTURE_WIDTH = 1024; + public static final int TEXTURE_HEIGHT = 1024; + + public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( + Codec.STRING.optionalFieldOf("renderer", DEFAULT_RENDERER).forGetter(OcculusTab::rendererClass), + ResourceLocation.CODEC.optionalFieldOf("background_texture").forGetter(tab -> Optional.ofNullable(tab.background)), + ResourceLocation.CODEC.optionalFieldOf("icon_texture").forGetter(tab -> Optional.ofNullable(tab.icon)), + Codec.INT.optionalFieldOf("texture_width", TEXTURE_WIDTH).forGetter(OcculusTab::width), + Codec.INT.optionalFieldOf("texture_height", TEXTURE_HEIGHT).forGetter(OcculusTab::height), + Codec.INT.optionalFieldOf("start_x", 0).forGetter(OcculusTab::startX), + Codec.INT.optionalFieldOf("start_y", 0).forGetter(OcculusTab::startY), + Codec.BYTE.fieldOf("index").xmap(Number::intValue, Number::byteValue).forGetter(OcculusTab::index) + ).apply(inst, (rendererClass, background, icon, width, height, startX, startY, index) -> new OcculusTab(rendererClass, background.orElse(null), icon.orElse(null), width, height, startX, startY, index, Lazy.concurrentOf(OcculusTabRendererFactory.of(rendererClass))))); + + /** + * @return The location of the background texture for this skill tree. + */ + public ResourceLocation background(RegistryAccess access) { + if (background != null) return background; + ResourceLocation id = getId(access); + return new ResourceLocation(id.getNamespace(), "textures/gui/occulus/" + id.getPath() + ".png"); + } + + /** + * @return The location of the icon texture for this skill tree. + */ + public ResourceLocation icon(RegistryAccess access) { + if (icon != null) return icon; + ResourceLocation id = getId(access); + return new ResourceLocation(id.getNamespace(), "textures/icon/" + id.getPath() + ".png"); + } + + @Override + public ResourceLocation getId(RegistryAccess registryAccess) { + return registryAccess.registryOrThrow(REGISTRY_KEY).getKey(this); + } + + @Override + public String getType() { + return OCCULUS_TAB; + } + + /** + * @return The name of this occulus tab's renderer class. + */ + @Override + public String rendererClass() { + return rendererClass; + } + + /** + * Factory interface to create occulus tab renderers. + */ + public interface OcculusTabRendererFactory { + /** + * Helper method to create occulus tab renderers. + * + * @param clazz The renderer class to use. + * @return A new occulus tab renderer. + */ + @SuppressWarnings("unchecked") + static Supplier of(String clazz) { + return () -> { + try { + Constructor constructor = ((Class) Class.forName(clazz)).getConstructor(OcculusTab.class, Screen.class); + return (tab, parent) -> { + try { + return constructor.newInstance(tab, parent); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + }; + } catch (NoSuchMethodException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }; + } + + /** + * Creates a new occulus tab renderer. Functional method of this interface. + * + * @param tab The occulus tab to create the renderer for. + * @param parent The parent screen to create the renderer for. + * @return A new occulus tab renderer. + */ + OcculusTabRenderer create(OcculusTab tab, Screen parent); + } +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/Skill.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/Skill.java new file mode 100644 index 000000000..c9b18dcc0 --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/Skill.java @@ -0,0 +1,57 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.skill; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.RegistryCodecs; +import net.minecraft.resources.RegistryFileCodec; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; + +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +public record Skill(Set parents, Map cost, ResourceLocation occulusTab, int x, int y, boolean hidden) implements ITranslatable.WithDescription { + public static final String SKILL = "skill"; + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, SKILL)); + + public static final Codec DIRECT_CODEC = RecordCodecBuilder.create(inst -> inst.group( + ResourceLocation.CODEC.listOf().>xmap(Sets::newHashSet, Lists::newArrayList).fieldOf("parents").orElseGet(Sets::newHashSet).forGetter(Skill::parents), + Codec.unboundedMap(ResourceLocation.CODEC, Codec.INT).fieldOf("cost").orElseGet(Maps::newHashMap).forGetter(Skill::cost), + ResourceLocation.CODEC.fieldOf("occulus_tab").forGetter(Skill::occulusTab), + Codec.INT.fieldOf("x").forGetter(Skill::x), + Codec.INT.fieldOf("y").forGetter(Skill::y), + Codec.BOOL.fieldOf("hidden").orElse(false).forGetter(Skill::hidden) + ).apply(inst, Skill::new)); + public static final Codec> REFERENCE_CODEC = RegistryFileCodec.create(REGISTRY_KEY, DIRECT_CODEC); + public static final Codec> LIST_CODEC = RegistryCodecs.homogeneousList(REGISTRY_KEY, DIRECT_CODEC); + + @Override + public Set parents() { + return Collections.unmodifiableSet(parents); + } + + @Override + public Map cost() { + return Collections.unmodifiableMap(cost); + } + + @Override + public ResourceLocation getId(RegistryAccess access) { + return access.registryOrThrow(REGISTRY_KEY).getKey(this); + } + + @Override + public String getType() { + return SKILL; + } +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/SkillPoint.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/SkillPoint.java new file mode 100644 index 000000000..51851daf5 --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/skill/SkillPoint.java @@ -0,0 +1,29 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.skill; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; + +import java.util.Objects; + +/** + * @param color The color for this skill point. + * @param minEarnLevel The amount of levels needed to get the next skill point. + * @param levelsForPoint The minimum amount of levels needed to get this skill point. + */ +public record SkillPoint(int color, int minEarnLevel, int levelsForPoint) implements ITranslatable { + public static final String SKILL_POINT = "skill_point"; + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, SKILL_POINT)); + + @Override + public String getType() { + return SKILL_POINT; + } + + @Override + public ResourceLocation getId() { + return Objects.requireNonNull(ArsMagicaAPI.get().getSkillPointRegistry().getKey(this)); + } +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpell.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpell.java index 47f8827a7..874f2b96e 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpell.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpell.java @@ -1,17 +1,10 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; -import com.google.gson.JsonElement; -import com.mojang.serialization.DataResult; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; public interface IPrefabSpell { - /** - * @return The encoded spell of this prefab spell. - */ - DataResult getEncodedSpell(); - /** * @return A spell item stack built from this prefab spell. */ diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpellManager.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpellManager.java deleted file mode 100644 index 0c3e69695..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/IPrefabSpellManager.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; - -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.Optional; -import java.util.function.Supplier; - -/** - * Interface representing a prefab spell manager. - */ -public interface IPrefabSpellManager extends Map { - /** - * @param id The id of the prefab spell to get. - * @param defaultSupplier The fallback value. - * @return The prefab spell with the given id, or the fallback value if there is no prefab spell with that id available. - */ - IPrefabSpell getOrDefault(@Nullable ResourceLocation id, Supplier defaultSupplier); - - /** - * @param id The id of the prefab spell to get. - * @return An optional containing the prefab spell with the given id, or an empty optional if there is no prefab spell with that id available. - */ - Optional getOptional(@Nullable ResourceLocation id); -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpell.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpell.java index ec341988e..e1c9978cf 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpell.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpell.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.mojang.datafixers.util.Either; import com.mojang.datafixers.util.Pair; import com.mojang.serialization.Codec; @@ -155,15 +155,15 @@ default List parts() { * @return A map from affinity to double, representing the affinity shift of the spell for each affinity. */ @UnmodifiableView - Map affinityShifts(); + Map affinityShifts(); /** * @return A set of affinities containing the affinities of this spell. */ - Set affinities(); + Set affinities(); /** * @return The affinity that the given spell has the greatest shift in. */ - IAffinity primaryAffinity(); + Affinity primaryAffinity(); } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellItem.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellItem.java index ea5a06eac..3f8f8b235 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellItem.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellItem.java @@ -1,7 +1,79 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.mojang.datafixers.util.Pair; +import com.mojang.logging.LogUtils; +import com.mojang.serialization.DataResult; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import org.slf4j.Logger; + +import java.util.Optional; + /** * Marker interface for a spell item. */ public interface ISpellItem { + String SPELL_KEY = ArsMagicaAPI.MOD_ID + ":spell"; + String SPELL_ICON_KEY = ArsMagicaAPI.MOD_ID + ":spell_icon"; + String SPELL_NAME_KEY = ArsMagicaAPI.MOD_ID + ":spell_name"; + Logger LOGGER = LogUtils.getLogger(); + + /** + * @param stack The stack to get the spell icon for. + * @return An optional containing the spell icon id, or an empty optional if the given stack does not have a spell icon. + */ + static Optional getSpellIcon(ItemStack stack) { + return Optional.of(stack.getOrCreateTag().getString(SPELL_ICON_KEY)).filter(s -> !s.isEmpty()).map(ResourceLocation::tryParse); + } + + /** + * Sets the given icon to the given stack. + * + * @param stack The stack to set the icon on. + * @param icon The icon to set. + */ + static void setSpellIcon(ItemStack stack, ResourceLocation icon) { + stack.getOrCreateTag().putString(SPELL_ICON_KEY, icon.toString()); + } + + /** + * @param stack The stack to get the spell name for. + * @return An optional containing the spell name, or an empty optional if the given stack does not have a spell name. + */ + static Optional getSpellName(ItemStack stack) { + return Optional.of(stack.getOrCreateTag().getString(SPELL_NAME_KEY)).filter(s -> !s.isEmpty()); + } + + /** + * Sets the given name to the given stack. + * + * @param stack The stack to set the name on. + * @param name The name to set. + */ + static void setSpellName(ItemStack stack, String name) { + stack.getOrCreateTag().putString(SPELL_NAME_KEY, name); + } + + /** + * Sets the given spell to the given stack. + * + * @param stack The stack to set the spell on. + * @param spell The spell to set. + */ + static void saveSpell(ItemStack stack, ISpell spell) { + stack.getOrCreateTag().put(SPELL_KEY, ISpell.CODEC.encodeStart(NbtOps.INSTANCE, spell).get().mapRight(DataResult.PartialResult::message).ifRight(LOGGER::warn).left().orElse(new CompoundTag())); + } + + /** + * @param stack The stack to get the spell for. + * @return An optional containing the spell, or an empty optional if the given stack does not have a spell. + */ + static ISpell getSpell(ItemStack stack) { + if (stack.isEmpty()) return ISpell.EMPTY; + return ISpell.CODEC.decode(NbtOps.INSTANCE, stack.getOrCreateTagElement(SPELL_KEY)).map(Pair::getFirst).get().mapRight(DataResult.PartialResult::message).ifRight(LOGGER::warn).left().orElse(ISpell.EMPTY); + } + } diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPart.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPart.java index 41d87f9cf..c52068818 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPart.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPart.java @@ -1,6 +1,8 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import java.util.Objects; @@ -9,6 +11,8 @@ * Base interface for a spell part. A spell part can be a component of type {@link ISpellComponent}, a modifier of type {@link ISpellModifier} or a shape of type {@link ISpellShape}. */ public interface ISpellPart { + ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spell_part")); + /** * @return The type of this spell part. */ diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPartData.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPartData.java index efff24b96..91ac685f5 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPartData.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/ISpellPartData.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.mojang.datafixers.util.Either; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -21,12 +21,12 @@ public interface ISpellPartData { /** * @return The affinity shifts for this spell part. */ - Map affinityShifts(); + Map affinityShifts(); /** * @return The affinities for this spell part. */ - Set affinities(); + Set affinities(); /** * @return The reagents for this spell part. diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/PrefabSpell.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/PrefabSpell.java new file mode 100644 index 000000000..a6a8b2b20 --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/PrefabSpell.java @@ -0,0 +1,44 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.codeclib.CodecHelper; +import com.mojang.datafixers.util.Either; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryCodecs; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.RegistryFileCodec; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Function; + +public record PrefabSpell(Component name, ISpell spell, ResourceLocation icon) implements IPrefabSpell { + public static final String SPELL_PREFAB_NAME = "item." + ArsMagicaAPI.MOD_ID + ".spell.prefab.name"; + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "prefab_spell")); + public static final Codec DIRECT_CODEC = RecordCodecBuilder.create(inst -> inst.group( + Codec.either(Codec.STRING, CodecHelper.COMPONENT).xmap(stringComponentEither -> stringComponentEither.map(Component::literal, Function.identity()), Either::right).optionalFieldOf("name", Component.translatable(SPELL_PREFAB_NAME)).forGetter(IPrefabSpell::name), + ISpell.CODEC.fieldOf("spell").forGetter(PrefabSpell::spell), + ResourceLocation.CODEC.fieldOf("icon").forGetter(PrefabSpell::icon) + ).apply(inst, PrefabSpell::new)); + public static final Codec> REFERENCE_CODEC = RegistryFileCodec.create(REGISTRY_KEY, DIRECT_CODEC); + public static final Codec> LIST_CODEC = RegistryCodecs.homogeneousList(REGISTRY_KEY, DIRECT_CODEC); + + private static final RegistryObject SPELL = RegistryObject.create(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spell"), ForgeRegistries.ITEMS); + + @Override + public ItemStack makeSpell() { + ItemStack stack = new ItemStack(SPELL.get()); + ISpellItem.saveSpell(stack, spell()); + stack.setHoverName(name()); + ISpellItem.setSpellIcon(stack, icon()); + return stack; + } +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/SpellTransformation.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/SpellTransformation.java new file mode 100644 index 000000000..429eb122c --- /dev/null +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/spell/SpellTransformation.java @@ -0,0 +1,25 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.api.spell; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryCodecs; +import net.minecraft.resources.RegistryFileCodec; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; + +public record SpellTransformation(RuleTest from, BlockState to, ResourceLocation spellPart) { + public static final ResourceKey> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spell_transformation")); + public static final Codec DIRECT_CODEC = RecordCodecBuilder.create(instance -> instance.group( + RuleTest.CODEC.fieldOf("from").forGetter(SpellTransformation::from), + BlockState.CODEC.fieldOf("to").forGetter(SpellTransformation::to), + ResourceLocation.CODEC.fieldOf("spell_part").forGetter(SpellTransformation::spellPart) + ).apply(instance, SpellTransformation::new)); + public static final Codec> REFERENCE_CODEC = RegistryFileCodec.create(REGISTRY_KEY, DIRECT_CODEC); + public static final Codec> LIST_CODEC = RegistryCodecs.homogeneousList(REGISTRY_KEY, DIRECT_CODEC); +} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/IDataManager.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/IDataManager.java deleted file mode 100644 index 4c38d36dd..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/IDataManager.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.util; - -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.Optional; - -/** - * Interface representing a data manager. - */ -public interface IDataManager extends Map { - /** - * @param id The id of the requested value. - * @return An optional of the requested value, or an empty optional if it is not loaded. - */ - Optional getOptional(ResourceLocation id); - - /** - * @param id The id of the requested value. - * @return The requested value. Throws an exception if it is not loaded. - */ - T getOrThrow(ResourceLocation id); - - /** - * @param id The id of the requested value. - * @return An optional of the requested value, or null if it is not loaded. - */ - @Nullable T get(ResourceLocation id); -} diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/ITranslatable.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/ITranslatable.java index 67b01c90f..cf8c7c3d9 100644 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/ITranslatable.java +++ b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/ITranslatable.java @@ -1,23 +1,41 @@ package com.github.minecraftschurlimods.arsmagicalegacy.api.util; import net.minecraft.Util; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; /** * Utility interface for providing easy localization. + * @apiNote At least one of the getId() methods must be implemented. */ public interface ITranslatable { /** * @return The id of this object. */ - ResourceLocation getId(); + default ResourceLocation getId(RegistryAccess access) { + return getId(); + } + + /** + * @return The id of this object. + */ + default ResourceLocation getId() { + return getId(RegistryAccess.BUILTIN.get()); + } /** * @return The type of this object, for example "block" or "item". */ String getType(); + /** + * @return The translation key for this object. + */ + default String getTranslationKey(RegistryAccess access) { + return Util.makeDescriptionId(getType(), getId(access)); + } + /** * @return The translation key for this object. */ @@ -25,6 +43,13 @@ default String getTranslationKey() { return Util.makeDescriptionId(getType(), getId()); } + /** + * @return A component containing the display name of this object. + */ + default Component getDisplayName(RegistryAccess access) { + return Component.translatable(getTranslationKey(access)); + } + /** * @return A component containing the display name of this object. */ @@ -36,11 +61,23 @@ default Component getDisplayName() { * ITranslatable that also has a description. */ interface WithDescription extends ITranslatable { + @Override + default Component getDisplayName(RegistryAccess access) { + return Component.translatable(getNameTranslationKey(access)); + } + @Override default Component getDisplayName() { return Component.translatable(getNameTranslationKey()); } + /** + * @return A component containing the description of this object + */ + default Component getDescription(RegistryAccess access) { + return Component.translatable(getDescriptionTranslationKey(access)); + } + /** * @return A component containing the description of this object */ @@ -48,6 +85,13 @@ default Component getDescription() { return Component.translatable(getDescriptionTranslationKey()); } + /** + * @return The translation key for the name + */ + default String getNameTranslationKey(RegistryAccess access) { + return ITranslatable.super.getTranslationKey(access) + ".name"; + } + /** * @return The translation key for the name */ @@ -55,6 +99,13 @@ default String getNameTranslationKey() { return ITranslatable.super.getTranslationKey() + ".name"; } + /** + * @return The translation key for the description + */ + default String getDescriptionTranslationKey(RegistryAccess access) { + return ITranslatable.super.getTranslationKey(access) + ".description"; + } + /** * @return The translation key for the description */ diff --git a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/Range.java b/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/Range.java deleted file mode 100644 index d36491c6f..000000000 --- a/src/api/java/com/github/minecraftschurlimods/arsmagicalegacy/api/util/Range.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.api.util; - -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; - -import java.util.Optional; -import java.util.function.DoublePredicate; - -/** - * A double range with inclusive upper and lower bounds. - * @deprecated Use {@link net.minecraft.advancements.critereon.MinMaxBounds.Doubles} instead. - */ -@Deprecated(forRemoval = true, since = "1.1.0") -public record Range(Optional min, Optional max) implements DoublePredicate { - public static Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - Codec.DOUBLE.optionalFieldOf("min").forGetter(Range::min), - Codec.DOUBLE.optionalFieldOf("max").forGetter(Range::max) - ).apply(inst, Range::new)); - - /** - * Creates a range with a lower and upper bound. - * - * @param min the minimum value for the range. - * @param max the maximum value for the range. - * @return A range with a lower bound of min and an upper bound of max. - */ - public static Range ofBounds(double min, double max) { - return new Range(Optional.of(min), Optional.of(max)); - } - - /** - * Creates a range with a lower bound. - * - * @param min the minimum value for the range. - * @return A range with a lower bound of min and no upper bound. - */ - public static Range ofLowerBound(double min) { - return new Range(Optional.of(min), Optional.empty()); - } - - /** - * Creates a range with an upper bound. - * - * @param max the maximum value for the range. - * @return A range with an upper bound of max and no lower bound. - */ - public static Range ofUpperBound(double max) { - return new Range(Optional.empty(), Optional.of(max)); - } - - /** - * @return Whether this range has a lower bound or not. - */ - public boolean hasLowerBound() { - return min.isPresent(); - } - - /** - * @return Whether this range has an upper bound or not. - */ - public boolean hasUpperBound() { - return max.isPresent(); - } - - @Override - public boolean test(double value) { - return min().map(min -> value >= min).orElse(true) && max().map(max -> value <= max).orElse(true); - } -} diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAbilityProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAbilityProvider.java index 0275d6287..ceba83f7d 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAbilityProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAbilityProvider.java @@ -7,47 +7,48 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAffinities; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.data.DataGenerator; +import net.minecraftforge.common.data.ExistingFileHelper; import java.util.function.Consumer; class AMAbilityProvider extends AbilityProvider { - AMAbilityProvider(DataGenerator generator) { - super(ArsMagicaAPI.MOD_ID, generator); + AMAbilityProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(ArsMagicaAPI.MOD_ID, generator, existingFileHelper); } @Override protected void createAbilities(Consumer consumer) { - createAbility(AMAbilities.FIRE_RESISTANCE.get().getId(), AMAffinities.FIRE.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); - createAbility(AMAbilities.FIRE_PUNCH.get().getId(), AMAffinities.FIRE.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.WATER_DAMAGE_FIRE.get().getId(), AMAffinities.FIRE.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.SWIM_SPEED.get().getId(), AMAffinities.WATER.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.ENDERMAN_THORNS.get().getId(), AMAffinities.WATER.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.NETHER_DAMAGE_WATER.get().getId(), AMAffinities.WATER.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.RESISTANCE.get().getId(), AMAffinities.EARTH.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.HASTE.get().getId(), AMAffinities.EARTH.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.FALL_DAMAGE.get().getId(), AMAffinities.EARTH.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.JUMP_BOOST.get().getId(), AMAffinities.AIR.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.FEATHER_FALLING.get().getId(), AMAffinities.AIR.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.GRAVITY.get().getId(), AMAffinities.AIR.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.FROST_PUNCH.get().getId(), AMAffinities.ICE.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.FROST_WALKER.get().getId(), AMAffinities.ICE.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.SLOWNESS.get().getId(), AMAffinities.ICE.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.SPEED.get().getId(), AMAffinities.LIGHTNING.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.STEP_ASSIST.get().getId(), AMAffinities.LIGHTNING.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.WATER_DAMAGE_LIGHTNING.get().getId(), AMAffinities.LIGHTNING.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.THORNS.get().getId(), AMAffinities.NATURE.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.SATURATION.get().getId(), AMAffinities.NATURE.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.NETHER_DAMAGE_NATURE.get().getId(), AMAffinities.NATURE.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.SMITE.get().getId(), AMAffinities.LIFE.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.REGENERATION.get().getId(), AMAffinities.LIFE.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.NAUSEA.get().getId(), AMAffinities.LIFE.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.MANA_REDUCTION.get().getId(), AMAffinities.ARCANE.get(), MinMaxBounds.Doubles.between(0.01, 1)) .build(consumer); - createAbility(AMAbilities.CLARITY.get().getId(), AMAffinities.ARCANE.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.MAGIC_DAMAGE.get().getId(), AMAffinities.ARCANE.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.POISON_RESISTANCE.get().getId(), AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.NIGHT_VISION.get().getId(), AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 1)) .build(consumer); - createAbility(AMAbilities.ENDERMAN_PUMPKIN.get().getId(), AMAffinities.ENDER.get(), MinMaxBounds.Doubles.atLeast(1)) .build(consumer); - createAbility(AMAbilities.LIGHT_HEALTH_REDUCTION.get().getId(), AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 0.99)).build(consumer); - createAbility(AMAbilities.WATER_HEALTH_REDUCTION.get().getId(), AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 0.99)).build(consumer); + createAbility(AMAbilities.FIRE_RESISTANCE, AMAffinities.FIRE.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.FIRE_PUNCH, AMAffinities.FIRE.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.WATER_DAMAGE_FIRE, AMAffinities.FIRE.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.SWIM_SPEED, AMAffinities.WATER.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.ENDERMAN_THORNS, AMAffinities.WATER.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.NETHER_DAMAGE_WATER, AMAffinities.WATER.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.RESISTANCE, AMAffinities.EARTH.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.HASTE, AMAffinities.EARTH.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.FALL_DAMAGE, AMAffinities.EARTH.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.JUMP_BOOST, AMAffinities.AIR.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.FEATHER_FALLING, AMAffinities.AIR.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.GRAVITY, AMAffinities.AIR.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.FROST_PUNCH, AMAffinities.ICE.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.FROST_WALKER, AMAffinities.ICE.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.SLOWNESS, AMAffinities.ICE.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.SPEED, AMAffinities.LIGHTNING.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.STEP_ASSIST, AMAffinities.LIGHTNING.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.WATER_DAMAGE_LIGHTNING, AMAffinities.LIGHTNING.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.THORNS, AMAffinities.NATURE.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.SATURATION, AMAffinities.NATURE.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.NETHER_DAMAGE_NATURE, AMAffinities.NATURE.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.SMITE, AMAffinities.LIFE.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.REGENERATION, AMAffinities.LIFE.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.NAUSEA, AMAffinities.LIFE.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.MANA_REDUCTION, AMAffinities.ARCANE.get(), MinMaxBounds.Doubles.between(0.01, 1)).build(consumer); + createAbility(AMAbilities.CLARITY, AMAffinities.ARCANE.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.MAGIC_DAMAGE, AMAffinities.ARCANE.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.POISON_RESISTANCE, AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.NIGHT_VISION, AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 1)).build(consumer); + createAbility(AMAbilities.ENDERMAN_PUMPKIN, AMAffinities.ENDER.get(), MinMaxBounds.Doubles.atLeast(1)).build(consumer); + createAbility(AMAbilities.LIGHT_HEALTH_REDUCTION, AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 0.99)).build(consumer); + createAbility(AMAbilities.WATER_HEALTH_REDUCTION, AMAffinities.ENDER.get(), MinMaxBounds.Doubles.between(0.5, 0.99)).build(consumer); } } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAltarStructureMaterialProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAltarStructureMaterialProvider.java index 9f2602dbf..cd4c27d42 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAltarStructureMaterialProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMAltarStructureMaterialProvider.java @@ -3,67 +3,69 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.data.AltarStructureMaterialProvider; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlocks; +import net.minecraft.data.BlockFamilies; import net.minecraft.data.DataGenerator; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.StairBlock; +import net.minecraftforge.common.data.ExistingFileHelper; class AMAltarStructureMaterialProvider extends AltarStructureMaterialProvider { - AMAltarStructureMaterialProvider(DataGenerator generator) { - super(ArsMagicaAPI.MOD_ID, generator); + AMAltarStructureMaterialProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(ArsMagicaAPI.MOD_ID, generator, existingFileHelper); } @Override protected void createStructureMaterials() { - addStructureMaterial("oak_planks", Blocks.OAK_PLANKS, (StairBlock) Blocks.OAK_STAIRS, 1); - addStructureMaterial("spruce_planks", Blocks.SPRUCE_PLANKS, (StairBlock) Blocks.SPRUCE_STAIRS, 1); - addStructureMaterial("birch_planks", Blocks.BIRCH_PLANKS, (StairBlock) Blocks.BIRCH_STAIRS, 1); - addStructureMaterial("jungle_planks", Blocks.JUNGLE_PLANKS, (StairBlock) Blocks.JUNGLE_STAIRS, 1); - addStructureMaterial("acacia_planks", Blocks.ACACIA_PLANKS, (StairBlock) Blocks.ACACIA_STAIRS, 1); - addStructureMaterial("dark_oak_planks", Blocks.DARK_OAK_PLANKS, (StairBlock) Blocks.DARK_OAK_STAIRS, 1); - addStructureMaterial("mangrove_planks", Blocks.MANGROVE_PLANKS, (StairBlock) Blocks.MANGROVE_STAIRS, 1); - addStructureMaterial("cobblestone", Blocks.COBBLESTONE, (StairBlock) Blocks.COBBLESTONE_STAIRS, 2); - addStructureMaterial("mud_bricks", Blocks.MUD_BRICKS, (StairBlock) Blocks.MUD_BRICK_STAIRS, 2); - addStructureMaterial("mossy_cobblestone", Blocks.MOSSY_COBBLESTONE, (StairBlock) Blocks.MOSSY_COBBLESTONE_STAIRS, 2); - addStructureMaterial("cobbled_deepslate", Blocks.COBBLED_DEEPSLATE, (StairBlock) Blocks.COBBLED_DEEPSLATE_STAIRS, 2); - addStructureMaterial("andesite", Blocks.ANDESITE, (StairBlock) Blocks.ANDESITE_STAIRS, 2); - addStructureMaterial("diorite", Blocks.DIORITE, (StairBlock) Blocks.DIORITE_STAIRS, 2); - addStructureMaterial("granite", Blocks.GRANITE, (StairBlock) Blocks.GRANITE_STAIRS, 2); - addStructureMaterial("sandstone", Blocks.SANDSTONE, (StairBlock) Blocks.SANDSTONE_STAIRS, 2); - addStructureMaterial("red_sandstone", Blocks.RED_SANDSTONE, (StairBlock) Blocks.RED_SANDSTONE_STAIRS, 2); - addStructureMaterial("bricks", Blocks.BRICKS, (StairBlock) Blocks.BRICK_STAIRS, 3); - addStructureMaterial("stone_bricks", Blocks.STONE_BRICKS, (StairBlock) Blocks.STONE_BRICK_STAIRS, 3); - addStructureMaterial("mossy_stone_bricks", Blocks.MOSSY_STONE_BRICKS, (StairBlock) Blocks.MOSSY_STONE_BRICK_STAIRS, 3); - addStructureMaterial("polished_deepslate", Blocks.POLISHED_DEEPSLATE, (StairBlock) Blocks.POLISHED_DEEPSLATE_STAIRS, 3); - addStructureMaterial("deepslate_bricks", Blocks.DEEPSLATE_BRICKS, (StairBlock) Blocks.DEEPSLATE_BRICK_STAIRS, 3); - addStructureMaterial("deepslate_tiles", Blocks.DEEPSLATE_TILES, (StairBlock) Blocks.DEEPSLATE_TILE_STAIRS, 3); - addStructureMaterial("polished_andesite", Blocks.POLISHED_ANDESITE, (StairBlock) Blocks.POLISHED_ANDESITE_STAIRS, 3); - addStructureMaterial("polished_diorite", Blocks.POLISHED_DIORITE, (StairBlock) Blocks.POLISHED_DIORITE_STAIRS, 3); - addStructureMaterial("polished_granite", Blocks.POLISHED_GRANITE, (StairBlock) Blocks.POLISHED_GRANITE_STAIRS, 3); - addStructureMaterial("smooth_sandstone", Blocks.SMOOTH_SANDSTONE, (StairBlock) Blocks.SMOOTH_SANDSTONE_STAIRS, 3); - addStructureMaterial("smooth_red_sandstone", Blocks.SMOOTH_RED_SANDSTONE, (StairBlock) Blocks.SMOOTH_RED_SANDSTONE_STAIRS, 3); - addStructureMaterial("cut_copper", Blocks.CUT_COPPER, (StairBlock) Blocks.CUT_COPPER_STAIRS, 3); - addStructureMaterial("exposed_cut_copper", Blocks.EXPOSED_CUT_COPPER, (StairBlock) Blocks.EXPOSED_CUT_COPPER_STAIRS, 3); - addStructureMaterial("weathered_cut_copper", Blocks.WEATHERED_CUT_COPPER, (StairBlock) Blocks.WEATHERED_CUT_COPPER_STAIRS, 3); - addStructureMaterial("oxidized_cut_copper", Blocks.OXIDIZED_CUT_COPPER, (StairBlock) Blocks.OXIDIZED_CUT_COPPER_STAIRS, 3); - addStructureMaterial("waxed_cut_copper", Blocks.WAXED_CUT_COPPER, (StairBlock) Blocks.WAXED_CUT_COPPER_STAIRS, 3); - addStructureMaterial("waxed_exposed_cut_copper", Blocks.WAXED_EXPOSED_CUT_COPPER, (StairBlock) Blocks.WAXED_EXPOSED_CUT_COPPER_STAIRS, 3); - addStructureMaterial("waxed_weathered_cut_copper", Blocks.WAXED_WEATHERED_CUT_COPPER, (StairBlock) Blocks.WAXED_WEATHERED_CUT_COPPER_STAIRS, 3); - addStructureMaterial("waxed_oxidized_cut_copper", Blocks.WAXED_OXIDIZED_CUT_COPPER, (StairBlock) Blocks.WAXED_OXIDIZED_CUT_COPPER_STAIRS, 3); - addStructureMaterial("prismarine", Blocks.PRISMARINE, (StairBlock) Blocks.PRISMARINE_STAIRS, 4); - addStructureMaterial("prismarine_bricks", Blocks.PRISMARINE_BRICKS, (StairBlock) Blocks.PRISMARINE_BRICK_STAIRS, 4); - addStructureMaterial("dark_prismarine", Blocks.DARK_PRISMARINE, (StairBlock) Blocks.DARK_PRISMARINE_STAIRS, 4); - addStructureMaterial("crimson_planks", Blocks.CRIMSON_PLANKS, (StairBlock) Blocks.CRIMSON_STAIRS, 4); - addStructureMaterial("warped_planks", Blocks.WARPED_PLANKS, (StairBlock) Blocks.WARPED_STAIRS, 4); - addStructureMaterial("witchwood_planks", AMBlocks.WITCHWOOD_PLANKS.get(), AMBlocks.WITCHWOOD_STAIRS.get(), 4); - addStructureMaterial("blackstone", Blocks.BLACKSTONE, (StairBlock) Blocks.BLACKSTONE_STAIRS, 4); - addStructureMaterial("quartz_block", Blocks.QUARTZ_BLOCK, (StairBlock) Blocks.QUARTZ_STAIRS, 4); - addStructureMaterial("nether_bricks", Blocks.NETHER_BRICKS, (StairBlock) Blocks.NETHER_BRICK_STAIRS, 5); - addStructureMaterial("red_nether_bricks", Blocks.RED_NETHER_BRICKS, (StairBlock) Blocks.RED_NETHER_BRICK_STAIRS, 5); - addStructureMaterial("polished_blackstone", Blocks.POLISHED_BLACKSTONE, (StairBlock) Blocks.POLISHED_BLACKSTONE_STAIRS, 5); - addStructureMaterial("polished_blackstone_bricks", Blocks.POLISHED_BLACKSTONE_BRICKS, (StairBlock) Blocks.POLISHED_BLACKSTONE_BRICK_STAIRS, 5); - addStructureMaterial("smooth_quartz", Blocks.SMOOTH_QUARTZ, (StairBlock) Blocks.SMOOTH_QUARTZ_STAIRS, 5); - addStructureMaterial("end_stone_bricks", Blocks.END_STONE_BRICKS, (StairBlock) Blocks.END_STONE_BRICK_STAIRS, 6); - addStructureMaterial("purpur_block", Blocks.PURPUR_BLOCK, (StairBlock) Blocks.PURPUR_STAIRS, 6); + addStructureMaterial(BlockFamilies.OAK_PLANKS, 1); + addStructureMaterial(BlockFamilies.SPRUCE_PLANKS, 1); + addStructureMaterial(BlockFamilies.BIRCH_PLANKS, 1); + addStructureMaterial(BlockFamilies.JUNGLE_PLANKS, 1); + addStructureMaterial(BlockFamilies.ACACIA_PLANKS, 1); + addStructureMaterial(BlockFamilies.DARK_OAK_PLANKS, 1); + addStructureMaterial(BlockFamilies.MANGROVE_PLANKS, 1); + addStructureMaterial(BlockFamilies.COBBLESTONE, 2); + addStructureMaterial(BlockFamilies.STONE, 2); + addStructureMaterial(BlockFamilies.MUD_BRICKS, 2); + addStructureMaterial(BlockFamilies.MOSSY_COBBLESTONE, 2); + addStructureMaterial(BlockFamilies.COBBLED_DEEPSLATE, 2); + addStructureMaterial(BlockFamilies.ANDESITE, 2); + addStructureMaterial(BlockFamilies.DIORITE, 2); + addStructureMaterial(BlockFamilies.GRANITE, 2); + addStructureMaterial(BlockFamilies.SANDSTONE, 2); + addStructureMaterial(BlockFamilies.RED_SANDSTONE, 2); + addStructureMaterial(BlockFamilies.BRICKS, 3); + addStructureMaterial(BlockFamilies.STONE_BRICK, 3); + addStructureMaterial(BlockFamilies.MOSSY_STONE_BRICKS, 3); + addStructureMaterial(BlockFamilies.POLISHED_DEEPSLATE, 3); + addStructureMaterial(BlockFamilies.DEEPSLATE_BRICKS, 3); + addStructureMaterial(BlockFamilies.DEEPSLATE_TILES, 3); + addStructureMaterial(BlockFamilies.POLISHED_ANDESITE, 3); + addStructureMaterial(BlockFamilies.POLISHED_DIORITE, 3); + addStructureMaterial(BlockFamilies.POLISHED_GRANITE, 3); + addStructureMaterial(BlockFamilies.SMOOTH_SANDSTONE, 3); + addStructureMaterial(BlockFamilies.SMOOTH_RED_SANDSTONE, 3); + addStructureMaterial(BlockFamilies.CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.EXPOSED_CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.WEATHERED_CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.OXIDIZED_CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.WAXED_CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.WAXED_EXPOSED_CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.WAXED_WEATHERED_CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.WAXED_OXIDIZED_CUT_COPPER, 3); + addStructureMaterial(BlockFamilies.PRISMARINE, 4); + addStructureMaterial(BlockFamilies.PRISMARINE_BRICKS, 4); + addStructureMaterial(BlockFamilies.DARK_PRISMARINE, 4); + addStructureMaterial(BlockFamilies.CRIMSON_PLANKS, 4); + addStructureMaterial(BlockFamilies.WARPED_PLANKS, 4); + addStructureMaterial(AMBlockFamilies.WITCHWOOD_PLANKS.get(), 4); + addStructureMaterial(BlockFamilies.BLACKSTONE, 4); + addStructureMaterial(BlockFamilies.QUARTZ, 4); + addStructureMaterial(BlockFamilies.NETHER_BRICKS, 5); + addStructureMaterial(BlockFamilies.RED_NETHER_BRICKS, 5); + addStructureMaterial(BlockFamilies.POLISHED_BLACKSTONE, 5); + addStructureMaterial(BlockFamilies.POLISHED_BLACKSTONE_BRICKS, 5); + addStructureMaterial(BlockFamilies.SMOOTH_QUARTZ, 5); + addStructureMaterial(BlockFamilies.END_STONE_BRICKS, 6); + addStructureMaterial(BlockFamilies.PURPUR, 6); addCapMaterial("glass", Blocks.GLASS, 1); addCapMaterial("coal", Blocks.COAL_BLOCK, 2); addCapMaterial("copper", Blocks.COPPER_BLOCK, 3); @@ -84,7 +86,7 @@ protected void createStructureMaterials() { addCapMaterial("diamond", Blocks.DIAMOND_BLOCK, 11); addCapMaterial("emerald", Blocks.EMERALD_BLOCK, 12); addCapMaterial("netherite", Blocks.NETHERITE_BLOCK, 13); -// addCapMaterial("moonstone", AMBlocks.MOONSTONE_BLOCK.get(), 14); -// addCapMaterial("sunstone", AMBlocks.SUNSTONE_BLOCK.get(), 15); + addCapMaterial("moonstone", AMBlocks.MOONSTONE_BLOCK.get(), 14); + addCapMaterial("sunstone", AMBlocks.SUNSTONE_BLOCK.get(), 15); } } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockFamilies.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockFamilies.java new file mode 100644 index 000000000..d7c8d8512 --- /dev/null +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockFamilies.java @@ -0,0 +1,11 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.data; + +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlocks; +import com.google.common.base.Suppliers; +import net.minecraft.data.BlockFamily; + +import java.util.function.Supplier; + +public interface AMBlockFamilies { + Supplier WITCHWOOD_PLANKS = Suppliers.memoize(() -> new BlockFamily.Builder(AMBlocks.WITCHWOOD_PLANKS.get()).button(AMBlocks.WITCHWOOD_BUTTON.get()).fence(AMBlocks.WITCHWOOD_FENCE.get()).fenceGate(AMBlocks.WITCHWOOD_FENCE_GATE.get()).pressurePlate(AMBlocks.WITCHWOOD_PRESSURE_PLATE.get()).door(AMBlocks.WITCHWOOD_DOOR.get()).slab(AMBlocks.WITCHWOOD_SLAB.get()).stairs(AMBlocks.WITCHWOOD_STAIRS.get()).trapdoor(AMBlocks.WITCHWOOD_TRAPDOOR.get()).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily()); +} diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockStateProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockStateProvider.java index 0faabe50f..2bd0c589b 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockStateProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMBlockStateProvider.java @@ -5,6 +5,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.block.altar.AltarCoreBlock; import com.github.minecraftschurlimods.arsmagicalegacy.common.block.blackaurem.BlackAuremBlock; import com.github.minecraftschurlimods.arsmagicalegacy.common.block.celestialprism.CelestialPrismBlock; +import com.github.minecraftschurlimods.arsmagicalegacy.common.block.inscriptiontable.InscriptionTableBlock; import com.github.minecraftschurlimods.arsmagicalegacy.common.block.obelisk.ObeliskBlock; import com.github.minecraftschurlimods.arsmagicalegacy.common.block.spellrune.SpellRuneBlock; import net.minecraft.core.Direction; @@ -31,10 +32,12 @@ import net.minecraftforge.client.model.generators.BlockStateProvider; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.client.model.generators.MultiPartBlockStateBuilder; import net.minecraftforge.client.model.generators.loaders.ObjModelBuilder; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.registries.RegistryObject; +import java.util.ArrayList; import java.util.function.Supplier; import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlocks.*; @@ -48,6 +51,8 @@ class AMBlockStateProvider extends BlockStateProvider { @Override protected void registerStatesAndModels() { altarCoreBlock(ALTAR_CORE); + inscriptionTableBlock(INSCRIPTION_TABLE); + horizontalBlock(OCCULUS.get(), models().getExistingFile(modLoc("block/occulus"))); airBlock(ALTAR_VIEW); simpleBlock(MAGIC_WALL, "translucent"); obeliskBlock(OBELISK); @@ -99,6 +104,7 @@ protected void registerStatesAndModels() { railBlock(IRON_INLAY); railBlock(REDSTONE_INLAY); railBlock(GOLD_INLAY); + simpleBlock(LIQUID_ESSENCE.get(), models().getBuilder(LIQUID_ESSENCE.getId().getPath()).texture("particle", modLoc("block/" + LIQUID_ESSENCE.getId().getPath() + "_still"))); } /** @@ -449,4 +455,30 @@ private void spellRuneBlock(RegistryObject block) { ).build(); }); } + + /** + * Adds an inscription table block state definition. + * @param block The block to generate the block state definition for. + */ + private void inscriptionTableBlock(RegistryObject block) { + MultiPartBlockStateBuilder builder = getMultipartBuilder(block.get()); + for (Direction facing : InscriptionTableBlock.FACING.getPossibleValues()) { + for (InscriptionTableBlock.Half half : InscriptionTableBlock.HALF.getPossibleValues()) { + for (int tier : InscriptionTableBlock.TIER.getPossibleValues()) { + if (tier == 1 && half == InscriptionTableBlock.Half.LEFT) continue; + ModelFile.ExistingModelFile existingFile = models().getExistingFile(modLoc("block/inscription_table_" + half.getSerializedName() + (tier > 0 ? tier : ""))); + MultiPartBlockStateBuilder.PartBuilder partBuilder = builder.part().rotationY((int) facing.toYRot()).modelFile(existingFile).addModel(); + partBuilder.condition(InscriptionTableBlock.FACING, facing); + partBuilder.condition(InscriptionTableBlock.HALF, half); + if (tier > 0) { + ArrayList ints = new ArrayList<>(); + for (int i = 3; i >= tier; i--) { + ints.add(i); + } + partBuilder.condition(InscriptionTableBlock.TIER, ints.toArray(new Integer[0])); + } + } + } + } + } } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMDatagen.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMDatagen.java index f05807eb2..5f7ba6072 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMDatagen.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMDatagen.java @@ -5,9 +5,9 @@ import net.minecraft.data.DataGenerator; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.data.event.GatherDataEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -24,27 +24,27 @@ static void gatherData(GatherDataEvent evt) { LOGGER.info("Running Datagens"); ExistingFileHelper existingFileHelper = evt.getExistingFileHelper(); DataGenerator generator = evt.getGenerator(); - LanguageProvider lang = new AMEnglishLanguageProvider(generator); - AMAbilityProvider abilityProvider = new AMAbilityProvider(generator); + AMAbilityProvider abilityProvider = new AMAbilityProvider(generator, existingFileHelper); + LanguageProvider lang = new AMEnglishLanguageProvider(generator, abilityProvider); generator.addProvider(evt.includeServer(), abilityProvider); - generator.addProvider(true, new AMPatchouliBookProvider(generator, ArsMagicaAPI.MOD_ID, abilityProvider, lang, evt.includeClient(), evt.includeServer())); + generator.addProvider(true, new AMPatchouliBookProvider(generator, abilityProvider, lang, evt.includeClient(), evt.includeServer())); generator.addProvider(evt.includeClient(), new AMBlockStateProvider(generator, existingFileHelper)); generator.addProvider(evt.includeClient(), new AMItemModelProvider(generator, existingFileHelper)); generator.addProvider(evt.includeClient(), lang); generator.addProvider(evt.includeClient(), new AMSoundDefinitionsProvider(generator, existingFileHelper)); - AMSkillProvider skillProvider = new AMSkillProvider(generator); + AMSkillProvider skillProvider = new AMSkillProvider(generator, existingFileHelper); generator.addProvider(evt.includeServer(), skillProvider); generator.addProvider(evt.includeServer(), new AMAdvancementProvider(generator, existingFileHelper, skillProvider)); generator.addProvider(evt.includeServer(), new AMLootTableProvider(generator)); generator.addProvider(evt.includeServer(), new AMRecipeProvider(generator)); AMTagsProvider.add(evt.includeServer(), generator, existingFileHelper); - generator.addProvider(evt.includeServer(), new AMAltarStructureMaterialProvider(generator)); + generator.addProvider(evt.includeServer(), new AMAltarStructureMaterialProvider(generator, existingFileHelper)); generator.addProvider(evt.includeServer(), new AMObeliskFuelProvider(generator)); - generator.addProvider(evt.includeServer(), new AMOcculusTabProvider(generator)); - generator.addProvider(evt.includeServer(), new AMPrefabSpellProvider(generator)); + generator.addProvider(evt.includeServer(), new AMOcculusTabProvider(generator, existingFileHelper)); + generator.addProvider(evt.includeServer(), new AMPrefabSpellProvider(generator, existingFileHelper)); generator.addProvider(evt.includeServer(), new AMSpellPartDataProvider(generator)); - generator.addProvider(evt.includeServer(), new AMSpellTransformationProvider(generator)); - generator.addProvider(evt.includeServer(), new AMRitualProvider(generator)); + generator.addProvider(evt.includeServer(), new AMSpellTransformationProvider(generator, existingFileHelper)); + generator.addProvider(evt.includeServer(), new AMRitualProvider(generator, existingFileHelper)); + generator.addProvider(evt.includeServer(), new AMWorldgenProvider(generator, existingFileHelper)); } - } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMEnglishLanguageProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMEnglishLanguageProvider.java index b5b27bde7..baa345db5 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMEnglishLanguageProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMEnglishLanguageProvider.java @@ -2,12 +2,13 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityItem; +import com.github.minecraftschurlimods.arsmagicalegacy.api.data.AbilityProvider; import com.github.minecraftschurlimods.arsmagicalegacy.api.etherium.EtheriumType; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPointItem; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAbilities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAttributes; @@ -17,7 +18,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMMobEffects; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSpellParts; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; +import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; import com.github.minecraftschurlimods.arsmagicalegacy.server.commands.CommandTranslations; import net.minecraft.Util; @@ -36,14 +37,17 @@ import java.util.function.Supplier; class AMEnglishLanguageProvider extends AMLanguageProvider { - AMEnglishLanguageProvider(DataGenerator generator) { + private final AbilityProvider abilities; + + AMEnglishLanguageProvider(DataGenerator generator, AbilityProvider abilities) { super(generator, "en_us"); + this.abilities = abilities; } @Override protected void addTranslations() { itemGroupTranslation(AMItems.TAB, ArsMagicaLegacy.getModName()); - itemGroupTranslation(PrefabSpellManager.ITEM_CATEGORY, ArsMagicaLegacy.getModName() + " - Prefab Spells"); + itemGroupTranslation(SpellItem.PREFAB_SPELLS_TAB, ArsMagicaLegacy.getModName() + " - Prefab Spells"); blockIdTranslation(AMBlocks.OCCULUS); blockIdTranslation(AMBlocks.INSCRIPTION_TABLE); blockIdTranslation(AMBlocks.ALTAR_CORE); @@ -105,12 +109,12 @@ protected void addTranslations() { blockIdTranslation(AMBlocks.IRON_INLAY); blockIdTranslation(AMBlocks.REDSTONE_INLAY); blockIdTranslation(AMBlocks.GOLD_INLAY); - for (RegistryObject affinity : AMRegistries.AFFINITIES.getEntries()) { + for (RegistryObject affinity : AMRegistries.AFFINITIES.getEntries()) { affinityIdTranslation(affinity); affinityItemIdTranslation(AMItems.AFFINITY_ESSENCE, affinity); affinityItemIdTranslation(AMItems.AFFINITY_TOME, affinity); } - for (RegistryObject skillPoint : AMRegistries.SKILL_POINTS.getEntries()) { + for (RegistryObject skillPoint : AMRegistries.SKILL_POINTS.getEntries()) { skillPointIdTranslation(skillPoint); skillPointItemIdTranslation(AMItems.INFINITY_ORB, skillPoint); } @@ -437,6 +441,7 @@ protected void addTranslations() { add("potion.potency.7", "VII"); add("potion.potency.8", "IX"); add("potion.potency.9", "X"); + add("hud_manager.open", "Open HUD Manager"); } /** @@ -462,8 +467,8 @@ private void wipItemIdTranslation(RegistryObject item) { * * @param ability The ability to generate the translation for. */ - private void abilityIdTranslation(final RegistryObject ability, String description) { - addAbility(ability, idToTranslation(ability.getId().getPath()), description); + private void abilityIdTranslation(ResourceLocation ability, String description) { + addAbility(ability, idToTranslation(ability.getPath()), description); } /** @@ -529,7 +534,7 @@ private void entityIdTranslation(RegistryObject> entity) * * @param skillPoint The skillPoint to generate the translation for. */ - private void skillPointIdTranslation(RegistryObject skillPoint) { + private void skillPointIdTranslation(RegistryObject skillPoint) { addSkillPoint(skillPoint, idToTranslation(skillPoint.getId().getPath())); } @@ -538,7 +543,7 @@ private void skillPointIdTranslation(RegistryObject skill * * @param affinity The affinity to generate the translation for. */ - private void affinityIdTranslation(RegistryObject affinity) { + private void affinityIdTranslation(RegistryObject affinity) { addAffinity(affinity, idToTranslation(affinity.getId().getPath())); } @@ -595,8 +600,9 @@ private void skillTranslation(ResourceLocation skill, String name, String descri * @param name The translation for the abilities name. * @param description The translation for the abilities description. */ - private void addAbility(Supplier ability, String name, String description) { - add(ability.get(), name, description); + private void addAbility(ResourceLocation ability, String name, String description) { + add(Util.makeDescriptionId(Ability.ABILITY, ability) + ".name", name); + add(Util.makeDescriptionId(Ability.ABILITY, ability) + ".description", description); } /** @@ -615,7 +621,7 @@ private void addAttribute(Supplier attribute, String transl * @param affinity The affinity to add the translation for. * @param translation The translation for the affinity. */ - private void addAffinity(Supplier affinity, String translation) { + private void addAffinity(Supplier affinity, String translation) { add(affinity.get(), translation); } @@ -625,7 +631,7 @@ private void addAffinity(Supplier affinity, String translat * @param affinityItem The affinity item to add the translation for. * @param affinity The affinity to generate the translation from. */ - private void affinityItemIdTranslation(RegistryObject affinityItem, RegistryObject affinity) { + private void affinityItemIdTranslation(RegistryObject affinityItem, RegistryObject affinity) { affinityItemIdTranslation(affinityItem.getId(), affinity.getId()); } @@ -647,7 +653,7 @@ private void affinityItemIdTranslation(ResourceLocation affinityItemId, Resource * @param affinity The affinity to generate the translation from. * @param translation The custom translation to use. */ - private void affinityItemTranslation(RegistryObject affinityItem, RegistryObject affinity, String translation) { + private void affinityItemTranslation(RegistryObject affinityItem, RegistryObject affinity, String translation) { affinityItemTranslation(affinityItem.getId(), affinity.getId(), translation); } @@ -668,7 +674,7 @@ private void affinityItemTranslation(ResourceLocation affinityItemId, ResourceLo * @param skillPoint The skill point to add the translation for. * @param translation The translation for the skill point. */ - private void addSkillPoint(Supplier skillPoint, String translation) { + private void addSkillPoint(Supplier skillPoint, String translation) { add(skillPoint.get(), translation); } @@ -678,7 +684,7 @@ private void addSkillPoint(Supplier skillPoint, String tr * @param skillPointItem The skill point item to add the translation for. * @param skillPoint The skill point to generate the translation from. */ - private void skillPointItemIdTranslation(RegistryObject skillPointItem, RegistryObject skillPoint) { + private void skillPointItemIdTranslation(RegistryObject skillPointItem, RegistryObject skillPoint) { skillPointItemIdTranslation(skillPointItem.getId(), skillPoint.getId()); } @@ -700,7 +706,7 @@ private void skillPointItemIdTranslation(ResourceLocation skillPointItemId, Reso * @param skillPoint The skill point to generate the translation from. * @param translation The custom translation to use. */ - private void skillPointItemTranslation(RegistryObject skillPointItem, RegistryObject skillPoint, String translation) { + private void skillPointItemTranslation(RegistryObject skillPointItem, RegistryObject skillPoint, String translation) { skillPointItemTranslation(skillPointItem.getId(), skillPoint.getId(), translation); } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMItemModelProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMItemModelProvider.java index 7c5058073..aba3a336a 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMItemModelProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMItemModelProvider.java @@ -1,11 +1,11 @@ package com.github.minecraftschurlimods.arsmagicalegacy.data; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityItem; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPointItem; -import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMFluids; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.data.DataGenerator; import net.minecraft.resources.ResourceLocation; @@ -15,6 +15,7 @@ import net.minecraft.world.item.SpawnEggItem; import net.minecraftforge.client.model.generators.ItemModelBuilder; import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.loaders.DynamicFluidContainerModelBuilder; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; @@ -116,19 +117,20 @@ protected void registerModels() { itemGenerated(BATTLEMAGE_CHESTPLATE); itemGenerated(BATTLEMAGE_LEGGINGS); itemGenerated(BATTLEMAGE_BOOTS); - spawnEggItem(AMItems.DRYAD_SPAWN_EGG); - spawnEggItem(AMItems.MAGE_SPAWN_EGG); - spawnEggItem(AMItems.MANA_CREEPER_SPAWN_EGG); - spawnEggItem(AMItems.WATER_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.FIRE_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.EARTH_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.AIR_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.ICE_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.LIGHTNING_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.NATURE_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.LIFE_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.ARCANE_GUARDIAN_SPAWN_EGG); - spawnEggItem(AMItems.ENDER_GUARDIAN_SPAWN_EGG); + spawnEggItem(DRYAD_SPAWN_EGG); + spawnEggItem(MAGE_SPAWN_EGG); + spawnEggItem(MANA_CREEPER_SPAWN_EGG); + spawnEggItem(WATER_GUARDIAN_SPAWN_EGG); + spawnEggItem(FIRE_GUARDIAN_SPAWN_EGG); + spawnEggItem(EARTH_GUARDIAN_SPAWN_EGG); + spawnEggItem(AIR_GUARDIAN_SPAWN_EGG); + spawnEggItem(ICE_GUARDIAN_SPAWN_EGG); + spawnEggItem(LIGHTNING_GUARDIAN_SPAWN_EGG); + spawnEggItem(NATURE_GUARDIAN_SPAWN_EGG); + spawnEggItem(LIFE_GUARDIAN_SPAWN_EGG); + spawnEggItem(ARCANE_GUARDIAN_SPAWN_EGG); + spawnEggItem(ENDER_GUARDIAN_SPAWN_EGG); + withExistingParent(LIQUID_ESSENCE_BUCKET, new ResourceLocation("forge", "item/bucket")).customLoader(DynamicFluidContainerModelBuilder::begin).fluid(AMFluids.LIQUID_ESSENCE.get()).end(); } /** @@ -198,15 +200,15 @@ private void spawnEggItem(RegistryObject item) { } /** - * Adds an item model for this item for each affinity, excluding {@link IAffinity#NONE}. + * Adds an item model for this item for each affinity, excluding {@link Affinity#NONE}. * * @param item The affinity item to add this for. * @param An {@link Item} that must also implement {@link IAffinityItem} */ private void affinityItem(RegistryObject item) { getBuilder(item.getId().toString()); - for (IAffinity affinity : ArsMagicaAPI.get().getAffinityRegistry()) { - if (affinity.getId().equals(IAffinity.NONE)) continue; + for (Affinity affinity : ArsMagicaAPI.get().getAffinityRegistry()) { + if (affinity.getId().equals(Affinity.NONE)) continue; ResourceLocation rl = new ResourceLocation(affinity.getId().getNamespace(), item.getId().getPath() + "_" + affinity.getId().getPath()); singleTexture(rl.toString(), new ResourceLocation("item/generated"), "layer0", new ResourceLocation(rl.getNamespace(), "item/" + rl.getPath())); } @@ -220,7 +222,7 @@ private void affinityItem(RegistryObject ite */ private void skillPointItem(RegistryObject item) { getBuilder(item.getId().toString()); - for (ISkillPoint skillPoint : ArsMagicaAPI.get().getSkillPointRegistry()) { + for (SkillPoint skillPoint : ArsMagicaAPI.get().getSkillPointRegistry()) { ResourceLocation rl = new ResourceLocation(skillPoint.getId().getNamespace(), item.getId().getPath() + "_" + skillPoint.getId().getPath()); singleTexture(rl.toString(), new ResourceLocation("item/generated"), "layer0", new ResourceLocation(rl.getNamespace(), "item/" + rl.getPath())); } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMObeliskFuelProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMObeliskFuelProvider.java index 3309b9633..0d5154bf4 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMObeliskFuelProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMObeliskFuelProvider.java @@ -3,6 +3,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.AMTags; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.data.ObeliskFuelProvider; +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import net.minecraft.data.DataGenerator; class AMObeliskFuelProvider extends ObeliskFuelProvider { @@ -13,6 +14,6 @@ class AMObeliskFuelProvider extends ObeliskFuelProvider { protected void createFuels() { forTag("vinteum_dust", AMTags.Items.DUSTS_VINTEUM, 200, 1); forTag("vinteum_block", AMTags.Items.STORAGE_BLOCKS_VINTEUM, 900, 2); - // TODO essence bucket + forItem("liquid_essence_bucket", AMItems.LIQUID_ESSENCE_BUCKET.get(), 1000, 2); } } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMOcculusTabProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMOcculusTabProvider.java index 2d8efaff4..85dc84213 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMOcculusTabProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMOcculusTabProvider.java @@ -5,12 +5,18 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.data.OcculusTabProvider; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.occulus.OcculusAffinityTabRenderer; import net.minecraft.data.DataGenerator; +import net.minecraftforge.common.data.ExistingFileHelper; import java.util.function.Consumer; class AMOcculusTabProvider extends OcculusTabProvider { - AMOcculusTabProvider(DataGenerator generator) { - super(ArsMagicaAPI.MOD_ID, generator); + AMOcculusTabProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(ArsMagicaAPI.MOD_ID, generator, existingFileHelper); + } + + @Override + public String getName() { + return "AMOcculusTabs"; } @Override diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPatchouliBookProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPatchouliBookProvider.java index 3723e3d38..fc0db4a84 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPatchouliBookProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPatchouliBookProvider.java @@ -1,8 +1,8 @@ package com.github.minecraftschurlimods.arsmagicalegacy.data; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMEntities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; @@ -33,8 +33,8 @@ class AMPatchouliBookProvider extends PatchouliBookProvider { private final AMAbilityProvider abilities; private final LanguageProvider lang; - AMPatchouliBookProvider(DataGenerator generator, String modid, AMAbilityProvider abilities, LanguageProvider lang, boolean includeClient, boolean includeServer) { - super(generator, modid, includeClient, includeServer); + AMPatchouliBookProvider(DataGenerator generator, AMAbilityProvider abilities, LanguageProvider lang, boolean includeClient, boolean includeServer) { + super(generator, ArsMagicaAPI.MOD_ID, includeClient, includeServer); this.abilities = abilities; this.lang = lang; } @@ -300,7 +300,7 @@ protected void addBooks(Consumer> consumer) { shapes.build(); components.build(); modifiers.build(); - TranslatedCategoryBuilder affinities = builder.addCategory("affinities", "Affinities", "", affinityHelper.getEssenceForAffinity(IAffinity.WATER)) + TranslatedCategoryBuilder affinities = builder.addCategory("affinities", "Affinities", "", affinityHelper.getEssenceForAffinity(Affinity.WATER)) .setSortnum(8); affinities.addEntry("affinities", "Affinities", new ItemStack(Items.NETHER_STAR)) .setPriority(true) @@ -308,17 +308,15 @@ protected void addBooks(Consumer> consumer) { .addSimpleTextPage("Shifting into an affinity bears individual side effects, called abilities. Each affinity has different abilities. You can read about the abilities for each affinity in the dedicated chapters for them.$(br2)If you wish to see your current shift into an affinity, you can view your shifts in the Affinity tab of the $(l:blocks/occulus)Occulus$().") .addSimpleTextPage("There is also an affinity essence for each affinity, which is used in intermediate crafting for spell parts associated with that affinity. Reports about lost affinity tomes have been spreading as well, though how to obtain or use them is currently subject to investigation.") .build(); - var abilityRegistry = api.getAbilityRegistry(); - for (final IAffinity affinity : api.getAffinityRegistry()) { + for (final Affinity affinity : api.getAffinityRegistry()) { ResourceLocation id = affinity.getId(); - if (!id.getNamespace().equals(builder.getId().getNamespace()) || id.equals(IAffinity.NONE)) continue; + if (!id.getNamespace().equals(builder.getId().getNamespace()) || id.equals(Affinity.NONE)) continue; TranslatedEntryBuilder entry = affinities.addEntry(id.getPath(), affinity.getTranslationKey(), affinityHelper.getEssenceForAffinity(affinity)); entry.addSimpleTextPage(entry.getLangKey(0) + ".text"); entry.addSimpleRecipePage("crafting", new ResourceLocation(id.getNamespace(), "affinity_essence_" + id.getPath())); - for (final ResourceLocation abilityId : abilities.getAbilitiesForAffinity(id)) { - IAbility ability = abilityRegistry.getValue(abilityId); - if (ability == null) continue; - entry.addSimpleTextPage(ability.getTranslationKey() + ".description", ability.getTranslationKey() + ".name"); + for (ResourceLocation abilityId : abilities.getAbilitiesForAffinity(id)) { + String translationKey = Util.makeDescriptionId(Ability.ABILITY, abilityId); + entry.addSimpleTextPage(translationKey + ".description", translationKey + ".name"); } entry.build(); } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPrefabSpellProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPrefabSpellProvider.java index b116d0a0b..0ffe21120 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPrefabSpellProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMPrefabSpellProvider.java @@ -7,10 +7,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSpellParts; import net.minecraft.data.DataGenerator; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.data.ExistingFileHelper; class AMPrefabSpellProvider extends PrefabSpellProvider { - AMPrefabSpellProvider(DataGenerator generator) { - super(ArsMagicaAPI.MOD_ID, generator); + AMPrefabSpellProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(ArsMagicaAPI.MOD_ID, generator, existingFileHelper); } @Override diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRecipeProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRecipeProvider.java index 0c4d4ed2c..c98b797e3 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRecipeProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRecipeProvider.java @@ -3,6 +3,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.AMTags; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAffinities; +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlocks; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import com.google.common.collect.Sets; import com.google.gson.JsonArray; @@ -12,6 +13,8 @@ import net.minecraft.advancements.AdvancementRewards; import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.advancements.RequirementsStrategy; +import net.minecraft.advancements.critereon.FilledBucketTrigger; +import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; import net.minecraft.data.DataGenerator; import net.minecraft.data.recipes.FinishedRecipe; @@ -37,6 +40,7 @@ import net.minecraftforge.common.crafting.PartialNBTIngredient; import net.minecraftforge.registries.ForgeRegistries; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -52,6 +56,23 @@ public AMRecipeProvider(DataGenerator pGenerator) { @Override protected void buildCraftingRecipes(Consumer consumer) { var helper = ArsMagicaAPI.get().getAffinityHelper(); + generateRecipes(consumer, AMBlockFamilies.WITCHWOOD_PLANKS.get()); + planksFromLogs(consumer, AMBlocks.WITCHWOOD_PLANKS.get(), AMTags.Items.WITCHWOOD_LOGS); + woodFromLogs(consumer, AMBlocks.WITCHWOOD.get(), AMBlocks.WITCHWOOD_LOG.get()); + woodFromLogs(consumer, AMBlocks.STRIPPED_WITCHWOOD.get(), AMBlocks.STRIPPED_WITCHWOOD_LOG.get()); + nineBlockStorageRecipes(consumer, AMItems.VINTEUM_DUST.get(), AMTags.Items.DUSTS_VINTEUM, AMBlocks.VINTEUM_BLOCK.get(), AMTags.Items.STORAGE_BLOCKS_VINTEUM); + nineBlockStorageRecipes(consumer, AMItems.CHIMERITE.get(), AMTags.Items.GEMS_CHIMERITE, AMBlocks.CHIMERITE_BLOCK.get(), AMTags.Items.STORAGE_BLOCKS_CHIMERITE); + nineBlockStorageRecipes(consumer, AMItems.TOPAZ.get(), AMTags.Items.GEMS_TOPAZ, AMBlocks.TOPAZ_BLOCK.get(), AMTags.Items.STORAGE_BLOCKS_TOPAZ); + nineBlockStorageRecipes(consumer, AMItems.MOONSTONE.get(), AMTags.Items.GEMS_MOONSTONE, AMBlocks.MOONSTONE_BLOCK.get(), AMTags.Items.STORAGE_BLOCKS_MOONSTONE); + nineBlockStorageRecipes(consumer, AMItems.SUNSTONE.get(), AMTags.Items.GEMS_SUNSTONE, AMBlocks.SUNSTONE_BLOCK.get(), AMTags.Items.STORAGE_BLOCKS_SUNSTONE); + oreSmelting(consumer, List.of(AMItems.VINTEUM_ORE.get(), AMItems.DEEPSLATE_VINTEUM_ORE.get()), AMItems.VINTEUM_DUST.get(), 0.7F, 200, "vinteum_dust"); + oreSmelting(consumer, List.of(AMItems.CHIMERITE_ORE.get(), AMItems.DEEPSLATE_CHIMERITE_ORE.get()), AMItems.CHIMERITE.get(), 0.7F, 200, "chimerite_dust"); + oreSmelting(consumer, List.of(AMItems.TOPAZ_ORE.get(), AMItems.DEEPSLATE_TOPAZ_ORE.get()), AMItems.TOPAZ.get(), 0.7F, 200, "topaz_dust"); + oreSmelting(consumer, List.of(AMItems.MOONSTONE_ORE.get(), AMItems.DEEPSLATE_MOONSTONE_ORE.get()), AMItems.MOONSTONE.get(), 0.7F, 200, "moonstone_dust"); + oreBlasting(consumer, List.of(AMItems.VINTEUM_ORE.get(), AMItems.DEEPSLATE_VINTEUM_ORE.get()), AMItems.VINTEUM_DUST.get(), 0.7F, 100, "vinteum_dust"); + oreBlasting(consumer, List.of(AMItems.CHIMERITE_ORE.get(), AMItems.DEEPSLATE_CHIMERITE_ORE.get()), AMItems.CHIMERITE.get(), 0.7F, 100, "chimerite_dust"); + oreBlasting(consumer, List.of(AMItems.TOPAZ_ORE.get(), AMItems.DEEPSLATE_TOPAZ_ORE.get()), AMItems.TOPAZ.get(), 0.7F, 100, "topaz_dust"); + oreBlasting(consumer, List.of(AMItems.MOONSTONE_ORE.get(), AMItems.DEEPSLATE_MOONSTONE_ORE.get()), AMItems.MOONSTONE.get(), 0.7F, 100, "moonstone_dust"); ShapelessRecipeBuilder.shapeless(Items.PINK_DYE) .requires(AMItems.AUM.get()) .unlockedBy("item", has(AMItems.AUM.get())) @@ -74,8 +95,10 @@ protected void buildCraftingRecipes(Consumer consumer) { .save(consumer, ArsMagicaAPI.MOD_ID + ":magenta_dye"); ShapelessNBTRecipeBuilder.shapeless(ArsMagicaAPI.get().getBookStack().getItem(), ArsMagicaAPI.get().getBookStack().getOrCreateTag()) .requires(Items.BOOK) - .requires(AMItems.VINTEUM_DUST.get()) - .unlockedBy("has_vinteum_dust", has(AMItems.VINTEUM_DUST.get())) + .requires(AMItems.LIQUID_ESSENCE_BUCKET.get()) + .unlockedBy("has_liquid_essence_bucket", has(AMItems.LIQUID_ESSENCE_BUCKET.get())) + .unlockedBy("in_liquid_essence", insideOf(AMBlocks.LIQUID_ESSENCE.get())) + .unlockedBy("filled_liquid_essence_bucket", FilledBucketTrigger.TriggerInstance.filledBucket(ItemPredicate.Builder.item().of(AMItems.LIQUID_ESSENCE_BUCKET.get()).build())) .save(consumer, ArsMagicaAPI.MOD_ID + ":arcane_compendium"); ShapedRecipeBuilder.shaped(AMItems.OCCULUS.get()) .pattern("SGS") @@ -147,136 +170,6 @@ protected void buildCraftingRecipes(Consumer consumer) { .requires(Items.PAPER) .unlockedBy("has_vinteum_dust", has(AMTags.Items.DUSTS_VINTEUM)) .save(consumer); - ShapelessRecipeBuilder.shapeless(AMItems.CHIMERITE.get(), 9) - .requires(AMTags.Items.STORAGE_BLOCKS_CHIMERITE) - .unlockedBy("has_chimerite_block", has(AMItems.CHIMERITE_BLOCK.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.CHIMERITE_BLOCK.get()) - .pattern("###") - .pattern("###") - .pattern("###") - .define('#', AMTags.Items.GEMS_CHIMERITE) - .unlockedBy("has_chimerite", has(AMItems.CHIMERITE.get())) - .save(consumer); - ShapelessRecipeBuilder.shapeless(AMItems.TOPAZ.get(), 9) - .requires(AMTags.Items.STORAGE_BLOCKS_TOPAZ) - .unlockedBy("has_topaz_block", has(AMItems.TOPAZ_BLOCK.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.TOPAZ_BLOCK.get()) - .pattern("###") - .pattern("###") - .pattern("###") - .define('#', AMTags.Items.GEMS_TOPAZ) - .unlockedBy("has_topaz", has(AMItems.TOPAZ.get())) - .save(consumer); - ShapelessRecipeBuilder.shapeless(AMItems.VINTEUM_DUST.get(), 9) - .requires(AMTags.Items.STORAGE_BLOCKS_VINTEUM) - .unlockedBy("has_vinteum_block", has(AMItems.VINTEUM_BLOCK.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.VINTEUM_BLOCK.get()) - .pattern("###") - .pattern("###") - .pattern("###") - .define('#', AMTags.Items.DUSTS_VINTEUM) - .unlockedBy("has_vinteum_dust", has(AMItems.VINTEUM_DUST.get())) - .save(consumer); - ShapelessRecipeBuilder.shapeless(AMItems.MOONSTONE.get(), 9) - .requires(AMTags.Items.STORAGE_BLOCKS_MOONSTONE) - .unlockedBy("has_moonstone_block", has(AMItems.MOONSTONE_BLOCK.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.MOONSTONE_BLOCK.get()) - .pattern("###") - .pattern("###") - .pattern("###") - .define('#', AMTags.Items.GEMS_MOONSTONE) - .unlockedBy("has_moonstone", has(AMItems.MOONSTONE.get())) - .save(consumer); - ShapelessRecipeBuilder.shapeless(AMItems.SUNSTONE.get(), 9) - .requires(AMTags.Items.STORAGE_BLOCKS_SUNSTONE) - .unlockedBy("has_sunstone_block", has(AMItems.SUNSTONE_BLOCK.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.SUNSTONE_BLOCK.get()) - .pattern("###") - .pattern("###") - .pattern("###") - .define('#', AMTags.Items.GEMS_SUNSTONE) - .unlockedBy("has_sunstone", has(AMItems.SUNSTONE.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD.get(), 3) - .group("bark") - .pattern("##") - .pattern("##") - .define('#', AMItems.WITCHWOOD_LOG.get()) - .unlockedBy("has_witchwood_log", has(AMItems.WITCHWOOD_LOG.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.STRIPPED_WITCHWOOD.get(), 3) - .group("bark") - .pattern("##") - .pattern("##") - .define('#', AMItems.STRIPPED_WITCHWOOD_LOG.get()) - .unlockedBy("has_stripped_witchwood_log", has(AMItems.STRIPPED_WITCHWOOD_LOG.get())) - .save(consumer); - ShapelessRecipeBuilder.shapeless(AMItems.WITCHWOOD_PLANKS.get(), 4) - .group("planks") - .requires(AMTags.Items.WITCHWOOD_LOGS) - .unlockedBy("has_witchwood_logs", has(AMTags.Items.WITCHWOOD_LOGS)) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD_SLAB.get(), 6) - .group("wooden_slab") - .pattern("###") - .define('#', AMItems.WITCHWOOD_PLANKS.get()) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD_STAIRS.get(), 4) - .group("wooden_stairs") - .pattern("# ") - .pattern("## ") - .pattern("###") - .define('#', AMItems.WITCHWOOD_PLANKS.get()) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD_FENCE.get(), 3) - .group("wooden_fence") - .pattern("#-#") - .pattern("#-#") - .define('#', AMItems.WITCHWOOD_PLANKS.get()) - .define('-', Tags.Items.RODS_WOODEN) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD_FENCE_GATE.get()) - .group("wooden_fence_gate") - .pattern("-#-") - .pattern("-#-") - .define('#', AMItems.WITCHWOOD_PLANKS.get()) - .define('-', Tags.Items.RODS_WOODEN) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD_DOOR.get(), 3) - .group("wooden_door") - .pattern("##") - .pattern("##") - .pattern("##") - .define('#', AMItems.WITCHWOOD_PLANKS.get()) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD_TRAPDOOR.get(), 2) - .group("wooden_trapdoor") - .pattern("###") - .pattern("###") - .define('#', AMItems.WITCHWOOD_PLANKS.get()) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); - ShapelessRecipeBuilder.shapeless(AMItems.WITCHWOOD_BUTTON.get()) - .group("wooden_button") - .requires(AMItems.WITCHWOOD_PLANKS.get()) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); - ShapedRecipeBuilder.shaped(AMItems.WITCHWOOD_PRESSURE_PLATE.get()) - .group("wooden_pressure_plate") - .pattern("##") - .define('#', AMItems.WITCHWOOD_PLANKS.get()) - .unlockedBy("has_witchwood_planks", has(AMItems.WITCHWOOD_PLANKS.get())) - .save(consumer); ShapedRecipeBuilder.shaped(AMItems.BLANK_RUNE.get(), 2) .pattern(" # ") .pattern("###") @@ -558,6 +451,15 @@ protected void buildCraftingRecipes(Consumer consumer) { .save(consumer); } + protected static void nineBlockStorageRecipes(Consumer pFinishedRecipeConsumer, ItemLike pUnpacked, TagKey pUnpackedTag, ItemLike pPacked, TagKey pPackedTag) { + nineBlockStorageRecipes(pFinishedRecipeConsumer, pUnpacked, pUnpackedTag, pPacked, pPackedTag, getSimpleRecipeName(pPacked), null, getSimpleRecipeName(pUnpacked), null); + } + + protected static void nineBlockStorageRecipes(Consumer pFinishedRecipeConsumer, ItemLike pUnpacked, TagKey pUnpackedTag, ItemLike pPacked, TagKey pPackedTag, String pPackingRecipeName, @Nullable String pPackingRecipeGroup, String pUnpackingRecipeName, @Nullable String pUnpackingRecipeGroup) { + ShapelessRecipeBuilder.shapeless(pUnpacked, 9).requires(pPackedTag).group(pUnpackingRecipeGroup).unlockedBy(getHasName(pPacked), has(pPacked)).save(pFinishedRecipeConsumer, new ResourceLocation(ArsMagicaAPI.MOD_ID, pUnpackingRecipeName)); + ShapedRecipeBuilder.shaped(pPacked).define('#', pUnpackedTag).pattern("###").pattern("###").pattern("###").group(pPackingRecipeGroup).unlockedBy(getHasName(pUnpacked), has(pUnpacked)).save(pFinishedRecipeConsumer, new ResourceLocation(ArsMagicaAPI.MOD_ID, pPackingRecipeName)); + } + private static class ShapedNBTRecipeBuilder { private final Item result; private final int count; diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRitualProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRitualProvider.java index b589f92ed..ecfc901df 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRitualProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMRitualProvider.java @@ -2,13 +2,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.AMTags; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.data.RitualProvider; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMEntities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Ritual; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualEffect; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Ritual; import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.effect.EntitySpawnRitualEffect; import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.BiomeRequirement; import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.DimensionTypeRequirement; @@ -21,17 +19,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.GameEventRitualTrigger; import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.ItemDropRitualTrigger; import com.github.minecraftschurlimods.arsmagicalegacy.compat.patchouli.PatchouliCompat; -import com.google.gson.JsonElement; -import com.mojang.serialization.JsonOps; import net.minecraft.advancements.critereon.EntityFlagsPredicate; import net.minecraft.advancements.critereon.EntityPredicate; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; -import net.minecraft.data.CachedOutput; import net.minecraft.data.DataGenerator; -import net.minecraft.data.DataProvider; -import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; import net.minecraft.world.entity.EntityType; @@ -40,169 +32,69 @@ import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraftforge.common.Tags; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import net.minecraftforge.common.data.ExistingFileHelper; -import java.io.IOException; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.function.BiConsumer; -public class AMRitualProvider implements DataProvider { - private static final Logger LOGGER = LogManager.getLogger(); - private final Map elements = new HashMap<>(); - private final DataGenerator generator; +public class AMRitualProvider extends RitualProvider { - public AMRitualProvider(final DataGenerator generator) { - this.generator = generator; + public AMRitualProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(ArsMagicaAPI.MOD_ID, generator, existingFileHelper); } @Override - public void run(CachedOutput pCache) { - addRituals(this::addRitual); - Path outputFolder = this.generator.getOutputFolder(); - elements.forEach((id, jsonElement) -> { - try { - DataProvider.saveStable(pCache, jsonElement, createPath(outputFolder, id)); - } catch (IOException e) { - LOGGER.error("Couldn't save ritual {}", id, e); - } - }); - } - protected void addRituals(BiConsumer consumer) { - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_arcane_guardian")) + builder("spawn_arcane_guardian") .with(new RitualStructureRequirement(PatchouliCompat.ARCANE_GUARDIAN_SPAWN_RITUAL)) .with(ItemDropRitualTrigger.stackExact(ArsMagicaAPI.get().getBookStack())) .with(new EntitySpawnRitualEffect(AMEntities.ARCANE_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_air_guardian")) + builder("spawn_air_guardian") .with(new RitualStructureRequirement(PatchouliCompat.AIR_GUARDIAN_SPAWN_RITUAL)) .with(ItemDropRitualTrigger.item(AMItems.TARMA_ROOT.get())) .with(new HeightRequirement(MinMaxBounds.Ints.atLeast(128))) .with(new EntitySpawnRitualEffect(AMEntities.AIR_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_earth_guardian")) + builder("spawn_earth_guardian") .with(new RitualStructureRequirement(PatchouliCompat.EARTH_GUARDIAN_SPAWN_RITUAL)) .with(ItemDropRitualTrigger.tags(Tags.Items.GEMS_EMERALD, AMTags.Items.GEMS_CHIMERITE, AMTags.Items.GEMS_TOPAZ)) .with(new EntitySpawnRitualEffect(AMEntities.EARTH_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_fire_guardian")) + builder("spawn_fire_guardian") .with(new RitualStructureRequirement(PatchouliCompat.FIRE_GUARDIAN_SPAWN_RITUAL)) - .with(ItemDropRitualTrigger.stackExact(ArsMagicaAPI.get().getAffinityHelper().getEssenceForAffinity(IAffinity.WATER))) + .with(ItemDropRitualTrigger.stackExact(ArsMagicaAPI.get().getAffinityHelper().getEssenceForAffinity(Affinity.WATER))) .with(new UltrawarmDimensionRequirement()) .with(new EntitySpawnRitualEffect(AMEntities.FIRE_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_water_guardian")) + builder("spawn_water_guardian") .with(new RitualStructureRequirement(PatchouliCompat.WATER_GUARDIAN_SPAWN_RITUAL)) .with(ItemDropRitualTrigger.ingredients(Ingredient.of(ItemTags.BOATS), Ingredient.of(Items.WATER_BUCKET))) .with(new BiomeRequirement(AMTags.Biomes.CAN_SPAWN_WATER_GUARDIAN)) .with(new EntitySpawnRitualEffect(AMEntities.WATER_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_ender_guardian")) + builder("spawn_ender_guardian") .with(new RitualStructureRequirement(PatchouliCompat.ENDER_GUARDIAN_SPAWN_RITUAL)) .with(ItemDropRitualTrigger.item(Items.ENDER_EYE)) .with(new DimensionTypeRequirement(BuiltinDimensionTypes.END)) .with(new EntitySpawnRitualEffect(AMEntities.ENDER_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_ice_guardian")) + builder("spawn_ice_guardian") .with(new RitualStructureRequirement(PatchouliCompat.ICE_GUARDIAN_SPAWN_RITUAL)) .with(new EntitySummonTrigger(EntityType.SNOW_GOLEM)) -// .with(new BiomeRequirement(Tags.Biomes.IS_FROZEN)) // TODO biome requirement + .with(new BiomeRequirement(Tags.Biomes.IS_SNOWY)) // TODO check biome requirement .with(new EntitySpawnRitualEffect(AMEntities.ICE_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_life_guardian")) + builder("spawn_life_guardian") .with(new RitualStructureRequirement(PatchouliCompat.LIFE_GUARDIAN_SPAWN_RITUAL)) .with(new EntityDeathTrigger(EntityPredicate.Builder.entity().of(EntityType.VILLAGER).flags(EntityFlagsPredicate.Builder.flags().setIsBaby(true).build()).build())) .with(new MoonPhaseRequirement(0)) .with(new EntitySpawnRitualEffect(AMEntities.LIFE_GUARDIAN.get())) .build(consumer); - builder(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_lightning_guardian")) + builder("spawn_lightning_guardian") .with(new RitualStructureRequirement(PatchouliCompat.LIGHTNING_GUARDIAN_SPAWN_RITUAL)) .with(new GameEventRitualTrigger(GameEvent.LIGHTNING_STRIKE)) .with(new EntitySpawnRitualEffect(AMEntities.LIGHTNING_GUARDIAN.get())) .with(new BlockPos(0, -2, 0)) .build(consumer); } - - private void addRitual(ResourceLocation id, Ritual ritual) { - elements.put(id, Ritual.CODEC.encodeStart(RegistryOps.create(JsonOps.INSTANCE, RegistryAccess.BUILTIN.get()), ritual).getOrThrow(false, LOGGER::warn)); - } - - private static Path createPath(Path path, ResourceLocation resourceLocation) { - return path.resolve("data/" + resourceLocation.getNamespace() + "/am_rituals/" + resourceLocation.getPath() + ".json"); - } - - @Override - public String getName() { - return "AMRituals[" + ArsMagicaAPI.MOD_ID + "]"; - } - - public static RitualBuilder builder(ResourceLocation id) { - return new RitualBuilder(id); - } - - protected static class RitualBuilder { - private final List requirements = new ArrayList<>(); - private final ResourceLocation id; - private RitualStructureRequirement structure; - private RitualEffect effect; - private RitualTrigger trigger; - private BlockPos offset = BlockPos.ZERO; - - private RitualBuilder(ResourceLocation id) { - this.id = id; - } - - public RitualBuilder with(RitualStructureRequirement structure) { - this.structure = structure; - return this; - } - - public RitualBuilder with(RitualRequirement requirement) { - this.requirements.add(requirement); - return this; - } - - public RitualBuilder with(RitualRequirement... requirements) { - return with(Arrays.asList(requirements)); - } - - public RitualBuilder with(List requirements) { - this.requirements.addAll(requirements); - return this; - } - - public RitualBuilder with(RitualEffect effect) { - this.effect = effect; - return this; - } - - public RitualBuilder with(RitualTrigger trigger) { - this.trigger = trigger; - return this; - } - - public RitualBuilder with(BlockPos offset) { - this.offset = offset; - return this; - } - - private Ritual buildInternal() { - if (trigger == null) throw new IllegalStateException("Trigger must be set"); - if (effect == null) throw new IllegalStateException("Effect must be set"); - if (structure != null) { - requirements.add(0, structure); - } - return new Ritual(trigger, requirements, effect, offset); - } - - public void build(BiConsumer consumer) { - consumer.accept(id, buildInternal()); - } - } } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSkillProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSkillProvider.java index 8eb22df24..17ffdafed 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSkillProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSkillProvider.java @@ -6,6 +6,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; import net.minecraft.data.DataGenerator; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.registries.RegistryObject; import java.util.function.Consumer; @@ -21,8 +22,8 @@ class AMSkillProvider extends SkillProvider { private static final ResourceLocation UTILITY = new ResourceLocation(ArsMagicaAPI.MOD_ID, "utility"); private static final ResourceLocation TALENT = new ResourceLocation(ArsMagicaAPI.MOD_ID, "talent"); - protected AMSkillProvider(DataGenerator generator) { - super(ArsMagicaAPI.MOD_ID, generator); + protected AMSkillProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(ArsMagicaAPI.MOD_ID, generator, existingFileHelper); } @Override diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSpellTransformationProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSpellTransformationProvider.java index 60d65a775..1303c16e9 100644 --- a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSpellTransformationProvider.java +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMSpellTransformationProvider.java @@ -2,42 +2,35 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.data.SpellTransformationProvider; -import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSpellParts; import net.minecraft.data.DataGenerator; -import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.BlockMatchTest; -import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest; +import net.minecraftforge.common.data.ExistingFileHelper; class AMSpellTransformationProvider extends SpellTransformationProvider { - public AMSpellTransformationProvider(DataGenerator generator) { - super(ArsMagicaAPI.MOD_ID, generator); + public AMSpellTransformationProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(ArsMagicaAPI.MOD_ID, generator, existingFileHelper); } @Override protected void createSpellTransformations() { - addAMSpellTransformation("dirt_to_sand_drought", new TagMatchTest(BlockTags.DIRT), Blocks.SAND.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("small_flowers_to_dead_bush_drought", new TagMatchTest(BlockTags.SMALL_FLOWERS), Blocks.DEAD_BUSH.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("clay_to_sand_drought", new BlockMatchTest(Blocks.CLAY), Blocks.SAND.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("gravel_to_sand_drought", new BlockMatchTest(Blocks.GRAVEL), Blocks.SAND.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("stone_to_cobblestone_drought", new BlockMatchTest(Blocks.STONE), Blocks.COBBLESTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("infested_stone_to_infested_cobblestone_drought", new BlockMatchTest(Blocks.INFESTED_STONE), Blocks.INFESTED_COBBLESTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("stone_bricks_to_cracked_stone_bricks_drought", new BlockMatchTest(Blocks.STONE_BRICKS), Blocks.CRACKED_STONE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("infested_stone_bricks_to_infested_cracked_stone_bricks_drought", new BlockMatchTest(Blocks.INFESTED_STONE_BRICKS), Blocks.INFESTED_CRACKED_STONE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("deepslate_bricks_to_cracked_deepslate_bricks_drought", new BlockMatchTest(Blocks.DEEPSLATE_BRICKS), Blocks.CRACKED_DEEPSLATE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("deepslate_tiles_to_cracked_deepslate_tiles_drought", new BlockMatchTest(Blocks.DEEPSLATE_TILES), Blocks.CRACKED_DEEPSLATE_TILES.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("nether_bricks_to_cracked_nether_bricks_drought", new BlockMatchTest(Blocks.NETHER_BRICKS), Blocks.CRACKED_NETHER_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought", new BlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS), Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("quartz_block_to_smooth_quartz_drought", new BlockMatchTest(Blocks.QUARTZ_BLOCK), Blocks.SMOOTH_QUARTZ.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("sandstone_to_smooth_sandstone_drought", new BlockMatchTest(Blocks.SANDSTONE), Blocks.SMOOTH_SANDSTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); - addAMSpellTransformation("red_sandstone_to_smooth_red_sandstone_drought", new BlockMatchTest(Blocks.RED_SANDSTONE), Blocks.SMOOTH_RED_SANDSTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); - } - - private void addAMSpellTransformation(String id, RuleTest from, BlockState to, ISpellPart spellPart) { - addSpellTransformation(new ResourceLocation(ArsMagicaAPI.MOD_ID, id), from, to, spellPart.getId()); + addSpellTransformation("dirt_to_sand_drought", new TagMatchTest(BlockTags.DIRT), Blocks.SAND.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("small_flowers_to_dead_bush_drought", new TagMatchTest(BlockTags.SMALL_FLOWERS), Blocks.DEAD_BUSH.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("clay_to_sand_drought", new BlockMatchTest(Blocks.CLAY), Blocks.SAND.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("gravel_to_sand_drought", new BlockMatchTest(Blocks.GRAVEL), Blocks.SAND.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("stone_to_cobblestone_drought", new BlockMatchTest(Blocks.STONE), Blocks.COBBLESTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("infested_stone_to_infested_cobblestone_drought", new BlockMatchTest(Blocks.INFESTED_STONE), Blocks.INFESTED_COBBLESTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("stone_bricks_to_cracked_stone_bricks_drought", new BlockMatchTest(Blocks.STONE_BRICKS), Blocks.CRACKED_STONE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("infested_stone_bricks_to_infested_cracked_stone_bricks_drought", new BlockMatchTest(Blocks.INFESTED_STONE_BRICKS), Blocks.INFESTED_CRACKED_STONE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("deepslate_bricks_to_cracked_deepslate_bricks_drought", new BlockMatchTest(Blocks.DEEPSLATE_BRICKS), Blocks.CRACKED_DEEPSLATE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("deepslate_tiles_to_cracked_deepslate_tiles_drought", new BlockMatchTest(Blocks.DEEPSLATE_TILES), Blocks.CRACKED_DEEPSLATE_TILES.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("nether_bricks_to_cracked_nether_bricks_drought", new BlockMatchTest(Blocks.NETHER_BRICKS), Blocks.CRACKED_NETHER_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought", new BlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS), Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("quartz_block_to_smooth_quartz_drought", new BlockMatchTest(Blocks.QUARTZ_BLOCK), Blocks.SMOOTH_QUARTZ.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("sandstone_to_smooth_sandstone_drought", new BlockMatchTest(Blocks.SANDSTONE), Blocks.SMOOTH_SANDSTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); + addSpellTransformation("red_sandstone_to_smooth_red_sandstone_drought", new BlockMatchTest(Blocks.RED_SANDSTONE), Blocks.SMOOTH_RED_SANDSTONE.defaultBlockState(), AMSpellParts.DROUGHT.get()); } } diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMWorldgenProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMWorldgenProvider.java new file mode 100644 index 000000000..dbf3aadf2 --- /dev/null +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/AMWorldgenProvider.java @@ -0,0 +1,83 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.data; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlocks; +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMEntities; +import net.minecraft.core.HolderSet; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.tags.BiomeTags; +import net.minecraft.util.valueproviders.ConstantInt; +import net.minecraft.world.level.biome.MobSpawnSettings; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.VerticalAnchor; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.LakeFeature; +import net.minecraft.world.level.levelgen.feature.featuresize.ThreeLayersFeatureSize; +import net.minecraft.world.level.levelgen.feature.foliageplacers.DarkOakFoliagePlacer; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.levelgen.feature.trunkplacers.DarkOakTrunkPlacer; +import net.minecraft.world.level.levelgen.placement.BiomeFilter; +import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; +import net.minecraft.world.level.levelgen.placement.InSquarePlacement; +import net.minecraft.world.level.levelgen.placement.RarityFilter; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.world.ForgeBiomeModifiers; + +import java.util.OptionalInt; + +public class AMWorldgenProvider extends WorldgenProvider { + + AMWorldgenProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { + super(generator, existingFileHelper, ArsMagicaAPI.MOD_ID); + } + + @Override + protected void generateConfiguredFeatures() { + cf("chimerite_ore", ore(AMBlocks.CHIMERITE_ORE, AMBlocks.DEEPSLATE_CHIMERITE_ORE, 7, 0F)); + cf("vinteum_ore", ore(AMBlocks.VINTEUM_ORE, AMBlocks.DEEPSLATE_VINTEUM_ORE, 10, 0F)); + cf("topaz_ore", ore(AMBlocks.TOPAZ_ORE, AMBlocks.DEEPSLATE_TOPAZ_ORE, 4, 0.5F)); + cf("topaz_ore_extra", ore(AMBlocks.TOPAZ_ORE, AMBlocks.DEEPSLATE_TOPAZ_ORE, 4, 0F)); + cf("aum", flower(64, AMBlocks.AUM)); + cf("cerublossom", flower(64, AMBlocks.CERUBLOSSOM)); + cf("desert_nova", flower(64, AMBlocks.DESERT_NOVA)); + cf("tarma_root", flower(64, AMBlocks.TARMA_ROOT)); + cf("wakebloom", flower(64, AMBlocks.WAKEBLOOM)); + cf("witchwood_tree", tree(AMBlocks.WITCHWOOD_LOG, new DarkOakTrunkPlacer(9, 3, 1), AMBlocks.WITCHWOOD_LEAVES, new DarkOakFoliagePlacer(ConstantInt.of(1), ConstantInt.of(1)), new ThreeLayersFeatureSize(1, 2, 1, 1, 2, OptionalInt.empty()))); + cf("liquid_essence_lake", feature(Feature.LAKE, new LakeFeature.Configuration(BlockStateProvider.simple(AMBlocks.LIQUID_ESSENCE.get()), BlockStateProvider.simple(Blocks.GRASS_BLOCK)))); + } + + @Override + protected void generatePlacedFeatures() { + pf("chimerite_ore", orePlacement(cf("chimerite_ore"), 6, HeightRangePlacement.triangle(VerticalAnchor.absolute(-16), VerticalAnchor.absolute(16)))); + pf("vinteum_ore", orePlacement(cf("vinteum_ore"), 8, HeightRangePlacement.triangle(VerticalAnchor.absolute(-16), VerticalAnchor.absolute(80)))); + pf("topaz_ore", orePlacement(cf("topaz_ore"), 7, HeightRangePlacement.triangle(VerticalAnchor.aboveBottom(-80), VerticalAnchor.aboveBottom(80)))); + pf("topaz_ore_extra", orePlacement(cf("topaz_ore_extra"), 100, HeightRangePlacement.triangle(VerticalAnchor.absolute(-16), VerticalAnchor.absolute(480)))); + pf("aum", flowerPlacement(cf("aum"), 32)); + pf("cerublossom", flowerPlacement(cf("cerublossom"), 32)); + pf("desert_nova", flowerPlacement(cf("desert_nova"), 32)); + pf("tarma_root", flowerPlacement(cf("tarma_root"), 32)); + pf("wakebloom", flowerPlacement(cf("wakebloom"), 32)); + pf("witchwood_tree", treePlacement(cf("witchwood_tree"), AMBlocks.WITCHWOOD_SAPLING)); + pf("trees_witchwood", treeVegetation(cf("witchwood_tree"), PlacementUtils.countExtra(1, 0.1F, 0), 8, AMBlocks.WITCHWOOD_SAPLING)); + pf("liquid_essence_lake", placement(cf("liquid_essence_lake"), RarityFilter.onAverageOnceEvery(500), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP_WORLD_SURFACE, BiomeFilter.biome())); + } + + @Override + protected void generateBiomeModifiers() { + bm("chimerite_ore", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(bt(BiomeTags.IS_OVERWORLD), HolderSet.direct(pf("chimerite_ore")), GenerationStep.Decoration.UNDERGROUND_ORES)); + bm("vinteum_ore", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(bt(BiomeTags.IS_OVERWORLD), HolderSet.direct(pf("vinteum_ore")), GenerationStep.Decoration.UNDERGROUND_ORES)); + bm("topaz_ore", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(bt(BiomeTags.IS_OVERWORLD), HolderSet.direct(pf("topaz_ore")), GenerationStep.Decoration.UNDERGROUND_ORES)); + bm("topaz_extra_ore", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(and(bt(BiomeTags.IS_OVERWORLD), bt(BiomeTags.IS_MOUNTAIN)), HolderSet.direct(pf("topaz_ore_extra")), GenerationStep.Decoration.UNDERGROUND_ORES)); + bm("aum", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(and(bt(BiomeTags.IS_OVERWORLD), bt(BiomeTags.IS_FOREST)), HolderSet.direct(pf("aum")), GenerationStep.Decoration.VEGETAL_DECORATION)); + bm("cerublossom", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(and(bt(BiomeTags.IS_OVERWORLD), or(bt(BiomeTags.IS_JUNGLE), bt(Tags.Biomes.IS_SWAMP))), HolderSet.direct(pf("cerublossom")), GenerationStep.Decoration.VEGETAL_DECORATION)); + bm("desert_nova", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(and(bt(BiomeTags.IS_OVERWORLD), bt(Tags.Biomes.IS_SANDY)), HolderSet.direct(pf("desert_nova")), GenerationStep.Decoration.VEGETAL_DECORATION)); + bm("tarma_root", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(and(bt(BiomeTags.IS_OVERWORLD), or(bt(BiomeTags.IS_MOUNTAIN), bt(BiomeTags.IS_HILL), bt(Tags.Biomes.IS_UNDERGROUND))), HolderSet.direct(pf("tarma_root")), GenerationStep.Decoration.VEGETAL_DECORATION)); + bm("wakebloom", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(and(bt(BiomeTags.IS_OVERWORLD), or(bt(BiomeTags.IS_JUNGLE), bt(Tags.Biomes.IS_SWAMP))), HolderSet.direct(pf("wakebloom")), GenerationStep.Decoration.VEGETAL_DECORATION)); + bm("witchwood_tree", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(and(bt(BiomeTags.IS_OVERWORLD), bt(Tags.Biomes.IS_SPOOKY)), HolderSet.direct(pf("trees_witchwood")), GenerationStep.Decoration.VEGETAL_DECORATION)); + bm("liquid_essence_lake", new ForgeBiomeModifiers.AddFeaturesBiomeModifier(bt(BiomeTags.IS_OVERWORLD), HolderSet.direct(pf("liquid_essence_lake")), GenerationStep.Decoration.LAKES)); + bm("dryad", ForgeBiomeModifiers.AddSpawnsBiomeModifier.singleSpawn(and(bt(BiomeTags.IS_OVERWORLD), bt(BiomeTags.IS_FOREST)), new MobSpawnSettings.SpawnerData(AMEntities.DRYAD.get(), 2, 15, 25))); + } +} diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/WorldgenProvider.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/WorldgenProvider.java new file mode 100644 index 000000000..ca628dfce --- /dev/null +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/WorldgenProvider.java @@ -0,0 +1,239 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.data; + +import com.google.gson.JsonElement; +import com.mojang.serialization.JsonOps; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.DataProvider; +import net.minecraft.data.worldgen.features.FeatureUtils; +import net.minecraft.data.worldgen.features.OreFeatures; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.data.worldgen.placement.VegetationPlacements; +import net.minecraft.resources.RegistryOps; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration; +import net.minecraft.world.level.levelgen.feature.featuresize.FeatureSize; +import net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacer; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacer; +import net.minecraft.world.level.levelgen.placement.BiomeFilter; +import net.minecraft.world.level.levelgen.placement.CountPlacement; +import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; +import net.minecraft.world.level.levelgen.placement.InSquarePlacement; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.world.level.levelgen.placement.PlacementModifier; +import net.minecraft.world.level.levelgen.placement.RarityFilter; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.common.data.JsonCodecProvider; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.holdersets.AndHolderSet; +import net.minecraftforge.registries.holdersets.OrHolderSet; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +/** + * + */ +public abstract class WorldgenProvider implements DataProvider { + private final String namespace; + private final Map> cfs = new HashMap<>(); + private final Map pfs = new HashMap<>(); + private final Map bms = new HashMap<>(); + private final RegistryAccess.Writable registryAccess; + private final JsonCodecProvider> cfProvider; + private final JsonCodecProvider pfProvider; + private final JsonCodecProvider bmProvider; + + public WorldgenProvider(DataGenerator generator, ExistingFileHelper existingFileHelper, String namespace) { + this.namespace = namespace; + this.registryAccess = RegistryAccess.builtinCopy(); + RegistryOps ops = RegistryOps.create(JsonOps.INSTANCE, registryAccess); + this.cfProvider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, ops, Registry.CONFIGURED_FEATURE_REGISTRY, cfs); + this.pfProvider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, ops, Registry.PLACED_FEATURE_REGISTRY, pfs); + this.bmProvider = JsonCodecProvider.forDatapackRegistry(generator, existingFileHelper, namespace, ops, ForgeRegistries.Keys.BIOME_MODIFIERS, bms); + } + + @Override + public void run(CachedOutput p_236071_) throws IOException { + cfs.clear(); + pfs.clear(); + bms.clear(); + generateConfiguredFeatures(); + generatePlacedFeatures(); + generateBiomeModifiers(); + cfProvider.run(p_236071_); + pfProvider.run(p_236071_); + bmProvider.run(p_236071_); + } + + @Override + public String getName() { + return "WorldgenProvider["+namespace+"]"; + } + + protected void cf(ResourceLocation name, ConfiguredFeature cf) { + cfs.put(name, cf); + } + + protected void cf(String name, ConfiguredFeature cf) { + cf(new ResourceLocation(namespace, name), cf); + } + + protected void pf(ResourceLocation name, PlacedFeature pf) { + pfs.put(name, pf); + } + + protected void pf(String name, PlacedFeature pf) { + pf(new ResourceLocation(namespace, name), pf); + } + + protected void bm(ResourceLocation name, BiomeModifier bm) { + bms.put(name, bm); + } + + protected void bm(String name, BiomeModifier bm) { + bm(new ResourceLocation(namespace, name), bm); + } + + protected Holder> cf(ResourceLocation name) { + return getHolderOrThrow(Registry.CONFIGURED_FEATURE_REGISTRY, name); + } + + protected Holder> cf(String name) { + return cf(new ResourceLocation(namespace, name)); + } + + protected Holder pf(ResourceLocation name) { + return getHolderOrThrow(Registry.PLACED_FEATURE_REGISTRY, name); + } + + protected Holder pf(String name) { + return pf(new ResourceLocation(namespace, name)); + } + + protected HolderSet bt(TagKey tag) { + return registryAccess.registryOrThrow(Registry.BIOME_REGISTRY).getOrCreateTag(tag); + } + + protected abstract void generateConfiguredFeatures(); + + protected abstract void generatePlacedFeatures(); + + protected abstract void generateBiomeModifiers(); + + protected static HolderSet and(HolderSet... holders) { + return new AndHolderSet<>(Arrays.asList(holders)); + } + + protected static HolderSet or(HolderSet... holders) { + return new OrHolderSet<>(Arrays.asList(holders)); + } + + @NotNull + private Holder getHolderOrThrow(ResourceKey> registryKey, ResourceLocation location) { + return registryAccess.registryOrThrow(registryKey).getOrCreateHolderOrThrow(ResourceKey.create(registryKey, location)); + } + + /** + * @param ore The ore block to use. + * @param deepslateOre The deepslate ore block to use. + * @param veinSize The vein size of this ore. + * @param airExposureDiscardChance A 0..1 float that represents the probability of the feature being discarded if the vein touches air. + * @return A configured ore feature based on the given parameters. + */ + protected static ConfiguredFeature ore(Supplier ore, Supplier deepslateOre, int veinSize, float airExposureDiscardChance) { + return WorldgenProvider.feature(Feature.ORE, new OreConfiguration(List.of(OreConfiguration.target(OreFeatures.STONE_ORE_REPLACEABLES, ore.get().defaultBlockState()), OreConfiguration.target(OreFeatures.DEEPSLATE_ORE_REPLACEABLES, deepslateOre.get().defaultBlockState())), veinSize, airExposureDiscardChance)); + } + + /** + * @param feature The configured feature to use. + * @param veinCount The amount of veins for this feature. + * @param heightRangePlacement The height distribution of this feature. + * @return A placed feature based on the given parameters. + */ + protected static PlacedFeature orePlacement(Holder> feature, int veinCount, HeightRangePlacement heightRangePlacement) { + return WorldgenProvider.placement(feature, CountPlacement.of(veinCount), InSquarePlacement.spread(), heightRangePlacement, BiomeFilter.biome()); + } + + /** + * @param tries How many tries for this feature will be performed. + * @param flower The flower block to use. + * @return A configured flower feature based on the given parameters. + */ + protected static ConfiguredFeature flower(int tries, Supplier flower) { + return WorldgenProvider.feature(Feature.RANDOM_PATCH, FeatureUtils.simpleRandomPatchConfiguration(tries, PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(flower.get()))))); + } + + /** + * @param feature The configured feature to use. + * @param rarity The rarity of this feature. + * @return A placed feature based on the given parameters. + */ + protected static PlacedFeature flowerPlacement(Holder> feature, int rarity) { + return WorldgenProvider.placement(feature, RarityFilter.onAverageOnceEvery(rarity), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); + } + + /** + * @param log The log block to use. + * @param trunk The trunk placer to use. + * @param leaves The leaves block to use. + * @param foliage The foliage placer to use. + * @param size The feature size to use. + * @return A configured tree feature based on the given parameters. + */ + protected static ConfiguredFeature tree(Supplier log, TrunkPlacer trunk, Supplier leaves, FoliagePlacer foliage, FeatureSize size) { + return WorldgenProvider.feature(Feature.TREE, new TreeConfiguration.TreeConfigurationBuilder(BlockStateProvider.simple(log.get()), trunk, BlockStateProvider.simple(leaves.get()), foliage, size).ignoreVines().build()); + } + + /** + * @param feature The configured feature to use. + * @param sapling The sapling associated with this tree feature. + * @return A placed feature based on the given parameters. + */ + protected static PlacedFeature treePlacement(Holder> feature, Supplier sapling) { + return new PlacedFeature(feature, List.of(PlacementUtils.filteredByBlockSurvival(sapling.get()))); + } + + /** + * @param feature The configured feature to use. + * @param modifier The tree placement modifier to use. + * @param rarity The rarity of this feature. + * @param sapling The sapling associated with this tree feature. + * @return A placed feature based on the given parameters. + */ + protected static PlacedFeature treeVegetation(Holder> feature, PlacementModifier modifier, int rarity, Supplier sapling) { + List list = new ArrayList<>(VegetationPlacements.treePlacement(modifier, sapling.get())); + list.add(RarityFilter.onAverageOnceEvery(rarity)); + return WorldgenProvider.placement(feature, list.toArray(new PlacementModifier[0])); + } + + protected static ConfiguredFeature feature(Feature feature, T configuration) { + return new ConfiguredFeature<>(feature, configuration); + } + + protected static PlacedFeature placement(Holder> feature, PlacementModifier... modifiers) { + return new PlacedFeature(feature, Arrays.asList(modifiers)); + } +} diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/RecipeProviderMixin.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/RecipeProviderMixin.java new file mode 100644 index 000000000..00bcd3806 --- /dev/null +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/RecipeProviderMixin.java @@ -0,0 +1,47 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.data.mixin; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +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.Blocks; +import net.minecraftforge.common.Tags; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(RecipeProvider.class) +class RecipeProviderMixin { + @Inject(method = "fenceBuilder", at = @At("HEAD"), cancellable = true) + private static void fenceBuilder(ItemLike pFence, Ingredient pMaterial, CallbackInfoReturnable cir) { + int i = pFence == Blocks.NETHER_BRICK_FENCE ? 6 : 3; + ShapedRecipeBuilder builder = ShapedRecipeBuilder.shaped(pFence, i).define('W', pMaterial).pattern("W#W").pattern("W#W"); + if (pFence == Blocks.NETHER_BRICK_FENCE) { + Item item = Items.NETHER_BRICK; + cir.setReturnValue(builder.define('#', item)); + } else { + cir.setReturnValue(builder.define('#', Tags.Items.RODS_WOODEN)); + } + } + + @Inject(method = "fenceGateBuilder", at = @At("HEAD"), cancellable = true) + private static void fenceGateBuilder(ItemLike pFenceGate, Ingredient pMaterial, CallbackInfoReturnable cir) { + cir.setReturnValue(ShapedRecipeBuilder.shaped(pFenceGate).define('#', Tags.Items.RODS_WOODEN).define('W', pMaterial).pattern("#W#").pattern("#W#")); + } + + @Inject(method = "signBuilder", at = @At("HEAD"), cancellable = true) + private static void signBuilder(ItemLike pSign, Ingredient pMaterial, CallbackInfoReturnable cir) { + cir.setReturnValue(ShapedRecipeBuilder.shaped(pSign, 3).group("sign").define('#', pMaterial).define('X', Tags.Items.RODS_WOODEN).pattern("###").pattern("###").pattern(" X ")); + } + + @ModifyArg(method = "oreCooking", at = @At(value = "INVOKE", target = "Lnet/minecraft/data/recipes/SimpleCookingRecipeBuilder;save(Ljava/util/function/Consumer;Ljava/lang/String;)V")) + private static String oreCooking(String pName) { + return ArsMagicaAPI.MOD_ID + ":" + pName; + } +} diff --git a/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/package-info.java b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/package-info.java new file mode 100644 index 000000000..efee92a67 --- /dev/null +++ b/src/data/java/com/github/minecraftschurlimods/arsmagicalegacy/data/mixin/package-info.java @@ -0,0 +1 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.data.mixin; diff --git a/src/data/resources/arsmagicalegacy_data.mixins.json b/src/data/resources/arsmagicalegacy_data.mixins.json new file mode 100644 index 000000000..1b147af33 --- /dev/null +++ b/src/data/resources/arsmagicalegacy_data.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8.5", + "package": "com.github.minecraftschurlimods.arsmagicalegacy.data.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "arsmagicalegacy.refmap.json", + "injectors": { + "defaultRequire": 1 + }, + "mixins": [ + "RecipeProviderMixin" + ] +} diff --git a/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b b/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b index 1c94d83f5..400f2f2a4 100644 --- a/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b +++ b/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b @@ -1,4 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6201147 Tags for minecraft:item +// 1.19.2 2022-08-10T18:25:08.8103905 Tags for minecraft:item ac08e7755658188bc121b8cce95fa5a057098996 data/arsmagicalegacy/tags/items/runes.json bf2ff7f1168fe233c660f374f8cb43a29c227e84 data/arsmagicalegacy/tags/items/runes/black.json 6d8e32f4cdc0fe371bb34e661ca342e42cb8ff9b data/arsmagicalegacy/tags/items/runes/blue.json diff --git a/src/main/generated/.cache/1f78fb81ff6a6f1a26e310a50401acf3e39a2e96 b/src/main/generated/.cache/1f78fb81ff6a6f1a26e310a50401acf3e39a2e96 index 1a75e41aa..43642c433 100644 --- a/src/main/generated/.cache/1f78fb81ff6a6f1a26e310a50401acf3e39a2e96 +++ b/src/main/generated/.cache/1f78fb81ff6a6f1a26e310a50401acf3e39a2e96 @@ -1,33 +1,33 @@ -// 1.19 2022-06-09T11:19:28.6421125 Abilities[arsmagicalegacy] -0095c886f52658495198001f9b2f2d21f136e31f data/arsmagicalegacy/affinity_abilities/clarity.json -bee1556fd07899fd3833f2c63bef87a6e5154952 data/arsmagicalegacy/affinity_abilities/enderman_pumpkin.json -8ee324f913eb2d6d7ec07a77c88c1dbb4a272eee data/arsmagicalegacy/affinity_abilities/enderman_thorns.json -b49c1b7410851eb087f9b6a0bc16881e15a718be data/arsmagicalegacy/affinity_abilities/fall_damage.json -580d96436ef124ee5b7ffdfad3d2a2656a070853 data/arsmagicalegacy/affinity_abilities/feather_falling.json -99614d51eeee410e48d8915407044c0a4892d136 data/arsmagicalegacy/affinity_abilities/fire_punch.json -f4b06e6a8dff734fc158d1837db8cd23f28f6df8 data/arsmagicalegacy/affinity_abilities/fire_resistance.json -b3684a2d83f112936eb56cb0de5fd3aed85c663c data/arsmagicalegacy/affinity_abilities/frost_punch.json -c038c8237b338371cf02dd2c9f568a4850fde93f data/arsmagicalegacy/affinity_abilities/frost_walker.json -e27ba20b03b7a352c0e11a83f489dd1855c3aa2d data/arsmagicalegacy/affinity_abilities/gravity.json -2229cf379683258193e8adcce35aa66fd7292d27 data/arsmagicalegacy/affinity_abilities/haste.json -580d96436ef124ee5b7ffdfad3d2a2656a070853 data/arsmagicalegacy/affinity_abilities/jump_boost.json -0dfac3725f265a9aba04d2d45640ad07165506b8 data/arsmagicalegacy/affinity_abilities/light_health_reduction.json -0c524f4cdf587f5d7c1529877d612c1abb0c53d1 data/arsmagicalegacy/affinity_abilities/magic_damage.json -0cd204ffb9ff8fab110e07a540718a0ecf0a1dc3 data/arsmagicalegacy/affinity_abilities/mana_reduction.json -58d367ca08ab7b8809de06c1c1a5338295b062af data/arsmagicalegacy/affinity_abilities/nausea.json -e0e3ad89fe10f3535e30e29ee9643934ce4b0c1a data/arsmagicalegacy/affinity_abilities/nether_damage_nature.json -c80276b4249d9797f4909e16ebbef6f98e4e7ce7 data/arsmagicalegacy/affinity_abilities/nether_damage_water.json -1eb27bbff23317484b5aaefdf70837e9ee80eb0b data/arsmagicalegacy/affinity_abilities/night_vision.json -1eb27bbff23317484b5aaefdf70837e9ee80eb0b data/arsmagicalegacy/affinity_abilities/poison_resistance.json -38a5867838dcb4f4f04b7754055d2704027e5524 data/arsmagicalegacy/affinity_abilities/regeneration.json -2229cf379683258193e8adcce35aa66fd7292d27 data/arsmagicalegacy/affinity_abilities/resistance.json -440a7e4a90461c63dccaa85f72c9c4d4c21fb90d data/arsmagicalegacy/affinity_abilities/saturation.json -56267ac5bf26565630d3a1790916fb3818d9f142 data/arsmagicalegacy/affinity_abilities/slowness.json -bc8422a8de869cc6764ef675a73d14b6bc249c5c data/arsmagicalegacy/affinity_abilities/smite.json -e2f1e693f8520a0ebc16ad83c93257f9a4716f5c data/arsmagicalegacy/affinity_abilities/speed.json -5379b9506ab3deb8bbf7c0b32fb6328caaf5e25b data/arsmagicalegacy/affinity_abilities/step_assist.json -22fcd36f12e1575649aab669e940b060423ce3aa data/arsmagicalegacy/affinity_abilities/swim_speed.json -cfdb1ed322961f6953aa83436cbd365149b612b9 data/arsmagicalegacy/affinity_abilities/thorns.json -c61d27da53c693a778de1e3d9e343536be253e3f data/arsmagicalegacy/affinity_abilities/water_damage_fire.json -6751465ed389aeb1d70f5f148d1b94a31c89abb2 data/arsmagicalegacy/affinity_abilities/water_damage_lightning.json -0dfac3725f265a9aba04d2d45640ad07165506b8 data/arsmagicalegacy/affinity_abilities/water_health_reduction.json +// 1.19.2 2022-08-10T18:25:08.8123907 Abilities[arsmagicalegacy] +eae1dfc92ac50f1836c6895f54a76e376de43673 data/arsmagicalegacy/arsmagicalegacy/ability/clarity.json +78df5cdde19973be3e1e2f7da9b2c1060d37f368 data/arsmagicalegacy/arsmagicalegacy/ability/enderman_pumpkin.json +c9009d7042d9f8a21354875ce2694eb70c0a4495 data/arsmagicalegacy/arsmagicalegacy/ability/enderman_thorns.json +cbd6319daba2ae203103817b6c69c99f472ade48 data/arsmagicalegacy/arsmagicalegacy/ability/fall_damage.json +9bc880a65712f16506cff7cf0e0805e0bf38784c data/arsmagicalegacy/arsmagicalegacy/ability/feather_falling.json +bee55ce84fc8d9123b9dc791eee91f6def818539 data/arsmagicalegacy/arsmagicalegacy/ability/fire_punch.json +a8d5b1c621c84c22edcbdf668271b6bde7a91e75 data/arsmagicalegacy/arsmagicalegacy/ability/fire_resistance.json +25fe92ad0bcf8d11e015db7753d352045aa26ec8 data/arsmagicalegacy/arsmagicalegacy/ability/frost_punch.json +778817220330185cc87f1cf2442889fb1ea34cbb data/arsmagicalegacy/arsmagicalegacy/ability/frost_walker.json +c4a9f63cc0fd198436144c49f3e20825fcf876aa data/arsmagicalegacy/arsmagicalegacy/ability/gravity.json +089d095c5b45e07c54a595b903a8a0277d7d5cbb data/arsmagicalegacy/arsmagicalegacy/ability/haste.json +9bc880a65712f16506cff7cf0e0805e0bf38784c data/arsmagicalegacy/arsmagicalegacy/ability/jump_boost.json +0dfac3725f265a9aba04d2d45640ad07165506b8 data/arsmagicalegacy/arsmagicalegacy/ability/light_health_reduction.json +74f80c2877de666f4dcb67072bce593315b9b625 data/arsmagicalegacy/arsmagicalegacy/ability/magic_damage.json +633681944dc448d21a317852c7150335cb4ccf62 data/arsmagicalegacy/arsmagicalegacy/ability/mana_reduction.json +679f39e1731a1e16f77f99e0d6963a591bade312 data/arsmagicalegacy/arsmagicalegacy/ability/nausea.json +2c4fde6de0bc9aacca8b3cabff3b22546f5d1427 data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_nature.json +24c16d5bf61284d6387eff8ba21cf9acf242cee9 data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_water.json +55c3ab19e2aaec29fa40368bc04a2019914e4158 data/arsmagicalegacy/arsmagicalegacy/ability/night_vision.json +55c3ab19e2aaec29fa40368bc04a2019914e4158 data/arsmagicalegacy/arsmagicalegacy/ability/poison_resistance.json +30ef7ccecc3450b4c0ea62ea1d2d8b429dd81446 data/arsmagicalegacy/arsmagicalegacy/ability/regeneration.json +089d095c5b45e07c54a595b903a8a0277d7d5cbb data/arsmagicalegacy/arsmagicalegacy/ability/resistance.json +3f2cb6b77d4ef06657ec6bf7125deb6b0a28ca74 data/arsmagicalegacy/arsmagicalegacy/ability/saturation.json +7146b8507197fcf425c97a8836dd19d3dd0f70f7 data/arsmagicalegacy/arsmagicalegacy/ability/slowness.json +4e8fee33fb000d59d79918e7a7a260dde5b890e5 data/arsmagicalegacy/arsmagicalegacy/ability/smite.json +69fb8cf0f44d2c98125d440d9fb02c0e9a45c443 data/arsmagicalegacy/arsmagicalegacy/ability/speed.json +eac11b8a11bde8b6c3f7536f2309433c14fcfe27 data/arsmagicalegacy/arsmagicalegacy/ability/step_assist.json +cd9fd0725f4b3f5450d4bc8613b280ce319008f8 data/arsmagicalegacy/arsmagicalegacy/ability/swim_speed.json +5f0741ff377d310826ec90f756f274d6d0e6e12f data/arsmagicalegacy/arsmagicalegacy/ability/thorns.json +1bf3c544cd71a211da0aa9e54337fa1531244d4b data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_fire.json +5cd21ab8e8fd2d0f8f3bd2fb62b1b12634b243c8 data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_lightning.json +0dfac3725f265a9aba04d2d45640ad07165506b8 data/arsmagicalegacy/arsmagicalegacy/ability/water_health_reduction.json diff --git a/src/main/generated/.cache/3ca5fb735269924f2959739249fcac3c4d7dab3f b/src/main/generated/.cache/3ca5fb735269924f2959739249fcac3c4d7dab3f index 9a398968d..b11c6a28f 100644 --- a/src/main/generated/.cache/3ca5fb735269924f2959739249fcac3c4d7dab3f +++ b/src/main/generated/.cache/3ca5fb735269924f2959739249fcac3c4d7dab3f @@ -1,3 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6461131 Obelisk Fuels[arsmagicalegacy] +// 1.19.2 2022-08-10T18:25:08.8563961 Obelisk Fuels[arsmagicalegacy] +437e8fb7999d38dad9e2d6dc46211f57b10f8967 data/arsmagicalegacy/obelisk_fuel/liquid_essence_bucket.json 007a081ece13af6824a241eda9aad78b46e00a8a data/arsmagicalegacy/obelisk_fuel/vinteum_block.json 31f996aa805c6096ae2608938ab5dc4d0a8d91a8 data/arsmagicalegacy/obelisk_fuel/vinteum_dust.json diff --git a/src/main/generated/.cache/514917ae98e925a35f49d34bc5f5420a95cc39e8 b/src/main/generated/.cache/514917ae98e925a35f49d34bc5f5420a95cc39e8 index ea7f95721..19d940e3a 100644 --- a/src/main/generated/.cache/514917ae98e925a35f49d34bc5f5420a95cc39e8 +++ b/src/main/generated/.cache/514917ae98e925a35f49d34bc5f5420a95cc39e8 @@ -1,18 +1,18 @@ -// 1.19 2022-06-09T11:19:28.6491142 Prefab Spells[arsmagicalegacy] -62a7c3ed8ab909d1727ddb1d28217253080b0717 data/arsmagicalegacy/prefab_spells/arcane_bolt.json -946b038dcf0a3ee826ef806eb85130ee33c11bb7 data/arsmagicalegacy/prefab_spells/area_lightning.json -3ce1ed665ef3379efeeee3b8afd9446bdc0470be data/arsmagicalegacy/prefab_spells/blink.json -86c92b3e11b80e79124ccfb39d53d59b6b515a53 data/arsmagicalegacy/prefab_spells/chaos_water_bolt.json -df4fb7cf44848a7fae20f993a89f6b5db33d19ae data/arsmagicalegacy/prefab_spells/dispel.json -03c12bd0b3b08a4347abbc9945e0eb06c215867d data/arsmagicalegacy/prefab_spells/ender_bolt.json -4159e86d71f937970d5c1386e1bf8c424d28cce2 data/arsmagicalegacy/prefab_spells/ender_torrent.json -2a6152cf78d044b460ed3d3e2c80ca209f3a5450 data/arsmagicalegacy/prefab_spells/ender_wave.json -804c85628d4fb351faf5f19c6fdb340c75755c16 data/arsmagicalegacy/prefab_spells/fire_bolt.json -56140a310ee67b1eddc20d9b86b92bc70c839621 data/arsmagicalegacy/prefab_spells/heal_self.json -4a77928fb13f2001a9fb2cdb94f85827dfdda0ac data/arsmagicalegacy/prefab_spells/lightning_bolt.json -b903ac86ad8e69bb1d91774011750e48153c2737 data/arsmagicalegacy/prefab_spells/lightning_rune.json -40dd4feab880e8633a6c98baf7631aa529f21d38 data/arsmagicalegacy/prefab_spells/melt_armor.json -662d8ffd21499c40b36d77c0acdabf11eea53275 data/arsmagicalegacy/prefab_spells/nausea.json -c44281a2868d4d740af6e1167154819089c2e940 data/arsmagicalegacy/prefab_spells/otherworldly_roar.json -a3bcc794f3ecab7ba1faab7ca96dbb2b031d176e data/arsmagicalegacy/prefab_spells/scramble_synapses.json -7c6d7d36137004b80d0dd2e23d15ab0da5f8d00b data/arsmagicalegacy/prefab_spells/water_bolt.json +// 1.19.2 2022-08-10T18:25:08.8393901 Prefab Spells[arsmagicalegacy] +62a7c3ed8ab909d1727ddb1d28217253080b0717 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/arcane_bolt.json +946b038dcf0a3ee826ef806eb85130ee33c11bb7 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/area_lightning.json +3ce1ed665ef3379efeeee3b8afd9446bdc0470be data/arsmagicalegacy/arsmagicalegacy/prefab_spell/blink.json +86c92b3e11b80e79124ccfb39d53d59b6b515a53 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/chaos_water_bolt.json +df4fb7cf44848a7fae20f993a89f6b5db33d19ae data/arsmagicalegacy/arsmagicalegacy/prefab_spell/dispel.json +03c12bd0b3b08a4347abbc9945e0eb06c215867d data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_bolt.json +4159e86d71f937970d5c1386e1bf8c424d28cce2 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_torrent.json +2a6152cf78d044b460ed3d3e2c80ca209f3a5450 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_wave.json +804c85628d4fb351faf5f19c6fdb340c75755c16 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/fire_bolt.json +56140a310ee67b1eddc20d9b86b92bc70c839621 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/heal_self.json +4a77928fb13f2001a9fb2cdb94f85827dfdda0ac data/arsmagicalegacy/arsmagicalegacy/prefab_spell/lightning_bolt.json +b903ac86ad8e69bb1d91774011750e48153c2737 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/lightning_rune.json +40dd4feab880e8633a6c98baf7631aa529f21d38 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/melt_armor.json +662d8ffd21499c40b36d77c0acdabf11eea53275 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/nausea.json +c44281a2868d4d740af6e1167154819089c2e940 data/arsmagicalegacy/arsmagicalegacy/prefab_spell/otherworldly_roar.json +a3bcc794f3ecab7ba1faab7ca96dbb2b031d176e data/arsmagicalegacy/arsmagicalegacy/prefab_spell/scramble_synapses.json +7c6d7d36137004b80d0dd2e23d15ab0da5f8d00b data/arsmagicalegacy/arsmagicalegacy/prefab_spell/water_bolt.json diff --git a/src/main/generated/.cache/55f0273cb61243ff3d2fde23212f03e66541da02 b/src/main/generated/.cache/55f0273cb61243ff3d2fde23212f03e66541da02 index db2cc4090..fc0a422f2 100644 --- a/src/main/generated/.cache/55f0273cb61243ff3d2fde23212f03e66541da02 +++ b/src/main/generated/.cache/55f0273cb61243ff3d2fde23212f03e66541da02 @@ -1,2 +1,2 @@ -// 1.19 2022-06-09T11:19:28.6161153 Tags for minecraft:worldgen/biome +// 1.19.2 2022-08-10T18:25:08.834389 Tags for minecraft:worldgen/biome 20350f862e9cdf1ac1f21355a452c91912babf8f data/arsmagicalegacy/tags/worldgen/biome/can_spawn_water_guardian.json diff --git a/src/main/generated/.cache/6105d15ab67ad96ebc6a7b00490b938f89464181 b/src/main/generated/.cache/6105d15ab67ad96ebc6a7b00490b938f89464181 new file mode 100644 index 000000000..d734fc4bd --- /dev/null +++ b/src/main/generated/.cache/6105d15ab67ad96ebc6a7b00490b938f89464181 @@ -0,0 +1,108 @@ +// 1.19.2 2022-08-10T18:25:08.83539 arsmagicalegacy/skill generator for arsmagicalegacy +f1ace3a1cd3334d657ca0f769d5c6ef4462438e7 data/arsmagicalegacy/arsmagicalegacy/skill/absorption.json +f915f484a4d2bbd44fa833ca8b075d8770569c74 data/arsmagicalegacy/arsmagicalegacy/skill/agility.json +ac00b8d331b32001c0ed62e3558b18fa9474e2d2 data/arsmagicalegacy/arsmagicalegacy/skill/aoe.json +57a446becf996281695dca12a136ec964856eb9f data/arsmagicalegacy/arsmagicalegacy/skill/astral_distortion.json +251af3c616fc8c8bcadb997f1e2cc8b8a131c7d9 data/arsmagicalegacy/arsmagicalegacy/skill/attract.json +b3a87944f105798776be7306ffaf9755853e1dd2 data/arsmagicalegacy/arsmagicalegacy/skill/banish_rain.json +0f9506ca0b0a8f748facf82e5795228461138987 data/arsmagicalegacy/arsmagicalegacy/skill/beam.json +56bbdc950cdd09d1453018caf82320bed208a8d3 data/arsmagicalegacy/arsmagicalegacy/skill/blindness.json +9f7a69496750875b6f0105f017c74c97aa29f732 data/arsmagicalegacy/arsmagicalegacy/skill/blink.json +456371b6fdc51e91c31f858e286748d798f6bd12 data/arsmagicalegacy/arsmagicalegacy/skill/blizzard.json +df4aac44e7f051d7c80d9de351bb5a3767ac75db data/arsmagicalegacy/arsmagicalegacy/skill/bounce.json +5c13c51ab9fcae3479096a115175fa29f50fd076 data/arsmagicalegacy/arsmagicalegacy/skill/chain.json +701aeee9b1453864bcfe83f46ad9a0f5c868a7ec data/arsmagicalegacy/arsmagicalegacy/skill/channel.json +56dc28214155b9605a43f594dc914695d836a5fb data/arsmagicalegacy/arsmagicalegacy/skill/charm.json +a5c48ed2dfa313753d520f1e02c58160b1bf6cf4 data/arsmagicalegacy/arsmagicalegacy/skill/contingency_damage.json +091d835547cca790f7afaba22761aee8864fb9e1 data/arsmagicalegacy/arsmagicalegacy/skill/contingency_death.json +02fa6111a0d897edfae8eab5fb25b173ddfac8b3 data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fall.json +295c7d3fa50592245b723f61905e0ce1c74bd94e data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fire.json +83547f9be35cd7411d5eda8eae4c3d17b123b908 data/arsmagicalegacy/arsmagicalegacy/skill/contingency_health.json +633316ee7de81d6ab5cf0d551856b4f4d535770a data/arsmagicalegacy/arsmagicalegacy/skill/create_water.json +98e77653e25a1438b3211c76ab2a6d1726e6a409 data/arsmagicalegacy/arsmagicalegacy/skill/damage.json +3aaf9b28c52ee6b6688ec08275ef68fddba5d56f data/arsmagicalegacy/arsmagicalegacy/skill/daylight.json +9a5c23e2f7ab0c0e06586b52fb68cd82e1f50ceb data/arsmagicalegacy/arsmagicalegacy/skill/dig.json +b7ca72a0d974cc82f4574c91a084d3e85dc49154 data/arsmagicalegacy/arsmagicalegacy/skill/disarm.json +4e138ee242f3e4c23f876543a662de1a361f48ca data/arsmagicalegacy/arsmagicalegacy/skill/dismembering.json +09b9b53cf26d545e2a91ff6b04ed86a3cbe1ea29 data/arsmagicalegacy/arsmagicalegacy/skill/dispel.json +b4f3008681b04a53de4032a38d76569123109b0d data/arsmagicalegacy/arsmagicalegacy/skill/divine_intervention.json +465cec487c9003be9b5a5970b8c5d85968c75f6b data/arsmagicalegacy/arsmagicalegacy/skill/drought.json +a359e20519d93d7be171226a3a1a1b6666d4d13d data/arsmagicalegacy/arsmagicalegacy/skill/drowning_damage.json +f48c68a670203a06f82d88a7d7f16916287f6e62 data/arsmagicalegacy/arsmagicalegacy/skill/duration.json +c6910d1dae8cac9eed539feb91e118697bfdeaae data/arsmagicalegacy/arsmagicalegacy/skill/effect_power.json +a590cfc1e1acad04d594722697161b1449d86025 data/arsmagicalegacy/arsmagicalegacy/skill/ender_intervention.json +2a12708f7d2bd4b605db689110521eb110333ac4 data/arsmagicalegacy/arsmagicalegacy/skill/entangle.json +e55c8423fa5285418bdcdfac7126db261161c171 data/arsmagicalegacy/arsmagicalegacy/skill/explosion.json +0e2cd82008bbe7740c0f25476d729ef7cadf0ed7 data/arsmagicalegacy/arsmagicalegacy/skill/falling_star.json +2962eacd992415b941ddcc0596a509230f44292c data/arsmagicalegacy/arsmagicalegacy/skill/fire_damage.json +692476130463c9d38874c84ea4eb50a39e7daa10 data/arsmagicalegacy/arsmagicalegacy/skill/fire_rain.json +def5d9841861258490b23a924044c2eed288aee4 data/arsmagicalegacy/arsmagicalegacy/skill/flight.json +2da7fd8b11fdb412e07b3ae014919dc1c794166d data/arsmagicalegacy/arsmagicalegacy/skill/fling.json +873ad467823556bef3b2a893f67aa37a23005441 data/arsmagicalegacy/arsmagicalegacy/skill/forge.json +90c95277a99b9ec4e8b19874d6f41be448952ca9 data/arsmagicalegacy/arsmagicalegacy/skill/frost.json +ccbeb0211f55e37dca0e9173519b16e49f6a9caa data/arsmagicalegacy/arsmagicalegacy/skill/frost_damage.json +e7a1bb1671d1aa942de94c386d094d5dac1864a6 data/arsmagicalegacy/arsmagicalegacy/skill/fury.json +8eff8d37c328d6a47d16f968f4783fecaeaf7639 data/arsmagicalegacy/arsmagicalegacy/skill/gravity.json +8351c2ea0a22f0fc1d3832876a05463978504147 data/arsmagicalegacy/arsmagicalegacy/skill/gravity_well.json +adac753fd32f1ba9085d750a2b875483493ae723 data/arsmagicalegacy/arsmagicalegacy/skill/grow.json +cfec115467ed8781fc8cea11a9056f0fef2ba828 data/arsmagicalegacy/arsmagicalegacy/skill/harvest.json +5d3b03fdcbcd8ff479e0ff11a5ce4236f5098a64 data/arsmagicalegacy/arsmagicalegacy/skill/haste.json +bf43c5c96ccfda49e259417cab4d5c17186c5ce1 data/arsmagicalegacy/arsmagicalegacy/skill/heal.json +787bace646ceaf215ef48ad0e7bd9e4906180808 data/arsmagicalegacy/arsmagicalegacy/skill/healing.json +f83c6e357036e30a887330343bebe9d9666c46f8 data/arsmagicalegacy/arsmagicalegacy/skill/ignition.json +4e2e2addc29656be524d2dd892c40ef434f5a4cb data/arsmagicalegacy/arsmagicalegacy/skill/invisibility.json +8bfa2e25c9ec5025ae94830bbf4da9344e4b2a73 data/arsmagicalegacy/arsmagicalegacy/skill/jump_boost.json +66138a6de60f3d1923e6f792d73b36ffa9045710 data/arsmagicalegacy/arsmagicalegacy/skill/knockback.json +161cd52f795be4d842991e5a8b67306b0f62cc05 data/arsmagicalegacy/arsmagicalegacy/skill/levitation.json +6f5fc16b380873c344ff2658e1001b64616eed4c data/arsmagicalegacy/arsmagicalegacy/skill/life_drain.json +f8776c503c6989495e233b9c3209608ed6598da3 data/arsmagicalegacy/arsmagicalegacy/skill/life_tap.json +7211523a710f1a590c0630acaec4f410bff07a84 data/arsmagicalegacy/arsmagicalegacy/skill/light.json +d68ad2729b1b23f2fc6d64704fd23d848dce8dbb data/arsmagicalegacy/arsmagicalegacy/skill/lightning_damage.json +4893697155e9d83c27343e59b67b3ba408dea047 data/arsmagicalegacy/arsmagicalegacy/skill/lunar.json +7ecfafe90997f7d7695f1c1c479b2a4bda372a76 data/arsmagicalegacy/arsmagicalegacy/skill/magic_damage.json +ac8754cec4678ee3b527cf1150b8ce6afa8bf185 data/arsmagicalegacy/arsmagicalegacy/skill/mana_blast.json +29f491587764ac9b57762a2413f2cd78a612e8ca data/arsmagicalegacy/arsmagicalegacy/skill/mana_drain.json +ccf991ffe57505d6182f126eed57072946494071 data/arsmagicalegacy/arsmagicalegacy/skill/mana_shield.json +9b0c1b69356b929fbf7f131bc4245e760e65c916 data/arsmagicalegacy/arsmagicalegacy/skill/mining_power.json +b7e1e85e266c2bc6f52d2d0a934735c55f36535d data/arsmagicalegacy/arsmagicalegacy/skill/moonrise.json +9b7b86cb02ad192afa0e0338d989c4df6ec94783 data/arsmagicalegacy/arsmagicalegacy/skill/night_vision.json +4b92566729e81b51e3dcaf16c08b250e433870f1 data/arsmagicalegacy/arsmagicalegacy/skill/physical_damage.json +980934a19a934a9655566b68cca6b74eb28d3d21 data/arsmagicalegacy/arsmagicalegacy/skill/piercing.json +792d015ba2960c42808d0367b680e299656b7c24 data/arsmagicalegacy/arsmagicalegacy/skill/place_block.json +b64df5df555bc9d4d070ceb531e0015df1b95fd3 data/arsmagicalegacy/arsmagicalegacy/skill/plant.json +192b6e58275275d260bc2b550894aeb4b643a26d data/arsmagicalegacy/arsmagicalegacy/skill/plow.json +c3a08f974734dd501220bc182391a1725e822b8b data/arsmagicalegacy/arsmagicalegacy/skill/projectile.json +5ea92ecb684e8edd3290e3fd6ac281e0217c2849 data/arsmagicalegacy/arsmagicalegacy/skill/prosperity.json +424bd7f9123e5476c71ca0204ec8ab38a6445dbf data/arsmagicalegacy/arsmagicalegacy/skill/random_teleport.json +3958f51a67edbc383d2a71e3bc7dcaf74765d398 data/arsmagicalegacy/arsmagicalegacy/skill/range.json +9c1191fcb80e7bb67886629bb7520cc785bf382c data/arsmagicalegacy/arsmagicalegacy/skill/recall.json +370845b975ced3ecf3b58232859ab401a9ea16b7 data/arsmagicalegacy/arsmagicalegacy/skill/reflect.json +3dffe6bcf305bf2c85b086f1ba2a7d2d736cd536 data/arsmagicalegacy/arsmagicalegacy/skill/regeneration.json +92a5abe7e22280cbac479f1bf46268805752d5c8 data/arsmagicalegacy/arsmagicalegacy/skill/repel.json +ee70250175d6d327d987759f1ff0b73d5bd06a6b data/arsmagicalegacy/arsmagicalegacy/skill/rift.json +fc48ec615720626a4d18bcea5d5f51f0b5522041 data/arsmagicalegacy/arsmagicalegacy/skill/rune.json +f61b835577bbd0d6818adae47bf6f550c9b3e691 data/arsmagicalegacy/arsmagicalegacy/skill/rune_procs.json +e979f3f396ca42f53a4c8c0a71a01742b6935646 data/arsmagicalegacy/arsmagicalegacy/skill/self.json +90d363d11f8aca8bc130de71a61b86dd62f9e944 data/arsmagicalegacy/arsmagicalegacy/skill/shield.json +a67f4f24a2de9288a863bb4e9913c9b4b4b9256b data/arsmagicalegacy/arsmagicalegacy/skill/shrink.json +e88c27e67a2210b025ea95c6cc67ac437c1b90a6 data/arsmagicalegacy/arsmagicalegacy/skill/silence.json +c8635c8ddc08e0f2012e163b2fafebba7f4ec2bf data/arsmagicalegacy/arsmagicalegacy/skill/silk_touch.json +7c6b6b8ab020a81df055602f563e7feac289f8d5 data/arsmagicalegacy/arsmagicalegacy/skill/slowness.json +18cd11e74af1fcae4d05ae3cb7d2335418447eb0 data/arsmagicalegacy/arsmagicalegacy/skill/slow_falling.json +c5681d324366813b6e631b48b589ff85c8a6391e data/arsmagicalegacy/arsmagicalegacy/skill/solar.json +3ea81bc38c7eaf0d45126ad968b9349df9f0ab50 data/arsmagicalegacy/arsmagicalegacy/skill/storm.json +872853e7605356a16c283605d340806acaca5b1d data/arsmagicalegacy/arsmagicalegacy/skill/summon.json +dfb9e4a7d8963ecdb1386c531deba418387c7341 data/arsmagicalegacy/arsmagicalegacy/skill/swift_swim.json +5d0dfe2c0e6dcf53a4a48761a5e8697d619c51d3 data/arsmagicalegacy/arsmagicalegacy/skill/target_non_solid.json +33380aa674340c19721ce61659dcf28b1b41e1e9 data/arsmagicalegacy/arsmagicalegacy/skill/telekinesis.json +a6641359b7768ba2521f87e6a93f6cad4131ecff data/arsmagicalegacy/arsmagicalegacy/skill/temporal_anchor.json +82bfea44c9507722c56d6cf5011edef0c73e57cf data/arsmagicalegacy/arsmagicalegacy/skill/touch.json +e30808402a43cd51b0d17e0205cd9ca37e4be406 data/arsmagicalegacy/arsmagicalegacy/skill/transplace.json +fb0d12ad1b1021d1023b56cb9712fba347105bab data/arsmagicalegacy/arsmagicalegacy/skill/true_sight.json +6bff74fc59700a09ac8a4e0eb53ae2493c703d63 data/arsmagicalegacy/arsmagicalegacy/skill/velocity.json +5017f1df5f31d2c4339cff8dd3dae0656512e5c4 data/arsmagicalegacy/arsmagicalegacy/skill/wall.json +79db8ffe9d7ca4bf035f49b1f2affe349d0deed5 data/arsmagicalegacy/arsmagicalegacy/skill/watery_grave.json +82e90dc64b661a18784396d9d00b7188b0b0b908 data/arsmagicalegacy/arsmagicalegacy/skill/water_breathing.json +c66a5fe37cae2237e9d9cad4873acdbbdde89fd2 data/arsmagicalegacy/arsmagicalegacy/skill/wave.json +c08bc32b970cdcbd5e6012c4174d62d8e84822eb data/arsmagicalegacy/arsmagicalegacy/skill/wizards_autumn.json +b5b6fbf7c17e5d1488137b79d592a4f4fd5735ce data/arsmagicalegacy/arsmagicalegacy/skill/zone.json diff --git a/src/main/generated/.cache/64b328e8ca02181af0888a733cf726544b298906 b/src/main/generated/.cache/64b328e8ca02181af0888a733cf726544b298906 deleted file mode 100644 index f480bae94..000000000 --- a/src/main/generated/.cache/64b328e8ca02181af0888a733cf726544b298906 +++ /dev/null @@ -1,5 +0,0 @@ -// 1.19 2022-06-09T11:19:28.6501146 Occulus Tabs[arsmagicalegacy] -1f7395821c1498e23207c7568f0cf47d902d659b data/arsmagicalegacy/occulus_tabs/affinity.json -68692e421fc9f493e1217cd6da02a179d0a65aec data/arsmagicalegacy/occulus_tabs/defense.json -45bd6124f6b10729ba69ae8d995b9e6b2768ae68 data/arsmagicalegacy/occulus_tabs/offense.json -07c4c6232350de4ae6421fc34583d77134286acd data/arsmagicalegacy/occulus_tabs/utility.json diff --git a/src/main/generated/.cache/67cce32b1c3cbbcb1f646605f4914e3f196986c2 b/src/main/generated/.cache/67cce32b1c3cbbcb1f646605f4914e3f196986c2 index 56e8c310c..a48a577ae 100644 --- a/src/main/generated/.cache/67cce32b1c3cbbcb1f646605f4914e3f196986c2 +++ b/src/main/generated/.cache/67cce32b1c3cbbcb1f646605f4914e3f196986c2 @@ -1,4 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6611157 LootTables +// 1.19.2 2022-08-10T18:25:08.8253903 LootTables b6aa0b154e90cc2ff8bf3eded925ba7f62b77f6a data/arsmagicalegacy/loot_tables/blocks/altar_core.json c0afba4d4db1a3b0daf1ce050875fdcd68f7c299 data/arsmagicalegacy/loot_tables/blocks/aum.json d41c1158db3f312dd310b6cc779680a10c69aab6 data/arsmagicalegacy/loot_tables/blocks/black_aurem.json diff --git a/src/main/generated/.cache/735031f3addf80804addae5e3f53249900116f1e b/src/main/generated/.cache/735031f3addf80804addae5e3f53249900116f1e index befc8ffcc..c9fd07e13 100644 --- a/src/main/generated/.cache/735031f3addf80804addae5e3f53249900116f1e +++ b/src/main/generated/.cache/735031f3addf80804addae5e3f53249900116f1e @@ -1,2 +1,2 @@ -// 1.19 2022-06-09T11:19:28.6631148 Sound Definitions +// 1.19.2 2022-08-10T18:25:08.8323913 Sound Definitions 323638e62e7be16647661c02f608033e013ee865 assets/arsmagicalegacy/sounds.json diff --git a/src/main/generated/.cache/75bcd4dba6ca7d365462b0ec45e291d1056349c4 b/src/main/generated/.cache/75bcd4dba6ca7d365462b0ec45e291d1056349c4 index 280edde9a..7e717f0c7 100644 --- a/src/main/generated/.cache/75bcd4dba6ca7d365462b0ec45e291d1056349c4 +++ b/src/main/generated/.cache/75bcd4dba6ca7d365462b0ec45e291d1056349c4 @@ -1,4 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6591127 Tags for minecraft:block +// 1.19.2 2022-08-10T18:25:08.8313905 Tags for minecraft:block 09a8495f82a08691d533f5301ffce0cc0afe0bcf data/arsmagicalegacy/tags/blocks/witchwood_logs.json 75597f58eaad48b98e64ba095c0e13b1573e0f4e data/forge/tags/blocks/fences/wooden.json 4509a6dbe8b8c6353fbe06cefd812efe1dca2727 data/forge/tags/blocks/fence_gates/wooden.json diff --git a/src/main/generated/.cache/833cd09e1a52f62164f243240fbe115c005d9482 b/src/main/generated/.cache/833cd09e1a52f62164f243240fbe115c005d9482 index bc1c563de..537675ace 100644 --- a/src/main/generated/.cache/833cd09e1a52f62164f243240fbe115c005d9482 +++ b/src/main/generated/.cache/833cd09e1a52f62164f243240fbe115c005d9482 @@ -1,4 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6561125 Item Models: arsmagicalegacy +// 1.19.2 2022-08-10T18:25:08.8143929 Item Models: arsmagicalegacy bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f assets/arsmagicalegacy/models/item/affinity_essence.json 6e0b262bb6740bdbe7b3564e182497239ff375ac assets/arsmagicalegacy/models/item/affinity_essence_air.json 84174d0bc6eb1016c4946a0937eb7ec35e19f1d8 assets/arsmagicalegacy/models/item/affinity_essence_arcane.json @@ -67,6 +67,7 @@ b8d7707941aa5120979431bb89c54c0f18600ec0 assets/arsmagicalegacy/models/item/infi 3e3d968958428483ce14a4b63ebfef6f55f9a27f assets/arsmagicalegacy/models/item/light_blue_rune.json f23802e331e186775bfb9211aab6c426820e1f6a assets/arsmagicalegacy/models/item/light_gray_rune.json 7de8caeb86db5ef926a02117b3d614ec253cf4e8 assets/arsmagicalegacy/models/item/lime_rune.json +4319de210acacaaef02eb277be8e7c7332a553cd assets/arsmagicalegacy/models/item/liquid_essence_bucket.json 4efd9f80996b62a4cfa761ba92fa1e1eb3741e4e assets/arsmagicalegacy/models/item/magenta_rune.json d2009a05fd1491bd1054981535286fd1232d8fc8 assets/arsmagicalegacy/models/item/mage_boots.json 81fa2919df0cd12ecc8acf0464fe921d3a47e867 assets/arsmagicalegacy/models/item/mage_chestplate.json diff --git a/src/main/generated/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/main/generated/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index bfaf2bafc..52d2c93c8 100644 --- a/src/main/generated/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/main/generated/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,4 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6281144 Recipes +// 1.19.2 2022-08-13T13:31:15.3601105 Recipes 5d608621b88372a31c93749e2aaef82e90359828 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/affinity_essence_air.json 109d0b52199b1f6ffa60cce200c2f80ae7261e2b data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/affinity_essence_arcane.json aee071e30afe5fa12880ff3e947d0bf0298f17f9 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/affinity_essence_earth.json @@ -22,6 +22,10 @@ fff19f8bcf1174738c86a4befc1bdd184bea8c13 data/arsmagicalegacy/advancements/recip 4a3298e372fe0876fef6845ae9f5396bd70a8002 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/brown_rune.json 881fd7b20e692fce649c51218d0cb10e77aa5a77 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite.json 9860aac5ae303f4d18f915c388c9b0999ff3f01c data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_block.json +96ed8f809d1c1a5f6439d7e769176f609de09004 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_chimerite_ore.json +211ec9cc107e2e5e2eafbe0a8219533ec54d8527 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_deepslate_chimerite_ore.json +b11baa0d52b12d10b038709a42b0b8429689b60d data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_chimerite_ore.json +043833555ad84804628f31cf16036bce19f1f138 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_deepslate_chimerite_ore.json 8355cb452e30b190bc82bcbdf9fff388bd873e1e data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/crystal_wrench.json f58cb1075fb4465f64c2bbc97d76930fbdcdc229 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/cyan_rune.json ea6146376162b9fad79fcd34b6da38e85e7a36a1 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/gold_inlay.json @@ -43,6 +47,10 @@ ddfd71d7553ebfa8d38dbe4beb3ee21ef2337012 data/arsmagicalegacy/advancements/recip 171953021ed072fc70b96d97dbd71e8a907b81a4 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/mana_martini.json f0b1da97012a09908c98053e445edb0a631631e2 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone.json 984e3552f81816122a548aa20dde746fd63202a6 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_block.json +785966e5668a7348cc7192fd978defc365b71c95 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_deepslate_moonstone_ore.json +356f2793862d4d9d1e7f60140aa0df993ec9834e data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_moonstone_ore.json +22a924a47d840b7c7b2cf411bff0e05a1df8f5a8 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_deepslate_moonstone_ore.json +7be969ca2d6c036e98455c8e61e5a895d5657916 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_moonstone_ore.json 13ee18be9e307c3ddc3564fafab84db7978e5ca1 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/obelisk.json b6585320464eff2eb19451c9ff3878c49e0d8962 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/occulus.json 2625f35f0e4af136065e92b6f47ce9c7d12371de data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/orange_rune.json @@ -54,28 +62,36 @@ a9b59d402b7cbf09bea772fd8012bd8edc831091 data/arsmagicalegacy/advancements/recip c5c977cf1abc924f6e07f46f1cfbf0ae84c6b6ba data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/rune_bag.json cb7d3bde74483f6637e1975bb0a931e1f7265b5c data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/spell_book.json 76d16a9eeada3da90651766143ff08dd9be403cb data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/spell_parchment.json -28aa0d83aa34358396a0210b2801559186b84f3e data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/stripped_witchwood.json +d956a147f6662c25bcde37672e10c0d9e52e66b7 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/stripped_witchwood.json 19aee5e430d62e0b1e42d0c826d3c7f411c02c97 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/sunstone.json 4aef0b7f5452b6560f27f8f8e80d79e485721d37 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/sunstone_block.json 0a8a577a68f19c7e9300c85c5502abb8dedf50a1 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz.json edbf47864b95fba4afd12e24d4984e166e468ef4 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_block.json +6e6f74f41d1321a796f3282ff34375c282f551f4 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_deepslate_topaz_ore.json +55d7f4c2cddd0717e1b95b3c374cf55040857cb3 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_topaz_ore.json +884f08020a275d0f1a6c4e774101166746b10d2b data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_deepslate_topaz_ore.json +21855359f87425b86bfb6820fd4ac7d2326bc7c6 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_topaz_ore.json dba035e2cf13fb766dbfa629b3e247dbd1cb0925 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_block.json d9db22bf70518bcd7c6c8cbc4138b9302bc97cda data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust.json +512bd3722106ae10ce41fcc73a1c06197ad21e8d data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_deepslate_vinteum_ore.json +03664c1653970cfac74577cc150175dd9802b129 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_vinteum_ore.json +c1db02525d066539b6a5071c6040724b6268fb19 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_deepslate_vinteum_ore.json +817293672092392687884e49c8a2506f1c3283b1 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_vinteum_ore.json 8d39e4d3ce5a1f85c318bf5e6227f6b37c1f7019 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_torch.json b66540a78db1d75ec1f534a4d26e4dc36cf508c8 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/white_rune.json -60f1612125fb7437a69c4d8c83c8fbf9253e69e5 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood.json -91132b8b272044a9e614a74180a6466e3d79bbcc data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_button.json -6060b01da1c8a52b09d40b7e9063270f167be67b data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_door.json -ab06d7ce0f62f5c8e4a785059c06037e712dd24e data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence.json -3138508e8d3bd0d260d62dd7cb6ecec86257d019 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence_gate.json -1f5ce6e902e749d4fb2f435dd518412b2027a22c data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_planks.json -166cae6ca8aa40beb9d72347a1bab26c78af0e10 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_pressure_plate.json -6ee8e313dcc3af9aa648fbb5af2959723422ff7d data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_slab.json -d57a678df232977042073640f80253b60de3d7fe data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_stairs.json -c21f3ec61742d9d3a240128021524eec0373c2f1 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_trapdoor.json +5c4023d9dad627f17709ffc0e099eae9f0311ce3 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood.json +1ac17448ab52ffc86800c33adda4e7df2556f922 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_button.json +c301da662626490a69db4994c8e878d4c6309e49 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_door.json +0f9bc45c690acc89897b8fc61b2ef45e874a1d12 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence.json +6e0cdba4fe2056be863bb6aae5eeadab8576c745 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence_gate.json +ba7df54830ba65fa04aac0df0c1a7179b4f412b9 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_planks.json +5d9556fc2c84f94ebbbef0178284a43cb340c10a data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_pressure_plate.json +4008cf7e21d8dbc0c23878e5da0e80803852fba1 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_slab.json +d301fc5162d32d6209054ec878f219148ea11e45 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_stairs.json +b57ddbc42630287eff8143e79d0f9fbe64538097 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_trapdoor.json 1269ca9dd47eaa8140efdcc2ea1e4a54a31ca9a5 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/wizards_chalk.json e2636b11a251fe4624caee0621d979f14517c2a3 data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/yellow_rune.json -3d96aaf9d3298921565b54358247389a8fd9de1e data/arsmagicalegacy/advancements/recipes/misc/arcane_compendium.json +bd3fca75fa8e99b2f2685e6544eaf0bb0a06c45c data/arsmagicalegacy/advancements/recipes/misc/arcane_compendium.json 671222585bcfe0c4e23be2e3de6346fb526cc7aa data/arsmagicalegacy/advancements/recipes/misc/blue_dye.json 115023fb0c9755a6d8b05dcd6b7b5e03a2dd4407 data/arsmagicalegacy/advancements/recipes/misc/brown_dye.json 42e5df8456ff904639308d3bde54a0f45fe68d6a data/arsmagicalegacy/advancements/recipes/misc/magenta_dye.json @@ -93,12 +109,12 @@ fd7ef730c73c04502014c7d98801dd894fba45e8 data/arsmagicalegacy/recipes/affinity_e cd7a2b10fb4f3031ffa743c0cceb46adffb93ee8 data/arsmagicalegacy/recipes/affinity_essence_water.json e521aab564ebeaaedfcb670dce19ba78fe0cb87d data/arsmagicalegacy/recipes/altar_core.json 9630eca514c0965c52e15306936ca12c2b88a8ef data/arsmagicalegacy/recipes/arcane_ash.json -c2791f4f83eeb892dbdc2c3ca825d2e30732a6f0 data/arsmagicalegacy/recipes/arcane_compendium.json +91c3a0d59f2250825820155331e9214c993640d3 data/arsmagicalegacy/recipes/arcane_compendium.json 2483fa5762b80e0be67a234bd7f7576ba42e2b02 data/arsmagicalegacy/recipes/arcane_compound.json -0ad1759f79dccc1c1857df3e96cacf0f9fbe24d2 data/arsmagicalegacy/recipes/battlemage_boots.json -ed296f95cc9946c1058394736c2e587958eeb667 data/arsmagicalegacy/recipes/battlemage_chestplate.json -abad1052bcce527ba06f441202db41f8d14c0752 data/arsmagicalegacy/recipes/battlemage_helmet.json -a6db749cac8df059a95a42e3f8eeffad7d7e14e3 data/arsmagicalegacy/recipes/battlemage_leggings.json +59cdef9e0cedc2a999b7a2a53d8caa10351d12f8 data/arsmagicalegacy/recipes/battlemage_boots.json +4f9fa7ead7164c8467e8da45c609502716c4b7ef data/arsmagicalegacy/recipes/battlemage_chestplate.json +7d0599616d45aeece4edccaec0d6d9888a9dfe10 data/arsmagicalegacy/recipes/battlemage_helmet.json +eb8485ee20bceee8dfa5a99bf24c00431d4b9859 data/arsmagicalegacy/recipes/battlemage_leggings.json 55a6720b7d9f77e2834912c039d049458b0820c2 data/arsmagicalegacy/recipes/black_rune.json bfb05fa6c97ace6abfe6a633286b4cca2249ddaf data/arsmagicalegacy/recipes/blank_rune.json 4a84c66a47beb3356e8a51e8e4ab49877f2bf4fd data/arsmagicalegacy/recipes/blue_dye.json @@ -107,6 +123,10 @@ bfb05fa6c97ace6abfe6a633286b4cca2249ddaf data/arsmagicalegacy/recipes/blank_rune 75327414a27ccae19ccc378b297d4ed0339ac0ba data/arsmagicalegacy/recipes/brown_rune.json a73f1358a5ffd0142bd6cfef498bebb01cab7b2d data/arsmagicalegacy/recipes/chimerite.json 9fbbad38b7f3381e429462901f54559d05ecb596 data/arsmagicalegacy/recipes/chimerite_block.json +dc3cc16b9025efcba4534bc55edce83192acecc2 data/arsmagicalegacy/recipes/chimerite_from_blasting_chimerite_ore.json +332b879244ae2346c9be3f102c2b075595071245 data/arsmagicalegacy/recipes/chimerite_from_blasting_deepslate_chimerite_ore.json +9ae4802f0997a0191d71f524b3afe390bea1fb50 data/arsmagicalegacy/recipes/chimerite_from_smelting_chimerite_ore.json +b7868e6d9e235ec8f90ea653aaacb8712dc31f2d data/arsmagicalegacy/recipes/chimerite_from_smelting_deepslate_chimerite_ore.json 427b16992c0fb17009d7d19715fe93de70e360bb data/arsmagicalegacy/recipes/crystal_wrench.json 193f6b9ce9fb97a8456252ab1da5a5a4b871ba15 data/arsmagicalegacy/recipes/cyan_rune.json 8c44c632714c53fb5096c69e60f79a71204fc415 data/arsmagicalegacy/recipes/gold_inlay.json @@ -126,9 +146,13 @@ f06368c8af32f2e3a4e882ac3c09283c9ea8465c data/arsmagicalegacy/recipes/mage_boots 811ecdff8199e804e3806837d82f53536029ea87 data/arsmagicalegacy/recipes/magic_wall.json 85e173e733eb39a98d4086126d85a7a3814a922d data/arsmagicalegacy/recipes/magitech_goggles.json c29b747a592d314ea86423c46f2b3e8a11328e6c data/arsmagicalegacy/recipes/mana_cake.json -2866bcbf92aef58bbd9876537bb8d87d62015659 data/arsmagicalegacy/recipes/mana_martini.json +4fa8a7c6acd5ec5e752d550ae87611e7e225d6c4 data/arsmagicalegacy/recipes/mana_martini.json 8b9903377f7a007ace922f4d3f1f99babca48215 data/arsmagicalegacy/recipes/moonstone.json 785a52ba49bf0672e23914badbb6193a57efb1cd data/arsmagicalegacy/recipes/moonstone_block.json +baca57c4923748b227362027d0a293efe332648d data/arsmagicalegacy/recipes/moonstone_from_blasting_deepslate_moonstone_ore.json +da7fa7fa0f30d16a0bbb72df315da747fa5b3516 data/arsmagicalegacy/recipes/moonstone_from_blasting_moonstone_ore.json +5c0f264f6fb811c6046b755b3aa5486799ead422 data/arsmagicalegacy/recipes/moonstone_from_smelting_deepslate_moonstone_ore.json +108ffa992fff0ce9155ac2854af1c5bf42d68e66 data/arsmagicalegacy/recipes/moonstone_from_smelting_moonstone_ore.json c6618f8746947063a8e4ef79a51cb981d5db07cc data/arsmagicalegacy/recipes/obelisk.json 17cecdbc746fc82691cf631d6c22e89bd9ec8115 data/arsmagicalegacy/recipes/occulus.json 2d536dab55d23b1246326a2fe9224ff6058af5eb data/arsmagicalegacy/recipes/orange_rune.json @@ -147,15 +171,23 @@ a9cf280a359c1459c696d7d42f43aee1dc1e450d data/arsmagicalegacy/recipes/red_dye.js 2d10e76dd67d74b9abbcd56a24eacbabc7c75f20 data/arsmagicalegacy/recipes/sunstone_block.json a8fec5924280bd8a879692719381b64bd75b1b33 data/arsmagicalegacy/recipes/topaz.json 10a353506ec8c4e9a3d02e2e5ff88a21eec51ea1 data/arsmagicalegacy/recipes/topaz_block.json +310c385150ced6b528bf504fd7260ccdd4d6e88b data/arsmagicalegacy/recipes/topaz_from_blasting_deepslate_topaz_ore.json +d36d98238699626a6d458326d0f12c6049ddaa60 data/arsmagicalegacy/recipes/topaz_from_blasting_topaz_ore.json +fdad9fb89db58f2c4769958ab0149933b1073ce3 data/arsmagicalegacy/recipes/topaz_from_smelting_deepslate_topaz_ore.json +3a35b820290c973145ec48e3eb475d64fb3d4231 data/arsmagicalegacy/recipes/topaz_from_smelting_topaz_ore.json 845a5f309fd72544815363d7237f5e641a0caa62 data/arsmagicalegacy/recipes/vinteum_block.json 9e17b7915638a1e3f531e6dc3c9cb72014151f78 data/arsmagicalegacy/recipes/vinteum_dust.json +03d4127fea7f7bbffa4a344eaa3c603c9945789d data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_deepslate_vinteum_ore.json +08c2c6c85ce417a84cc41e2370a8edb4b1ff0329 data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_vinteum_ore.json +2e263de420c8fe171b8d6590dff8ace35cce0cd3 data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_deepslate_vinteum_ore.json +ea48d3f3d206d6e776409617481fef3de2637da2 data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_vinteum_ore.json 60d668cfc37ccd82c7e52452a6383adbd2bb9d8b data/arsmagicalegacy/recipes/vinteum_torch.json 80478bf99ebeda7dd5b4ddc5ee6ac2160919a366 data/arsmagicalegacy/recipes/white_rune.json e02f5ba6dd5486117136e873bd443935860328f3 data/arsmagicalegacy/recipes/witchwood.json 818da085a0c3a72d7eef7eee287f73e3e3765cc2 data/arsmagicalegacy/recipes/witchwood_button.json c1c39869d1482d9384572a63eb8cd3294d92a9a9 data/arsmagicalegacy/recipes/witchwood_door.json -5da48e7a68c208985196cec38b8beb536c8d5eb2 data/arsmagicalegacy/recipes/witchwood_fence.json -4b93f8dbc398e9b110864999c064babfa7fa5abb data/arsmagicalegacy/recipes/witchwood_fence_gate.json +3686039af8609de27e0bcd51c3acf3d28005c3a6 data/arsmagicalegacy/recipes/witchwood_fence.json +93b7cea4feaebd678d94e73fdbbb6a8ad336aa2c data/arsmagicalegacy/recipes/witchwood_fence_gate.json 3e294c68641f32630c61ab44172996322a8de37d data/arsmagicalegacy/recipes/witchwood_planks.json e2c5657a9f35fa959504e1ab851c4b3c97096c3f data/arsmagicalegacy/recipes/witchwood_pressure_plate.json edfd615467154295171a44ea8864c23765376430 data/arsmagicalegacy/recipes/witchwood_slab.json diff --git a/src/main/generated/.cache/ac420c79fa682b7dd66450d20527913a78925041 b/src/main/generated/.cache/ac420c79fa682b7dd66450d20527913a78925041 deleted file mode 100644 index b956251ec..000000000 --- a/src/main/generated/.cache/ac420c79fa682b7dd66450d20527913a78925041 +++ /dev/null @@ -1,108 +0,0 @@ -// 1.19 2022-06-09T11:19:28.6321145 Skills[arsmagicalegacy] -77da210920ebfd3cabc075c2d19424d33d18a10e data/arsmagicalegacy/am_skills/absorption.json -019c7f38375d7f051418e9997d344553035fbd38 data/arsmagicalegacy/am_skills/agility.json -90d59bf1e432cef3248772c7fad584d9f3ac792d data/arsmagicalegacy/am_skills/aoe.json -b6c0deae0116f657c2367f67879d16583767b8a5 data/arsmagicalegacy/am_skills/astral_distortion.json -e9cecbb8f81e1dda2eef68b5d545063e2032f9c3 data/arsmagicalegacy/am_skills/attract.json -43c3d7c35c26af92396cab27874a7c1903d3976d data/arsmagicalegacy/am_skills/banish_rain.json -405a956102b80aa32b3a072d94b11e65a6bbbb2a data/arsmagicalegacy/am_skills/beam.json -339ed96d7ce0ce783264026529a6d0d2a11cf1dc data/arsmagicalegacy/am_skills/blindness.json -121a8acd2b86fef9f4a46079697da1228c48582f data/arsmagicalegacy/am_skills/blink.json -cb70f4f20ac413b0f9a284c86673bc99c77be3bc data/arsmagicalegacy/am_skills/blizzard.json -e18e187170c641d5a7e1bcf92cf475f8e19a5f25 data/arsmagicalegacy/am_skills/bounce.json -1119aba5996e4693aa6b08b846cf222f082e7cc2 data/arsmagicalegacy/am_skills/chain.json -c23f4eef4649b08b562604ea72e45af70c0a6f63 data/arsmagicalegacy/am_skills/channel.json -22929c82cad65afef7eb71b2fbaa6aec1fc11e9c data/arsmagicalegacy/am_skills/charm.json -a3a37e54ca9829897621ae08759fd030ba538e3e data/arsmagicalegacy/am_skills/contingency_damage.json -1a660636bee498cc3470aee56fecdfb0196ffe52 data/arsmagicalegacy/am_skills/contingency_death.json -1909544e30bb267bacc8c27af9a0c210fb85e753 data/arsmagicalegacy/am_skills/contingency_fall.json -503091727a2712a9db6437b69e71df6563a103d4 data/arsmagicalegacy/am_skills/contingency_fire.json -006e625785b37dadd6c71706114ce42a4d6fd071 data/arsmagicalegacy/am_skills/contingency_health.json -5ad33dc9f19df204dde56420494347888e8eb97e data/arsmagicalegacy/am_skills/create_water.json -7670c820469dc94d5c2a953e505b4616a007c0a7 data/arsmagicalegacy/am_skills/damage.json -94dff25d8cc54dffd58404ac02a6ef4d987c0e02 data/arsmagicalegacy/am_skills/daylight.json -fb7540d0b52e0696d93093802b530751879a8bbd data/arsmagicalegacy/am_skills/dig.json -1c6a8272c8944aba1f103922fbf3a79f93ff23c1 data/arsmagicalegacy/am_skills/disarm.json -a748d1a98a841294f0555feab46860060f4e7756 data/arsmagicalegacy/am_skills/dismembering.json -07251af899164996d7dff6c7206c2bb3552d9998 data/arsmagicalegacy/am_skills/dispel.json -53e27916a0cd8615c069a0b6203cce1a039e946a data/arsmagicalegacy/am_skills/divine_intervention.json -6cb87a075c6beee3ee1e709bb5a650f80a63023e data/arsmagicalegacy/am_skills/drought.json -df20c7f2812772e2fdd75b32a9c0b2b4b3417b1f data/arsmagicalegacy/am_skills/drowning_damage.json -4f9dfcf6cfeba6417e0b438a17cf64986519f665 data/arsmagicalegacy/am_skills/duration.json -445cca04c1bbf9e7c319c8ceeb601194c1237329 data/arsmagicalegacy/am_skills/effect_power.json -9023df078db9d461332d1675e2987d8bdc41103d data/arsmagicalegacy/am_skills/ender_intervention.json -d1142c3db93ccdb1f9eb555228f936dc887bba31 data/arsmagicalegacy/am_skills/entangle.json -7847650474a034e314da21abe5b9e8a2556b71cc data/arsmagicalegacy/am_skills/explosion.json -f04f1a4e8bcfbc95a4e890cb937e40fa745ebab1 data/arsmagicalegacy/am_skills/falling_star.json -bd6c75b7f20e8b8e70a56be308c4df11ea62d281 data/arsmagicalegacy/am_skills/fire_damage.json -8065ebc70e48ab77b865c33e3cf2505997f82565 data/arsmagicalegacy/am_skills/fire_rain.json -fff31a33139c9819bfd5a5fd2cb1c66210f4e95b data/arsmagicalegacy/am_skills/flight.json -f6738c94548ff7195db461558e9183a42e7b7eef data/arsmagicalegacy/am_skills/fling.json -04d89417442128feca316db2198458d9de7c0dfd data/arsmagicalegacy/am_skills/forge.json -837537d1f778b22173515ebeccc892a4c3952521 data/arsmagicalegacy/am_skills/frost.json -a53421bfb0521900ecb34d6d543d63c2c729e2d7 data/arsmagicalegacy/am_skills/frost_damage.json -77e873c0050e59499624f372dd2bdb3219ce1b03 data/arsmagicalegacy/am_skills/fury.json -9e56243957b0a0346744b361e28795280f52fae0 data/arsmagicalegacy/am_skills/gravity.json -64b30702ebf6cdb620ad6c6caa677b37f3d27f3e data/arsmagicalegacy/am_skills/gravity_well.json -e14d67a12b7f96b6a399719035c37513275ae130 data/arsmagicalegacy/am_skills/grow.json -84d26a90db8ba37cb34a27ae92a360d0f155e3d2 data/arsmagicalegacy/am_skills/harvest.json -3e394e870880e12e5891e0267991afe3e1c03c5d data/arsmagicalegacy/am_skills/haste.json -9bb1e51790a55f7622aa7e5ba51e05f67965f897 data/arsmagicalegacy/am_skills/heal.json -03ef902c9c2b2157192ed1cfef284803d1ce1854 data/arsmagicalegacy/am_skills/healing.json -953885b2ad9deea8efa608e76f2fc2c456ff46ad data/arsmagicalegacy/am_skills/ignition.json -45b686cb441ca2c3832e2c3f21b7f8b52f9c6b67 data/arsmagicalegacy/am_skills/invisibility.json -b7c9d04c3d68096283f9207c4c80dc7f902487d8 data/arsmagicalegacy/am_skills/jump_boost.json -3f9ff1895280a58cb8f9c95700dfc69dd614c416 data/arsmagicalegacy/am_skills/knockback.json -d4c1236a9e82389c5bc70acaa390f3518bd52d72 data/arsmagicalegacy/am_skills/levitation.json -a50abe24eaa9ef29e42034268bdd3cfa6730e829 data/arsmagicalegacy/am_skills/life_drain.json -6faada3a013040256c7c903e6484a6fb7e2ccbb6 data/arsmagicalegacy/am_skills/life_tap.json -8310fa659ca22b446599180204ef4f21afbe2b27 data/arsmagicalegacy/am_skills/light.json -fd4a561dab874da685ec7915ae163ec18c94f764 data/arsmagicalegacy/am_skills/lightning_damage.json -c9b15ce978606731fd3409511522ec19494d2ea0 data/arsmagicalegacy/am_skills/lunar.json -d3129fdbb3c27096d9ea767dcd224a04aa9fe9a3 data/arsmagicalegacy/am_skills/magic_damage.json -fad3d7cb8d69f61c8200aa03b909c66812ec7630 data/arsmagicalegacy/am_skills/mana_blast.json -d10f8bd28f4a42af4da0fbfcb588b17068e29b06 data/arsmagicalegacy/am_skills/mana_drain.json -a35b2a439c4cc72250b4b5283e814cf76f08f85c data/arsmagicalegacy/am_skills/mana_shield.json -9bfd28caa8c4053d539a065faf2c78da8057e413 data/arsmagicalegacy/am_skills/mining_power.json -9ab4d1ed8dd22e6e383df4ae907e2bb2e68b69db data/arsmagicalegacy/am_skills/moonrise.json -451b7120444be1917e4bb6bb1e859e1286a58fe6 data/arsmagicalegacy/am_skills/night_vision.json -5ee6508c546e8e632d1e2ac4c23125eb7e5182a2 data/arsmagicalegacy/am_skills/physical_damage.json -92ea14e685bfabea0ad7bc624314d6b62235e00c data/arsmagicalegacy/am_skills/piercing.json -2f82b72265f3146e9264b5c63be139fb60cb9b06 data/arsmagicalegacy/am_skills/place_block.json -b583e3b4a43d044fdbce3f302a36e4e934d6597f data/arsmagicalegacy/am_skills/plant.json -698f7f8309e81e88bf764a15b1ab86bce9f727c8 data/arsmagicalegacy/am_skills/plow.json -a2fd0758c3d1697f0ca0ab6638af989775ab0765 data/arsmagicalegacy/am_skills/projectile.json -965478b1e450e8c1d718abcb517c9deaf16bf0f2 data/arsmagicalegacy/am_skills/prosperity.json -294838e50881638226671a87e4bd3d1aad757fae data/arsmagicalegacy/am_skills/random_teleport.json -46e3408f5411ad5c02640e5eacbc5ea8f09f3ab1 data/arsmagicalegacy/am_skills/range.json -214288743dd281abb77c8e7be2e1951550944fd2 data/arsmagicalegacy/am_skills/recall.json -ccba871c0f7bd4f71673a6ac493e5d76eed02b99 data/arsmagicalegacy/am_skills/reflect.json -587cce531e89e44792d5def999ba25241bf423e5 data/arsmagicalegacy/am_skills/regeneration.json -bc0836d6247493ad156fd901c658dc1da62b8869 data/arsmagicalegacy/am_skills/repel.json -b1aff17a345ed5f40077d0bff1ab8c66ed034568 data/arsmagicalegacy/am_skills/rift.json -97edbda0e91fc56c153c1672fde04632e8e310a6 data/arsmagicalegacy/am_skills/rune.json -4d375e8a1e977ed940ccc03e7d03604002d709fc data/arsmagicalegacy/am_skills/rune_procs.json -bcfe0db3069d3618aa46f59f25e9304a93670f1e data/arsmagicalegacy/am_skills/self.json -133f581f1db7e644e02aaead55cca59376fe1c06 data/arsmagicalegacy/am_skills/shield.json -98880a289d5ebb395c78e1e21778524abd9b87e9 data/arsmagicalegacy/am_skills/shrink.json -0619febffc8ced115735daddd52031bee7e73f41 data/arsmagicalegacy/am_skills/silence.json -af7e3f4abfc3801e6b7ec6584fd481475403e741 data/arsmagicalegacy/am_skills/silk_touch.json -4965c7756de000669b0771d02d7ba70205806be2 data/arsmagicalegacy/am_skills/slowness.json -c6e78fee0100b4107dab5ed019ac1663ec5782ff data/arsmagicalegacy/am_skills/slow_falling.json -b3447e74e071501d36c16be7f4df9bd2f782e9b7 data/arsmagicalegacy/am_skills/solar.json -1179b3c97bfca51b91b83ddabf0f13887c0109a1 data/arsmagicalegacy/am_skills/storm.json -392f7f427d2f3e0c079fd684d9c146fa1dd63993 data/arsmagicalegacy/am_skills/summon.json -ef0f1a47463ded445e6ed874a0450353b54767c3 data/arsmagicalegacy/am_skills/swift_swim.json -3633773d1a01062cb1d86074a6fc5b4b85f485dc data/arsmagicalegacy/am_skills/target_non_solid.json -4c761e0bcde56278a184a505aba277eb1d79c3b7 data/arsmagicalegacy/am_skills/telekinesis.json -e8e7166cd28a11dd583a3dbf5a78a0cd519ac091 data/arsmagicalegacy/am_skills/temporal_anchor.json -75f20236590358b32a21f96e01811c7fb02abeae data/arsmagicalegacy/am_skills/touch.json -92a6f37cb625ff212ada27cdd57f627fb7b81135 data/arsmagicalegacy/am_skills/transplace.json -666641986aaf263e10563aee41ac6483afb4a5f8 data/arsmagicalegacy/am_skills/true_sight.json -40001621ca2f8c06a63bc76f1dc6a70edb02924c data/arsmagicalegacy/am_skills/velocity.json -26685ca7ec2f49edf5ec75dc34f84d2f7adee2fe data/arsmagicalegacy/am_skills/wall.json -d076e3dc09befe99943c1a301754aded7a386330 data/arsmagicalegacy/am_skills/watery_grave.json -5a72ae50c97442c5010d4f417d74b275c8ad8329 data/arsmagicalegacy/am_skills/water_breathing.json -1764a0117fd9f894feb51bcac89d1d72580e3f2c data/arsmagicalegacy/am_skills/wave.json -b74c0f648c8321425cbed1e8dc8b326767144050 data/arsmagicalegacy/am_skills/wizards_autumn.json -b410bc6d8d0e52c9cbae5b8be73fc1fe1751670e data/arsmagicalegacy/am_skills/zone.json diff --git a/src/main/generated/.cache/b0298feb0277c6027113ec937c32b35a78b338eb b/src/main/generated/.cache/b0298feb0277c6027113ec937c32b35a78b338eb index 43aca4120..ab82b0471 100644 --- a/src/main/generated/.cache/b0298feb0277c6027113ec937c32b35a78b338eb +++ b/src/main/generated/.cache/b0298feb0277c6027113ec937c32b35a78b338eb @@ -1,10 +1,10 @@ -// 1.19 2022-06-09T11:19:28.6441164 AMRituals[arsmagicalegacy] -26d79a0ed5f26e0fade4938c3afaea6a603bd2fb data/arsmagicalegacy/am_rituals/spawn_air_guardian.json -575c24e43a78be35d9707f937f4dc0ba7b848527 data/arsmagicalegacy/am_rituals/spawn_arcane_guardian.json -6bd54246e67227836b5c046d4b081f45b33575c7 data/arsmagicalegacy/am_rituals/spawn_earth_guardian.json -231619758a2fe9fce7e46b8c14508ac6937d3e37 data/arsmagicalegacy/am_rituals/spawn_ender_guardian.json -6f8ff1703f223ab33b133732daaa95d9c73b587f data/arsmagicalegacy/am_rituals/spawn_fire_guardian.json -217c862c89560ecd9d243a75a504ef3f8926047d data/arsmagicalegacy/am_rituals/spawn_ice_guardian.json -b9303f24d0f09c8aa1c4456a6b3a79af5aa03361 data/arsmagicalegacy/am_rituals/spawn_life_guardian.json -3e7b92796a67e17086ec8bf5da6f6bb0b4b7913d data/arsmagicalegacy/am_rituals/spawn_lightning_guardian.json -e407d88f882d2b2859d95e3951e1e1073e4af148 data/arsmagicalegacy/am_rituals/spawn_water_guardian.json +// 1.19.2 2022-08-10T18:25:08.8053909 AMRituals[arsmagicalegacy] +26d79a0ed5f26e0fade4938c3afaea6a603bd2fb data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_air_guardian.json +575c24e43a78be35d9707f937f4dc0ba7b848527 data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_arcane_guardian.json +6bd54246e67227836b5c046d4b081f45b33575c7 data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_earth_guardian.json +231619758a2fe9fce7e46b8c14508ac6937d3e37 data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_ender_guardian.json +6f8ff1703f223ab33b133732daaa95d9c73b587f data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_fire_guardian.json +b7bd4bdef6eeee81efc27160bd45f4c7b5370745 data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_ice_guardian.json +b9303f24d0f09c8aa1c4456a6b3a79af5aa03361 data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_life_guardian.json +3e7b92796a67e17086ec8bf5da6f6bb0b4b7913d data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_lightning_guardian.json +e407d88f882d2b2859d95e3951e1e1073e4af148 data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_water_guardian.json diff --git a/src/main/generated/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/main/generated/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 index 15365b28c..a34ced559 100644 --- a/src/main/generated/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 +++ b/src/main/generated/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -1,2 +1,2 @@ -// 1.19 2022-07-12T20:50:06.904434 Languages: en_us -823fb9f05aaad736f4ef87fa39caa58b85c17207 assets/arsmagicalegacy/lang/en_us.json +// 1.19.2 2022-08-10T18:25:08.8583926 Languages: en_us +d10d2026173338c9f210cad346b8394ac75162fe assets/arsmagicalegacy/lang/en_us.json diff --git a/src/main/generated/.cache/cd090bff9ca93079474b6df48215a8307e531e73 b/src/main/generated/.cache/cd090bff9ca93079474b6df48215a8307e531e73 index 9ef649fe9..fbeb5ddb5 100644 --- a/src/main/generated/.cache/cd090bff9ca93079474b6df48215a8307e531e73 +++ b/src/main/generated/.cache/cd090bff9ca93079474b6df48215a8307e531e73 @@ -1,4 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6651134 Patchouli Book Provider +// 1.19.2 2022-08-10T18:25:08.8523953 Patchouli Book Provider 41c02952860aef72d58b96d2e77ff1d195b09ad5 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/categories/affinities.json d1bc5251356b8f54fbeb5edfea4ea2cb78cea9ed assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/categories/blocks.json 467b16a243fc07f7cf2449953541bb15c81d5c49 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/categories/bosses.json @@ -9,16 +9,16 @@ c0747586349c2f8591e528a95ae5ea84effcde92 assets/arsmagicalegacy/patchouli_books/ 7fdbd99125447b75d0df39e6d3f22feb73780fca assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/categories/modifiers.json aca967d67ad0baa4e7f94f14de5328e3776fe3aa assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/categories/shapes.json 39630825d33881d92a0c592a474a38e46a6901c4 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/affinities.json -e95e79eafb9ece991939496d54b125db25c0ccbd assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/air.json -9064b5c56ac4e3027a30d5903253f5487e4410e1 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/arcane.json -4bc86260fb7012459b437cd52b65802790430372 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/earth.json -f8d913859f8f51cb5acaf6d54d9c2a8d71cb004f assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ender.json -5910b549e27c2cfd27507c1616329d46dc1f6e3e assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/fire.json -e0388ca3059fdd8a3c21430d3b616ca1ff4caa42 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ice.json -0ac187299e7ece7dabab9fde78b4e0ddacd5c1b2 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/life.json -ed71c1619c423fccddd49905d020bf8d38ead9da assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/lightning.json -47061c65953cc25320a6688eb1e8883f410baf78 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/nature.json -e4d4092a09b1abf3cecffd29916a223e2bbc10ec assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/water.json +2f7c454e79e8c7717c9110655ec7a9e8abe4e11d assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/air.json +78530aac36d5503dc35ff7682166f64dee87435b assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/arcane.json +2f68e04d22a85eda76f82148ce856b80550ba015 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/earth.json +97c5fce85d4245680876b4b86c234f5c324a7e3a assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ender.json +69c9cd99ffbc8b981b3f14940c28da2fdac3d43b assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/fire.json +57954a88364a125ea9e4e0d752d93b7cdf3caa47 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ice.json +2ee4c88bc7e7f70376fe2bfca6397bab93e44654 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/life.json +4de2679b8c2175c172d46cf02bc1c59046c9141b assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/lightning.json +6f7fa3b32b621331ed9eaa281b854b9f0de654b5 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/nature.json +2327ba8096fb6f1c2cefdfaef55a6950820ae5ba assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/water.json 027070ceabfe283bee5c61b12a40c6c8cf42181c assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/blocks/black_aurem.json 6833e55062fcf9f40e37ea33d0b4970ec4588c25 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/blocks/celestial_prism.json 599a1e6eea566b109eadfca0889068e016940a21 assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/blocks/flowers.json diff --git a/src/main/generated/.cache/d77929551118acd4db709cfd511c31b0e5dea349 b/src/main/generated/.cache/d77929551118acd4db709cfd511c31b0e5dea349 new file mode 100644 index 000000000..8448b53bf --- /dev/null +++ b/src/main/generated/.cache/d77929551118acd4db709cfd511c31b0e5dea349 @@ -0,0 +1,5 @@ +// 1.19.2 2022-08-10T18:25:08.8064121 AMOcculusTabs +1f7395821c1498e23207c7568f0cf47d902d659b data/arsmagicalegacy/arsmagicalegacy/occulus_tab/affinity.json +68692e421fc9f493e1217cd6da02a179d0a65aec data/arsmagicalegacy/arsmagicalegacy/occulus_tab/defense.json +45bd6124f6b10729ba69ae8d995b9e6b2768ae68 data/arsmagicalegacy/arsmagicalegacy/occulus_tab/offense.json +07c4c6232350de4ae6421fc34583d77134286acd data/arsmagicalegacy/arsmagicalegacy/occulus_tab/utility.json diff --git a/src/main/generated/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/src/main/generated/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 index f02fb3beb..c78791287 100644 --- a/src/main/generated/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 +++ b/src/main/generated/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -1,4 +1,4 @@ -// 1.19 2022-06-09T11:19:28.6241148 Advancements +// 1.19.2 2022-08-10T18:25:08.8184101 Advancements b20cf42741427f9147382d8635724b79c9754ef4 data/arsmagicalegacy/advancements/book/absorption.json d1bfbaf2842a1334b4cb6aa98c7c8d16c23bac1d data/arsmagicalegacy/advancements/book/agility.json 71f9352866ebd22776137ac4351dfa4eb90ac2ba data/arsmagicalegacy/advancements/book/aoe.json diff --git a/src/main/generated/.cache/ed858a761f932c7e621a979ba5024c6adcf7c36e b/src/main/generated/.cache/ed858a761f932c7e621a979ba5024c6adcf7c36e new file mode 100644 index 000000000..11cfaf914 --- /dev/null +++ b/src/main/generated/.cache/ed858a761f932c7e621a979ba5024c6adcf7c36e @@ -0,0 +1,36 @@ +// 1.19.2 2022-08-10T18:25:08.8283908 WorldgenProvider[arsmagicalegacy] +913744cde0aa1c690d5cece87da384c402d5b817 data/arsmagicalegacy/forge/biome_modifier/aum.json +6fc828ccd7f13b3a4bdf2d22384198ae06c5c662 data/arsmagicalegacy/forge/biome_modifier/cerublossom.json +3ffe42b15ecc36319041ae824546031b1772a2f2 data/arsmagicalegacy/forge/biome_modifier/chimerite_ore.json +c4207ae09ffef2900da3d6dca3de1e4c236bcad9 data/arsmagicalegacy/forge/biome_modifier/desert_nova.json +88048a614874feefb27e052c171662d9282892d9 data/arsmagicalegacy/forge/biome_modifier/dryad.json +242aac4bbc662d4a0912b43792e9669f7994f305 data/arsmagicalegacy/forge/biome_modifier/liquid_essence_lake.json +53473283d03e7c154f2574862f1f76d1d4596239 data/arsmagicalegacy/forge/biome_modifier/tarma_root.json +c1941f8ca88a42d234d6df4809adef201572d3d1 data/arsmagicalegacy/forge/biome_modifier/topaz_extra_ore.json +9ca26ce7ccd126f8af41cfca7a015bc27a1a0528 data/arsmagicalegacy/forge/biome_modifier/topaz_ore.json +4953ae5afc4229494dc2d33e80e29ace1dd12512 data/arsmagicalegacy/forge/biome_modifier/vinteum_ore.json +f342c89241aa78c78e3308e8ac715b04c0973d0f data/arsmagicalegacy/forge/biome_modifier/wakebloom.json +85784e34d6cf7efda968d6ee34ea3559bcfbb6e2 data/arsmagicalegacy/forge/biome_modifier/witchwood_tree.json +e8d8672d262cee7e4a5a42add810c314519e2f29 data/arsmagicalegacy/worldgen/configured_feature/aum.json +f8c98dd2352ef6a761741e1b05a83675cd8ec551 data/arsmagicalegacy/worldgen/configured_feature/cerublossom.json +48f8fae1e92ecc3f664303d2aa56a3a60ef773c0 data/arsmagicalegacy/worldgen/configured_feature/chimerite_ore.json +e52f37e1118a54b9b55b1e3a59b12b87acd991f3 data/arsmagicalegacy/worldgen/configured_feature/desert_nova.json +f95e94e54b6531d9536a8ea5ee9ea4818d05e155 data/arsmagicalegacy/worldgen/configured_feature/liquid_essence_lake.json +0c2e649c11ae1f63281126e84b3a04c89f0aa1e3 data/arsmagicalegacy/worldgen/configured_feature/tarma_root.json +1251393362b542a684896a212663b287dde5a392 data/arsmagicalegacy/worldgen/configured_feature/topaz_ore.json +dcc4cc40b7a103ca257c764792c244b9e8002643 data/arsmagicalegacy/worldgen/configured_feature/topaz_ore_extra.json +efb91ae041f3bb32ea9bf67a052bdf131ae329ee data/arsmagicalegacy/worldgen/configured_feature/vinteum_ore.json +d4ca44149f7317f2ec4dea91ccb474d1121fc6a2 data/arsmagicalegacy/worldgen/configured_feature/wakebloom.json +5830aaf963a429abf1e822e54d982c0c4a95ac2a data/arsmagicalegacy/worldgen/configured_feature/witchwood_tree.json +241db63bb33b2f6e28fe3758b996f9d0829f5e82 data/arsmagicalegacy/worldgen/placed_feature/aum.json +c234d0eac3c4af141dc39eeff56148dcdb3ad980 data/arsmagicalegacy/worldgen/placed_feature/cerublossom.json +60cab01fd869d0bfdd1c5e4d65e08ba920472963 data/arsmagicalegacy/worldgen/placed_feature/chimerite_ore.json +3ca10e16d8d073d9b618213cca09afc3e7757c90 data/arsmagicalegacy/worldgen/placed_feature/desert_nova.json +0d1e6fc579fc730965957ed6846fcdea7e56c5bc data/arsmagicalegacy/worldgen/placed_feature/liquid_essence_lake.json +65d0ad6821b004dc947bde9a524c5df3ea36fa09 data/arsmagicalegacy/worldgen/placed_feature/tarma_root.json +4281f42937358fe1c43d743071d7c1944d764bdf data/arsmagicalegacy/worldgen/placed_feature/topaz_ore.json +7d3ceb0b844cc96305fc473601e1f9a9f8b21efc data/arsmagicalegacy/worldgen/placed_feature/topaz_ore_extra.json +8e598736a403e9a34ba46afccacea6da224a2555 data/arsmagicalegacy/worldgen/placed_feature/trees_witchwood.json +225fc1159c64815fa557c6ee80e583a839c80bba data/arsmagicalegacy/worldgen/placed_feature/vinteum_ore.json +fbb8c63ab0a4f3ee220c089c7a6f9c180ad6ee06 data/arsmagicalegacy/worldgen/placed_feature/wakebloom.json +b544f4ecebcac7cf3cc770deb343a0e63e1ce82b data/arsmagicalegacy/worldgen/placed_feature/witchwood_tree.json diff --git a/src/main/generated/.cache/eec194a88acc4b69ee022ff26153ceb1b8b9139a b/src/main/generated/.cache/eec194a88acc4b69ee022ff26153ceb1b8b9139a index dc58a54b8..6d9ddf1af 100644 --- a/src/main/generated/.cache/eec194a88acc4b69ee022ff26153ceb1b8b9139a +++ b/src/main/generated/.cache/eec194a88acc4b69ee022ff26153ceb1b8b9139a @@ -1 +1 @@ -// 1.19 2022-06-09T11:19:28.6351123 Tags for minecraft:fluid +// 1.19.2 2022-08-10T18:25:08.8453934 Tags for minecraft:fluid diff --git a/src/main/generated/.cache/f1a70f0e7119518e28c5bc73aa0a338f8a211540 b/src/main/generated/.cache/f1a70f0e7119518e28c5bc73aa0a338f8a211540 index 0a0bb335b..373b3e743 100644 --- a/src/main/generated/.cache/f1a70f0e7119518e28c5bc73aa0a338f8a211540 +++ b/src/main/generated/.cache/f1a70f0e7119518e28c5bc73aa0a338f8a211540 @@ -1,7 +1,7 @@ -// 1.19 2022-07-16T15:18:20.1991428 Spell Part Data[arsmagicalegacy] +// 1.19.2 2022-08-13T13:31:15.3551092 Spell Part Data[arsmagicalegacy] bb78cc8deb18c5cd048556489902e821f7a5513b data/arsmagicalegacy/spell_parts/absorption.json f17957040287c2cec54430f265f334061e8a2ae2 data/arsmagicalegacy/spell_parts/agility.json -b26acced9049c349da48304406fb08316b5b61a5 data/arsmagicalegacy/spell_parts/aoe.json +470eb6b35d9c8cf60ff2bdb7d6ca74866c756421 data/arsmagicalegacy/spell_parts/aoe.json e40f7f6a30e4241f0b458dad93e5c7d7cce26d46 data/arsmagicalegacy/spell_parts/astral_distortion.json bbc07d70c21a2b33593ef54095f85a4ecf075883 data/arsmagicalegacy/spell_parts/attract.json aec04c5389ee0349be9fb29b98a7de95b873b40b data/arsmagicalegacy/spell_parts/banish_rain.json @@ -13,10 +13,10 @@ aec04c5389ee0349be9fb29b98a7de95b873b40b data/arsmagicalegacy/spell_parts/banish 56c4a5b80d5fd5a2aae8d9baf65253ab3841a93a data/arsmagicalegacy/spell_parts/chain.json 10fcb6f9f60b9151f548e95ebc90213451427046 data/arsmagicalegacy/spell_parts/channel.json 004e283a279e33da1a591e5a103f7935b6163703 data/arsmagicalegacy/spell_parts/charm.json -f7321ab3b23b5f5b627c48966acb645fc5b6e20e data/arsmagicalegacy/spell_parts/contingency_damage.json +19007a309d369e0b7ec23acfbcf2464080f3e038 data/arsmagicalegacy/spell_parts/contingency_damage.json df08a70376b8c108928dabcfc0aecf3eff23a3da data/arsmagicalegacy/spell_parts/contingency_death.json -122e5a2cf020c757ba4558cc0388db4a6dd12c96 data/arsmagicalegacy/spell_parts/contingency_fall.json -87259e661d724cb0d5425fab65e6f232c1cb7d48 data/arsmagicalegacy/spell_parts/contingency_fire.json +b7983c3d57e088f220c4a32da30fbeebe9666cf9 data/arsmagicalegacy/spell_parts/contingency_fall.json +f8ec9b0c9e12e801ad41833520dfc28054f965cc data/arsmagicalegacy/spell_parts/contingency_fire.json 5bb0fb80e86430691bb58353ee2e3d8b4ba9dc00 data/arsmagicalegacy/spell_parts/contingency_health.json f78963f170298c742c12c1fa91a87f6bc7e6738a data/arsmagicalegacy/spell_parts/create_water.json 85a4c897b00f8d15180312aedb230022f373a2ca data/arsmagicalegacy/spell_parts/damage.json @@ -103,9 +103,9 @@ dd14e22a067fdbbcc3115373efadc302c84a8c5c data/arsmagicalegacy/spell_parts/shrink 09eac25ebffde3c76f3e267513b8776bb1e6db17 data/arsmagicalegacy/spell_parts/transplace.json 00060a73af9b29f065c8b0c6972fba5ef94017bc data/arsmagicalegacy/spell_parts/true_sight.json eee897769f263e6ada91d81fb2f872736973b35a data/arsmagicalegacy/spell_parts/velocity.json -aaa3eb9814cc2946aea390e12429e52b30241887 data/arsmagicalegacy/spell_parts/wall.json +1ed3793d630981d7965c90976acc010f32bfa8cc data/arsmagicalegacy/spell_parts/wall.json cf231b1a9d49397d328fdc52009332091559bf7a data/arsmagicalegacy/spell_parts/watery_grave.json 2583c6cd3c1e56d9f04383ea2690af363e554183 data/arsmagicalegacy/spell_parts/water_breathing.json -b5d117ff3886c4c3e699658511c8eb2c3f10ffc3 data/arsmagicalegacy/spell_parts/wave.json +dfe3c23721a2d9623ff815be71f3a8a1ed3cfc41 data/arsmagicalegacy/spell_parts/wave.json 77a2183592a4ce327018726ec74c69d1080ff9e1 data/arsmagicalegacy/spell_parts/wizards_autumn.json 706ccc9d4b8167ff4c3cf9029775dc2d1fcb1347 data/arsmagicalegacy/spell_parts/zone.json diff --git a/src/main/generated/.cache/f22ca47c13fdf7441bc2ed81d49b4db199e05b79 b/src/main/generated/.cache/f22ca47c13fdf7441bc2ed81d49b4db199e05b79 index 16caabf5c..9ce81caa9 100644 --- a/src/main/generated/.cache/f22ca47c13fdf7441bc2ed81d49b4db199e05b79 +++ b/src/main/generated/.cache/f22ca47c13fdf7441bc2ed81d49b4db199e05b79 @@ -1,4 +1,4 @@ -// 1.19 2022-07-16T12:36:55.6061725 Block States: arsmagicalegacy +// 1.19.2 2022-08-13T18:58:25.741619 Block States: arsmagicalegacy 9ff96b56b738b4ea85e1140167a077e69db0178f assets/arsmagicalegacy/blockstates/altar_core.json 3dff9e1ec59415779195d2abfa9f07bc17b428a1 assets/arsmagicalegacy/blockstates/altar_view.json beb7ab7de7f6ae890282ef38e36400685d083d78 assets/arsmagicalegacy/blockstates/aum.json @@ -13,11 +13,14 @@ a8a47ba67e51620f00f1b30264127ca623befab6 assets/arsmagicalegacy/blockstates/deep c3a58e44c492a0628efe6a8247b330cdef358886 assets/arsmagicalegacy/blockstates/deepslate_vinteum_ore.json 2b8a5ca05f8b1618544a0b4b93112dd9e803e01f assets/arsmagicalegacy/blockstates/desert_nova.json 41b38daf530d6e2699de3e77d6dc7cf796d6641d assets/arsmagicalegacy/blockstates/gold_inlay.json +de551ea1a60d3fe1004d0b8768519cc8f9dd551f assets/arsmagicalegacy/blockstates/inscription_table.json 7340a1466afec6385b0b91134414ec740e63107d assets/arsmagicalegacy/blockstates/iron_inlay.json +8b41ba7ee1d20724ac2582cbf0bc2f5a5ccf552f assets/arsmagicalegacy/blockstates/liquid_essence.json 1a7daa060ad204c8f6414ba8ec5753894a487384 assets/arsmagicalegacy/blockstates/magic_wall.json 7cae732aa1a031540d4d291df27eb98115c8bac5 assets/arsmagicalegacy/blockstates/moonstone_block.json b7adcf17a7e4c5b1df798c2b817f13b8846a4f5a assets/arsmagicalegacy/blockstates/moonstone_ore.json b61c8ba189d1e0e26c2e329a6d859a02ce1c2ab8 assets/arsmagicalegacy/blockstates/obelisk.json +f5b0ca45bc530e0a7dc45235befd62c679dea925 assets/arsmagicalegacy/blockstates/occulus.json b2a87a378e81583ca59905000831a8bc6b3317d8 assets/arsmagicalegacy/blockstates/potted_aum.json 750e200e72f8c92bdee038f4115c42d3c206a4df assets/arsmagicalegacy/blockstates/potted_cerublossom.json 36cce7a5c9b0fd78f43cb15a7734505f7cecab7a assets/arsmagicalegacy/blockstates/potted_desert_nova.json @@ -74,6 +77,7 @@ e3a8dc0483c6edd6321063b2fb1c0c90ccd5c521 assets/arsmagicalegacy/models/block/gol 78b62ccdd78980899e5e46c42a1d45b4110af148 assets/arsmagicalegacy/models/block/iron_inlay_corner.json 0e0494bf163016af4825f84ca85d4fc905fbc8bf assets/arsmagicalegacy/models/block/iron_inlay_raised_ne.json 21932c8e246fe644b49f2856eb16e27a7840d9a7 assets/arsmagicalegacy/models/block/iron_inlay_raised_sw.json +20cf8c4fd53b517b1d5fd0727e0da3d06473f150 assets/arsmagicalegacy/models/block/liquid_essence.json 473f1e7e192c4cb45e6bf4de44f822d82cfd8978 assets/arsmagicalegacy/models/block/magic_wall.json c9879977d87892fecdebebd013240ac3e2e053c6 assets/arsmagicalegacy/models/block/moonstone_block.json 778c9d6a21bf9053f451dc0252597b7722870cfd assets/arsmagicalegacy/models/block/moonstone_ore.json diff --git a/src/main/generated/.cache/f50c83242c37d443788ef8f88d6ccdab815cef9f b/src/main/generated/.cache/f50c83242c37d443788ef8f88d6ccdab815cef9f index 8ac81953c..186fb1635 100644 --- a/src/main/generated/.cache/f50c83242c37d443788ef8f88d6ccdab815cef9f +++ b/src/main/generated/.cache/f50c83242c37d443788ef8f88d6ccdab815cef9f @@ -1,71 +1,74 @@ -// 1.19 2022-07-16T15:18:20.2041397 Altar Structure Materials[arsmagicalegacy] -601860506fd5da5c3c92c3b5daef6e4146b7c7b2 data/arsmagicalegacy/altar/cap/chimerite.json -1427f268fd1891e226bf077b5f834a90aa78fa43 data/arsmagicalegacy/altar/cap/coal.json -bcc8effb27ceab1f0b877717b474b889b1ebdd44 data/arsmagicalegacy/altar/cap/copper.json -fe5d9d76a4ba9585e470f69710898aabb3b677ae data/arsmagicalegacy/altar/cap/diamond.json -83a449a69e375c7e59405e541372d3d5bfadf6ca data/arsmagicalegacy/altar/cap/emerald.json -173bf61d9066ccd5ee361025689a592d73b3c58a data/arsmagicalegacy/altar/cap/exposed_copper.json -7ca8eb2173f89263c7dd949b3556ab8d032e4b35 data/arsmagicalegacy/altar/cap/glass.json -dcc0dd60784484a9c96fb5d9d90d011ed4ec2f6d data/arsmagicalegacy/altar/cap/gold.json -3def04e82b8bd1486b7b365c2b034b17f3e4bd9e data/arsmagicalegacy/altar/cap/iron.json -a20bbd5415c9ef91790f1f875e04bf6009148832 data/arsmagicalegacy/altar/cap/lapis.json -49aa69983b190921415b199467b18d0c9fc028d1 data/arsmagicalegacy/altar/cap/netherite.json -ec60a3e9dfc0c63fd7564980b4797ace513f6927 data/arsmagicalegacy/altar/cap/oxidized_copper.json -4a60d27f5b553d0d50f35742a9cc7dbdcc17a0b0 data/arsmagicalegacy/altar/cap/redstone.json -d56db3fb5b2421a4a87c89eb0558399780e856e5 data/arsmagicalegacy/altar/cap/topaz.json -846e2db4f6a02a47b291ee5203a50e390a74e70d data/arsmagicalegacy/altar/cap/vinteum.json -5d0865ab2cf97fb68480aac9de2c11f3ad04e47e data/arsmagicalegacy/altar/cap/waxed_copper.json -1cd765f2e262b99728a70bc94081e9f228333929 data/arsmagicalegacy/altar/cap/waxed_exposed_copper.json -a6488843b2661ed933a18b98db449684f78a779d data/arsmagicalegacy/altar/cap/waxed_oxidized_copper.json -34b423c4518093d490972909bf8d0d59135eadd1 data/arsmagicalegacy/altar/cap/waxed_weathered_copper.json -e72ff0d9a4a584e6933926f8656a5235bde8f179 data/arsmagicalegacy/altar/cap/weathered_copper.json -060d5ce1735b4f3dbc06b411320c3df0f16f8ce8 data/arsmagicalegacy/altar/structure/acacia_planks.json -8996c1578c748781ae089208cc81ecdb146555c4 data/arsmagicalegacy/altar/structure/andesite.json -7545f2cd7bbeab15f2b2dedb753a599482b1e418 data/arsmagicalegacy/altar/structure/birch_planks.json -ad1f5fe47b2d4f1b59aaa11a66bdd6135683458e data/arsmagicalegacy/altar/structure/blackstone.json -3b9b3bb68ce2187b9d3d9cb4d773375fab12f306 data/arsmagicalegacy/altar/structure/bricks.json -a773e8233c40d3d5eda257ad4f9769b4025d4469 data/arsmagicalegacy/altar/structure/cobbled_deepslate.json -cda92f0a0211caf0006ed93a42eb8fc21d91b505 data/arsmagicalegacy/altar/structure/cobblestone.json -d405b54dd8836ab42cc0e8c8e12b6d8a2c40ecbd data/arsmagicalegacy/altar/structure/crimson_planks.json -e0251f4c03414e777b23eacbb59f8a4a7f1f74bd data/arsmagicalegacy/altar/structure/cut_copper.json -23a66fc98b30f8f68b3d5fd01ad491eba288a91d data/arsmagicalegacy/altar/structure/dark_oak_planks.json -77f32b28d8c1031d6a1c19295e5fffc1c0748d98 data/arsmagicalegacy/altar/structure/dark_prismarine.json -f95ca85a5f7cb6b10c03c8ce67019d85c645ed96 data/arsmagicalegacy/altar/structure/deepslate_bricks.json -e472e20c6409208ab2abdf66d3da20771d6ab8b6 data/arsmagicalegacy/altar/structure/deepslate_tiles.json -361d19bef290cc6fd2bda3ca75ff62953a85933b data/arsmagicalegacy/altar/structure/diorite.json -6e1667680507646e669e0136f38969c9f0daf784 data/arsmagicalegacy/altar/structure/end_stone_bricks.json -3a50587c6a110a3ce84b7639068ae4e7d7dcc909 data/arsmagicalegacy/altar/structure/exposed_cut_copper.json -429beb4281b87a86ebe8a24ab2dbdc37dbeb8ef1 data/arsmagicalegacy/altar/structure/granite.json -1ad8789d7628ee78969171ae6de656900a2f79ce data/arsmagicalegacy/altar/structure/jungle_planks.json -6642c856c945fa29ce7b39ea463bb35931945701 data/arsmagicalegacy/altar/structure/mangrove_planks.json -27435c4ca44c989fd7fe1b3d2c5ecfaf35c84ad0 data/arsmagicalegacy/altar/structure/mossy_cobblestone.json -5e099d0c9558a74ea776d11670720d43418c97eb data/arsmagicalegacy/altar/structure/mossy_stone_bricks.json -3f76ba3846033815e4d9a480b6fcae68088c9c4a data/arsmagicalegacy/altar/structure/mud_bricks.json -bdba583508c7e7649839d793d91311892ce6ae35 data/arsmagicalegacy/altar/structure/nether_bricks.json -6e6b1eb11cabb2e5924aaecf9e4dc28dca44d524 data/arsmagicalegacy/altar/structure/oak_planks.json -b5385e2afaa4b256db3a27d7448e7780160291ba data/arsmagicalegacy/altar/structure/oxidized_cut_copper.json -34ac1c65a6f3a4c18288b3302a094af655553157 data/arsmagicalegacy/altar/structure/polished_andesite.json -42f23ae796dab50868419ea629abaa7161eb17e3 data/arsmagicalegacy/altar/structure/polished_blackstone.json -65804d5a9adde48fa095ce12524c63c50635c1af data/arsmagicalegacy/altar/structure/polished_blackstone_bricks.json -c569deb60d85f1a77b3b8c11b80c285a7908b376 data/arsmagicalegacy/altar/structure/polished_deepslate.json -2fb9bf60d4ff9c7171c0a8073b1871ca3100fbc3 data/arsmagicalegacy/altar/structure/polished_diorite.json -2f6a7bc31df2e14dbffde46c51abf11552f79fb2 data/arsmagicalegacy/altar/structure/polished_granite.json -d2626946439d20b30f6c1f14a9bd9789b43b3042 data/arsmagicalegacy/altar/structure/prismarine.json -baa56a847a33fa6f2720de83b2951f819519be76 data/arsmagicalegacy/altar/structure/prismarine_bricks.json -38f8aabc2fbd08e2e2821d5d7d4cddf6f9a98e74 data/arsmagicalegacy/altar/structure/purpur_block.json -3e64aba8892696e84912cf47c1dee6d3e32816f4 data/arsmagicalegacy/altar/structure/quartz_block.json -e12504f08375d54e68188e56913d223cddba775c data/arsmagicalegacy/altar/structure/red_nether_bricks.json -d93b964525dc2d508c4594b69fa261097403e6d6 data/arsmagicalegacy/altar/structure/red_sandstone.json -3958eebe2533d0e5c8a4bd098c55e3d97ffc89c6 data/arsmagicalegacy/altar/structure/sandstone.json -0515de8135d02ca0b20d1ac6c7bca3b4b80a58cf data/arsmagicalegacy/altar/structure/smooth_quartz.json -29103f0cf21c41a64d9879356821009b58df4c4b data/arsmagicalegacy/altar/structure/smooth_red_sandstone.json -6403c37fc9e11126e6cc5fe984d61e7f3769510f data/arsmagicalegacy/altar/structure/smooth_sandstone.json -3ad12701b4b495929f092ee0776b6412bd1f0250 data/arsmagicalegacy/altar/structure/spruce_planks.json -d85e8cde738154c3aa818c3943628ff7e9906c32 data/arsmagicalegacy/altar/structure/stone_bricks.json -298e27ad9e1659a9e9a404a605cec58a37e8136c data/arsmagicalegacy/altar/structure/warped_planks.json -b6a984c0a67c578e62b9d27ac4408069cdcbda55 data/arsmagicalegacy/altar/structure/waxed_cut_copper.json -c3af16b85907143be8dce021154beaf7f27e8e10 data/arsmagicalegacy/altar/structure/waxed_exposed_cut_copper.json -fb8d2dd96534e401cd034581195c78b5110ae063 data/arsmagicalegacy/altar/structure/waxed_oxidized_cut_copper.json -bd9b01de7b91cc477aa2b62b35ef419c68efc95f data/arsmagicalegacy/altar/structure/waxed_weathered_cut_copper.json -f3f8a3e52ba31b758e8d59023257b6c4a8e0e2ba data/arsmagicalegacy/altar/structure/weathered_cut_copper.json -4bdddbc0c9f5569cb7d4bee4e1e35af8cbdf97e1 data/arsmagicalegacy/altar/structure/witchwood_planks.json +// 1.19.2 2022-08-10T18:25:08.8083886 Altar Structure Materials[arsmagicalegacy] +601860506fd5da5c3c92c3b5daef6e4146b7c7b2 data/arsmagicalegacy/arsmagicalegacy/altar/cap/chimerite.json +1427f268fd1891e226bf077b5f834a90aa78fa43 data/arsmagicalegacy/arsmagicalegacy/altar/cap/coal.json +bcc8effb27ceab1f0b877717b474b889b1ebdd44 data/arsmagicalegacy/arsmagicalegacy/altar/cap/copper.json +fe5d9d76a4ba9585e470f69710898aabb3b677ae data/arsmagicalegacy/arsmagicalegacy/altar/cap/diamond.json +83a449a69e375c7e59405e541372d3d5bfadf6ca data/arsmagicalegacy/arsmagicalegacy/altar/cap/emerald.json +173bf61d9066ccd5ee361025689a592d73b3c58a data/arsmagicalegacy/arsmagicalegacy/altar/cap/exposed_copper.json +7ca8eb2173f89263c7dd949b3556ab8d032e4b35 data/arsmagicalegacy/arsmagicalegacy/altar/cap/glass.json +dcc0dd60784484a9c96fb5d9d90d011ed4ec2f6d data/arsmagicalegacy/arsmagicalegacy/altar/cap/gold.json +3def04e82b8bd1486b7b365c2b034b17f3e4bd9e data/arsmagicalegacy/arsmagicalegacy/altar/cap/iron.json +a20bbd5415c9ef91790f1f875e04bf6009148832 data/arsmagicalegacy/arsmagicalegacy/altar/cap/lapis.json +b8d527ee99a136e9f7ae389f56d672051b8faf09 data/arsmagicalegacy/arsmagicalegacy/altar/cap/moonstone.json +49aa69983b190921415b199467b18d0c9fc028d1 data/arsmagicalegacy/arsmagicalegacy/altar/cap/netherite.json +ec60a3e9dfc0c63fd7564980b4797ace513f6927 data/arsmagicalegacy/arsmagicalegacy/altar/cap/oxidized_copper.json +4a60d27f5b553d0d50f35742a9cc7dbdcc17a0b0 data/arsmagicalegacy/arsmagicalegacy/altar/cap/redstone.json +8b73db73e8f1a4553c66dde2549494a9c84c5edd data/arsmagicalegacy/arsmagicalegacy/altar/cap/sunstone.json +d56db3fb5b2421a4a87c89eb0558399780e856e5 data/arsmagicalegacy/arsmagicalegacy/altar/cap/topaz.json +846e2db4f6a02a47b291ee5203a50e390a74e70d data/arsmagicalegacy/arsmagicalegacy/altar/cap/vinteum.json +5d0865ab2cf97fb68480aac9de2c11f3ad04e47e data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_copper.json +1cd765f2e262b99728a70bc94081e9f228333929 data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_exposed_copper.json +a6488843b2661ed933a18b98db449684f78a779d data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_oxidized_copper.json +34b423c4518093d490972909bf8d0d59135eadd1 data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_weathered_copper.json +e72ff0d9a4a584e6933926f8656a5235bde8f179 data/arsmagicalegacy/arsmagicalegacy/altar/cap/weathered_copper.json +060d5ce1735b4f3dbc06b411320c3df0f16f8ce8 data/arsmagicalegacy/arsmagicalegacy/altar/structure/acacia_planks.json +8996c1578c748781ae089208cc81ecdb146555c4 data/arsmagicalegacy/arsmagicalegacy/altar/structure/andesite.json +7545f2cd7bbeab15f2b2dedb753a599482b1e418 data/arsmagicalegacy/arsmagicalegacy/altar/structure/birch_planks.json +ad1f5fe47b2d4f1b59aaa11a66bdd6135683458e data/arsmagicalegacy/arsmagicalegacy/altar/structure/blackstone.json +3b9b3bb68ce2187b9d3d9cb4d773375fab12f306 data/arsmagicalegacy/arsmagicalegacy/altar/structure/bricks.json +a773e8233c40d3d5eda257ad4f9769b4025d4469 data/arsmagicalegacy/arsmagicalegacy/altar/structure/cobbled_deepslate.json +cda92f0a0211caf0006ed93a42eb8fc21d91b505 data/arsmagicalegacy/arsmagicalegacy/altar/structure/cobblestone.json +d405b54dd8836ab42cc0e8c8e12b6d8a2c40ecbd data/arsmagicalegacy/arsmagicalegacy/altar/structure/crimson_planks.json +e0251f4c03414e777b23eacbb59f8a4a7f1f74bd data/arsmagicalegacy/arsmagicalegacy/altar/structure/cut_copper.json +23a66fc98b30f8f68b3d5fd01ad491eba288a91d data/arsmagicalegacy/arsmagicalegacy/altar/structure/dark_oak_planks.json +77f32b28d8c1031d6a1c19295e5fffc1c0748d98 data/arsmagicalegacy/arsmagicalegacy/altar/structure/dark_prismarine.json +f95ca85a5f7cb6b10c03c8ce67019d85c645ed96 data/arsmagicalegacy/arsmagicalegacy/altar/structure/deepslate_bricks.json +e472e20c6409208ab2abdf66d3da20771d6ab8b6 data/arsmagicalegacy/arsmagicalegacy/altar/structure/deepslate_tiles.json +361d19bef290cc6fd2bda3ca75ff62953a85933b data/arsmagicalegacy/arsmagicalegacy/altar/structure/diorite.json +6e1667680507646e669e0136f38969c9f0daf784 data/arsmagicalegacy/arsmagicalegacy/altar/structure/end_stone_bricks.json +3a50587c6a110a3ce84b7639068ae4e7d7dcc909 data/arsmagicalegacy/arsmagicalegacy/altar/structure/exposed_cut_copper.json +429beb4281b87a86ebe8a24ab2dbdc37dbeb8ef1 data/arsmagicalegacy/arsmagicalegacy/altar/structure/granite.json +1ad8789d7628ee78969171ae6de656900a2f79ce data/arsmagicalegacy/arsmagicalegacy/altar/structure/jungle_planks.json +6642c856c945fa29ce7b39ea463bb35931945701 data/arsmagicalegacy/arsmagicalegacy/altar/structure/mangrove_planks.json +27435c4ca44c989fd7fe1b3d2c5ecfaf35c84ad0 data/arsmagicalegacy/arsmagicalegacy/altar/structure/mossy_cobblestone.json +5e099d0c9558a74ea776d11670720d43418c97eb data/arsmagicalegacy/arsmagicalegacy/altar/structure/mossy_stone_bricks.json +3f76ba3846033815e4d9a480b6fcae68088c9c4a data/arsmagicalegacy/arsmagicalegacy/altar/structure/mud_bricks.json +bdba583508c7e7649839d793d91311892ce6ae35 data/arsmagicalegacy/arsmagicalegacy/altar/structure/nether_bricks.json +6e6b1eb11cabb2e5924aaecf9e4dc28dca44d524 data/arsmagicalegacy/arsmagicalegacy/altar/structure/oak_planks.json +b5385e2afaa4b256db3a27d7448e7780160291ba data/arsmagicalegacy/arsmagicalegacy/altar/structure/oxidized_cut_copper.json +34ac1c65a6f3a4c18288b3302a094af655553157 data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_andesite.json +42f23ae796dab50868419ea629abaa7161eb17e3 data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_blackstone.json +65804d5a9adde48fa095ce12524c63c50635c1af data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_blackstone_bricks.json +c569deb60d85f1a77b3b8c11b80c285a7908b376 data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_deepslate.json +2fb9bf60d4ff9c7171c0a8073b1871ca3100fbc3 data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_diorite.json +2f6a7bc31df2e14dbffde46c51abf11552f79fb2 data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_granite.json +d2626946439d20b30f6c1f14a9bd9789b43b3042 data/arsmagicalegacy/arsmagicalegacy/altar/structure/prismarine.json +baa56a847a33fa6f2720de83b2951f819519be76 data/arsmagicalegacy/arsmagicalegacy/altar/structure/prismarine_bricks.json +38f8aabc2fbd08e2e2821d5d7d4cddf6f9a98e74 data/arsmagicalegacy/arsmagicalegacy/altar/structure/purpur_block.json +3e64aba8892696e84912cf47c1dee6d3e32816f4 data/arsmagicalegacy/arsmagicalegacy/altar/structure/quartz_block.json +e12504f08375d54e68188e56913d223cddba775c data/arsmagicalegacy/arsmagicalegacy/altar/structure/red_nether_bricks.json +d93b964525dc2d508c4594b69fa261097403e6d6 data/arsmagicalegacy/arsmagicalegacy/altar/structure/red_sandstone.json +3958eebe2533d0e5c8a4bd098c55e3d97ffc89c6 data/arsmagicalegacy/arsmagicalegacy/altar/structure/sandstone.json +0515de8135d02ca0b20d1ac6c7bca3b4b80a58cf data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_quartz.json +29103f0cf21c41a64d9879356821009b58df4c4b data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_red_sandstone.json +6403c37fc9e11126e6cc5fe984d61e7f3769510f data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_sandstone.json +3ad12701b4b495929f092ee0776b6412bd1f0250 data/arsmagicalegacy/arsmagicalegacy/altar/structure/spruce_planks.json +12896e62508bb1f823cc6a3cdb4b65c4d719be82 data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone.json +d85e8cde738154c3aa818c3943628ff7e9906c32 data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone_bricks.json +298e27ad9e1659a9e9a404a605cec58a37e8136c data/arsmagicalegacy/arsmagicalegacy/altar/structure/warped_planks.json +b6a984c0a67c578e62b9d27ac4408069cdcbda55 data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_cut_copper.json +c3af16b85907143be8dce021154beaf7f27e8e10 data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_exposed_cut_copper.json +fb8d2dd96534e401cd034581195c78b5110ae063 data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_oxidized_cut_copper.json +bd9b01de7b91cc477aa2b62b35ef419c68efc95f data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_weathered_cut_copper.json +f3f8a3e52ba31b758e8d59023257b6c4a8e0e2ba data/arsmagicalegacy/arsmagicalegacy/altar/structure/weathered_cut_copper.json +4bdddbc0c9f5569cb7d4bee4e1e35af8cbdf97e1 data/arsmagicalegacy/arsmagicalegacy/altar/structure/witchwood_planks.json diff --git a/src/main/generated/.cache/fcc0d197db45e404a8bc894ca09c0611e5a65cab b/src/main/generated/.cache/fcc0d197db45e404a8bc894ca09c0611e5a65cab index f6097caa4..740739d99 100644 --- a/src/main/generated/.cache/fcc0d197db45e404a8bc894ca09c0611e5a65cab +++ b/src/main/generated/.cache/fcc0d197db45e404a8bc894ca09c0611e5a65cab @@ -1 +1 @@ -// 1.19 2022-06-09T11:19:28.6551155 Tags for minecraft:entity_type +// 1.19.2 2022-08-10T18:25:08.8013897 Tags for minecraft:entity_type diff --git a/src/main/generated/.cache/ffeb12d8d0aeb162044956ba28fb50b2d456c99c b/src/main/generated/.cache/ffeb12d8d0aeb162044956ba28fb50b2d456c99c index 530b46612..9a5b2637b 100644 --- a/src/main/generated/.cache/ffeb12d8d0aeb162044956ba28fb50b2d456c99c +++ b/src/main/generated/.cache/ffeb12d8d0aeb162044956ba28fb50b2d456c99c @@ -1,16 +1,16 @@ -// 1.19 2022-06-09T11:19:28.6471128 Spell Transformations[arsmagicalegacy] -efe505da376545e3a481a208b6111b6d48bf1117 data/arsmagicalegacy/spell_transformations/clay_to_sand_drought.json -096374889403918c7c774116ca7f750fd1f851db data/arsmagicalegacy/spell_transformations/deepslate_bricks_to_cracked_deepslate_bricks_drought.json -7c2249a3daff05ff48330fc684c65e08cf61798e data/arsmagicalegacy/spell_transformations/deepslate_tiles_to_cracked_deepslate_tiles_drought.json -04142774f5a3166524e08648d2fa3073d2fc83d5 data/arsmagicalegacy/spell_transformations/dirt_to_sand_drought.json -dbe1af14404356d5a812f8fd4cd7a661e4075c5d data/arsmagicalegacy/spell_transformations/gravel_to_sand_drought.json -2300c4990f039c850510f5bf880f385c177d2599 data/arsmagicalegacy/spell_transformations/infested_stone_bricks_to_infested_cracked_stone_bricks_drought.json -cefffbe907fab8fc814673397b18b053ecdf1414 data/arsmagicalegacy/spell_transformations/infested_stone_to_infested_cobblestone_drought.json -d8ed4f839faf00bc4f4a09635136af48e2fe024e data/arsmagicalegacy/spell_transformations/nether_bricks_to_cracked_nether_bricks_drought.json -7434422e647c9be4c0dcd6b667914ea71473e4e0 data/arsmagicalegacy/spell_transformations/polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought.json -74e8eede218d3ebc88e946edb1e32678da9e8517 data/arsmagicalegacy/spell_transformations/quartz_block_to_smooth_quartz_drought.json -87cf87cf1509307b2141e8037d89081fb6686c7d data/arsmagicalegacy/spell_transformations/red_sandstone_to_smooth_red_sandstone_drought.json -bea64825bd9a7fd3c9a9b499096f64266d136900 data/arsmagicalegacy/spell_transformations/sandstone_to_smooth_sandstone_drought.json -aa993fa48a16571e85f04bee7f314c03328b0e50 data/arsmagicalegacy/spell_transformations/small_flowers_to_dead_bush_drought.json -638694a7c59b55f159c492a99a3e7c6373c82143 data/arsmagicalegacy/spell_transformations/stone_bricks_to_cracked_stone_bricks_drought.json -3759d3de2eb76fb3837c1dd43918285bd6edf668 data/arsmagicalegacy/spell_transformations/stone_to_cobblestone_drought.json +// 1.19.2 2022-08-10T18:25:08.8383894 Spell Transformations[arsmagicalegacy] +efe505da376545e3a481a208b6111b6d48bf1117 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/clay_to_sand_drought.json +096374889403918c7c774116ca7f750fd1f851db data/arsmagicalegacy/arsmagicalegacy/spell_transformation/deepslate_bricks_to_cracked_deepslate_bricks_drought.json +7c2249a3daff05ff48330fc684c65e08cf61798e data/arsmagicalegacy/arsmagicalegacy/spell_transformation/deepslate_tiles_to_cracked_deepslate_tiles_drought.json +04142774f5a3166524e08648d2fa3073d2fc83d5 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/dirt_to_sand_drought.json +dbe1af14404356d5a812f8fd4cd7a661e4075c5d data/arsmagicalegacy/arsmagicalegacy/spell_transformation/gravel_to_sand_drought.json +2300c4990f039c850510f5bf880f385c177d2599 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/infested_stone_bricks_to_infested_cracked_stone_bricks_drought.json +cefffbe907fab8fc814673397b18b053ecdf1414 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/infested_stone_to_infested_cobblestone_drought.json +d8ed4f839faf00bc4f4a09635136af48e2fe024e data/arsmagicalegacy/arsmagicalegacy/spell_transformation/nether_bricks_to_cracked_nether_bricks_drought.json +7434422e647c9be4c0dcd6b667914ea71473e4e0 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought.json +74e8eede218d3ebc88e946edb1e32678da9e8517 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/quartz_block_to_smooth_quartz_drought.json +87cf87cf1509307b2141e8037d89081fb6686c7d data/arsmagicalegacy/arsmagicalegacy/spell_transformation/red_sandstone_to_smooth_red_sandstone_drought.json +bea64825bd9a7fd3c9a9b499096f64266d136900 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/sandstone_to_smooth_sandstone_drought.json +aa993fa48a16571e85f04bee7f314c03328b0e50 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/small_flowers_to_dead_bush_drought.json +638694a7c59b55f159c492a99a3e7c6373c82143 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/stone_bricks_to_cracked_stone_bricks_drought.json +3759d3de2eb76fb3837c1dd43918285bd6edf668 data/arsmagicalegacy/arsmagicalegacy/spell_transformation/stone_to_cobblestone_drought.json diff --git a/src/main/generated/assets/arsmagicalegacy/blockstates/inscription_table.json b/src/main/generated/assets/arsmagicalegacy/blockstates/inscription_table.json new file mode 100644 index 000000000..30a116df6 --- /dev/null +++ b/src/main/generated/assets/arsmagicalegacy/blockstates/inscription_table.json @@ -0,0 +1,297 @@ +{ + "multipart": [ + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left", + "y": 180 + }, + "when": { + "facing": "north", + "half": "left" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left2", + "y": 180 + }, + "when": { + "facing": "north", + "half": "left", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left3", + "y": 180 + }, + "when": { + "facing": "north", + "half": "left", + "tier": "3" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right", + "y": 180 + }, + "when": { + "facing": "north", + "half": "right" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right1", + "y": 180 + }, + "when": { + "facing": "north", + "half": "right", + "tier": "3|2|1" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right2", + "y": 180 + }, + "when": { + "facing": "north", + "half": "right", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right3", + "y": 180 + }, + "when": { + "facing": "north", + "half": "right", + "tier": "3" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left" + }, + "when": { + "facing": "south", + "half": "left" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left2" + }, + "when": { + "facing": "south", + "half": "left", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left3" + }, + "when": { + "facing": "south", + "half": "left", + "tier": "3" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right" + }, + "when": { + "facing": "south", + "half": "right" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right1" + }, + "when": { + "facing": "south", + "half": "right", + "tier": "3|2|1" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right2" + }, + "when": { + "facing": "south", + "half": "right", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right3" + }, + "when": { + "facing": "south", + "half": "right", + "tier": "3" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left", + "y": 90 + }, + "when": { + "facing": "west", + "half": "left" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left2", + "y": 90 + }, + "when": { + "facing": "west", + "half": "left", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left3", + "y": 90 + }, + "when": { + "facing": "west", + "half": "left", + "tier": "3" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right", + "y": 90 + }, + "when": { + "facing": "west", + "half": "right" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right1", + "y": 90 + }, + "when": { + "facing": "west", + "half": "right", + "tier": "3|2|1" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right2", + "y": 90 + }, + "when": { + "facing": "west", + "half": "right", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right3", + "y": 90 + }, + "when": { + "facing": "west", + "half": "right", + "tier": "3" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left", + "y": 270 + }, + "when": { + "facing": "east", + "half": "left" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left2", + "y": 270 + }, + "when": { + "facing": "east", + "half": "left", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_left3", + "y": 270 + }, + "when": { + "facing": "east", + "half": "left", + "tier": "3" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right", + "y": 270 + }, + "when": { + "facing": "east", + "half": "right" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right1", + "y": 270 + }, + "when": { + "facing": "east", + "half": "right", + "tier": "3|2|1" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right2", + "y": 270 + }, + "when": { + "facing": "east", + "half": "right", + "tier": "3|2" + } + }, + { + "apply": { + "model": "arsmagicalegacy:block/inscription_table_right3", + "y": 270 + }, + "when": { + "facing": "east", + "half": "right", + "tier": "3" + } + } + ] +} \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/blockstates/liquid_essence.json b/src/main/generated/assets/arsmagicalegacy/blockstates/liquid_essence.json new file mode 100644 index 000000000..448ffc56c --- /dev/null +++ b/src/main/generated/assets/arsmagicalegacy/blockstates/liquid_essence.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "arsmagicalegacy:block/liquid_essence" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/arsmagicalegacy/blockstates/occulus.json b/src/main/generated/assets/arsmagicalegacy/blockstates/occulus.json similarity index 100% rename from src/main/resources/assets/arsmagicalegacy/blockstates/occulus.json rename to src/main/generated/assets/arsmagicalegacy/blockstates/occulus.json index 97b9c6b66..a45461579 100644 --- a/src/main/resources/assets/arsmagicalegacy/blockstates/occulus.json +++ b/src/main/generated/assets/arsmagicalegacy/blockstates/occulus.json @@ -4,6 +4,9 @@ "model": "arsmagicalegacy:block/occulus", "y": 90 }, + "facing=north": { + "model": "arsmagicalegacy:block/occulus" + }, "facing=south": { "model": "arsmagicalegacy:block/occulus", "y": 180 @@ -11,9 +14,6 @@ "facing=west": { "model": "arsmagicalegacy:block/occulus", "y": 270 - }, - "facing=north": { - "model": "arsmagicalegacy:block/occulus" } } } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/lang/en_us.json b/src/main/generated/assets/arsmagicalegacy/lang/en_us.json index d8ae0e234..5a57b72ae 100644 --- a/src/main/generated/assets/arsmagicalegacy/lang/en_us.json +++ b/src/main/generated/assets/arsmagicalegacy/lang/en_us.json @@ -221,6 +221,7 @@ "etherium.arsmagicalegacy.dark": "Dark Etherium", "etherium.arsmagicalegacy.light": "Light Etherium", "etherium.arsmagicalegacy.neutral": "Neutral Etherium", + "hud_manager.open": "Open HUD Manager", "item.arsmagicalegacy.affinity_essence.arsmagicalegacy.air": "Air Affinity Essence", "item.arsmagicalegacy.affinity_essence.arsmagicalegacy.arcane": "Arcane Affinity Essence", "item.arsmagicalegacy.affinity_essence.arsmagicalegacy.earth": "Earth Affinity Essence", diff --git a/src/main/generated/assets/arsmagicalegacy/models/block/liquid_essence.json b/src/main/generated/assets/arsmagicalegacy/models/block/liquid_essence.json new file mode 100644 index 000000000..ceaaef1ed --- /dev/null +++ b/src/main/generated/assets/arsmagicalegacy/models/block/liquid_essence.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "arsmagicalegacy:block/liquid_essence_still" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/models/item/liquid_essence_bucket.json b/src/main/generated/assets/arsmagicalegacy/models/item/liquid_essence_bucket.json new file mode 100644 index 000000000..676c602c3 --- /dev/null +++ b/src/main/generated/assets/arsmagicalegacy/models/item/liquid_essence_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "forge:item/bucket", + "fluid": "arsmagicalegacy:liquid_essence", + "loader": "forge:fluid_container" +} \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/air.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/air.json index d589d6866..492d65173 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/air.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/air.json @@ -11,11 +11,6 @@ "type": "patchouli:crafting", "recipe": "arsmagicalegacy:affinity_essence_air" }, - { - "type": "patchouli:text", - "text": "ability.arsmagicalegacy.feather_falling.description", - "title": "ability.arsmagicalegacy.feather_falling.name" - }, { "type": "patchouli:text", "text": "ability.arsmagicalegacy.gravity.description", @@ -25,6 +20,11 @@ "type": "patchouli:text", "text": "ability.arsmagicalegacy.jump_boost.description", "title": "ability.arsmagicalegacy.jump_boost.name" + }, + { + "type": "patchouli:text", + "text": "ability.arsmagicalegacy.feather_falling.description", + "title": "ability.arsmagicalegacy.feather_falling.name" } ] } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/arcane.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/arcane.json index ee718914e..5a2b47a0e 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/arcane.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/arcane.json @@ -13,13 +13,13 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.clarity.description", - "title": "ability.arsmagicalegacy.clarity.name" + "text": "ability.arsmagicalegacy.mana_reduction.description", + "title": "ability.arsmagicalegacy.mana_reduction.name" }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.mana_reduction.description", - "title": "ability.arsmagicalegacy.mana_reduction.name" + "text": "ability.arsmagicalegacy.clarity.description", + "title": "ability.arsmagicalegacy.clarity.name" }, { "type": "patchouli:text", diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/earth.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/earth.json index 616ffe906..490c3a40e 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/earth.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/earth.json @@ -11,6 +11,11 @@ "type": "patchouli:crafting", "recipe": "arsmagicalegacy:affinity_essence_earth" }, + { + "type": "patchouli:text", + "text": "ability.arsmagicalegacy.resistance.description", + "title": "ability.arsmagicalegacy.resistance.name" + }, { "type": "patchouli:text", "text": "ability.arsmagicalegacy.haste.description", @@ -20,11 +25,6 @@ "type": "patchouli:text", "text": "ability.arsmagicalegacy.fall_damage.description", "title": "ability.arsmagicalegacy.fall_damage.name" - }, - { - "type": "patchouli:text", - "text": "ability.arsmagicalegacy.resistance.description", - "title": "ability.arsmagicalegacy.resistance.name" } ] } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ender.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ender.json index fcdfc4be6..874df7ac2 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ender.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ender.json @@ -13,19 +13,14 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.poison_resistance.description", - "title": "ability.arsmagicalegacy.poison_resistance.name" + "text": "ability.arsmagicalegacy.light_health_reduction.description", + "title": "ability.arsmagicalegacy.light_health_reduction.name" }, { "type": "patchouli:text", "text": "ability.arsmagicalegacy.night_vision.description", "title": "ability.arsmagicalegacy.night_vision.name" }, - { - "type": "patchouli:text", - "text": "ability.arsmagicalegacy.light_health_reduction.description", - "title": "ability.arsmagicalegacy.light_health_reduction.name" - }, { "type": "patchouli:text", "text": "ability.arsmagicalegacy.water_health_reduction.description", @@ -35,6 +30,11 @@ "type": "patchouli:text", "text": "ability.arsmagicalegacy.enderman_pumpkin.description", "title": "ability.arsmagicalegacy.enderman_pumpkin.name" + }, + { + "type": "patchouli:text", + "text": "ability.arsmagicalegacy.poison_resistance.description", + "title": "ability.arsmagicalegacy.poison_resistance.name" } ] } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/fire.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/fire.json index 9434ec705..59cac7e97 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/fire.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/fire.json @@ -13,13 +13,13 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.fire_punch.description", - "title": "ability.arsmagicalegacy.fire_punch.name" + "text": "ability.arsmagicalegacy.water_damage_fire.description", + "title": "ability.arsmagicalegacy.water_damage_fire.name" }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.water_damage_fire.description", - "title": "ability.arsmagicalegacy.water_damage_fire.name" + "text": "ability.arsmagicalegacy.fire_punch.description", + "title": "ability.arsmagicalegacy.fire_punch.name" }, { "type": "patchouli:text", diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ice.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ice.json index d354fa66f..9de820880 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ice.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/ice.json @@ -13,8 +13,8 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.frost_punch.description", - "title": "ability.arsmagicalegacy.frost_punch.name" + "text": "ability.arsmagicalegacy.frost_walker.description", + "title": "ability.arsmagicalegacy.frost_walker.name" }, { "type": "patchouli:text", @@ -23,8 +23,8 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.frost_walker.description", - "title": "ability.arsmagicalegacy.frost_walker.name" + "text": "ability.arsmagicalegacy.frost_punch.description", + "title": "ability.arsmagicalegacy.frost_punch.name" } ] } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/life.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/life.json index 50a17fda5..c134ee32a 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/life.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/life.json @@ -18,13 +18,13 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.nausea.description", - "title": "ability.arsmagicalegacy.nausea.name" + "text": "ability.arsmagicalegacy.regeneration.description", + "title": "ability.arsmagicalegacy.regeneration.name" }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.regeneration.description", - "title": "ability.arsmagicalegacy.regeneration.name" + "text": "ability.arsmagicalegacy.nausea.description", + "title": "ability.arsmagicalegacy.nausea.name" } ] } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/lightning.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/lightning.json index c5b578f70..cc8909ca2 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/lightning.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/lightning.json @@ -13,8 +13,8 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.water_damage_lightning.description", - "title": "ability.arsmagicalegacy.water_damage_lightning.name" + "text": "ability.arsmagicalegacy.speed.description", + "title": "ability.arsmagicalegacy.speed.name" }, { "type": "patchouli:text", @@ -23,8 +23,8 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.speed.description", - "title": "ability.arsmagicalegacy.speed.name" + "text": "ability.arsmagicalegacy.water_damage_lightning.description", + "title": "ability.arsmagicalegacy.water_damage_lightning.name" } ] } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/nature.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/nature.json index c5f3bd4fe..005328eca 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/nature.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/nature.json @@ -13,8 +13,8 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.thorns.description", - "title": "ability.arsmagicalegacy.thorns.name" + "text": "ability.arsmagicalegacy.saturation.description", + "title": "ability.arsmagicalegacy.saturation.name" }, { "type": "patchouli:text", @@ -23,8 +23,8 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.saturation.description", - "title": "ability.arsmagicalegacy.saturation.name" + "text": "ability.arsmagicalegacy.thorns.description", + "title": "ability.arsmagicalegacy.thorns.name" } ] } \ No newline at end of file diff --git a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/water.json b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/water.json index b40a3738d..c6854f2cb 100644 --- a/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/water.json +++ b/src/main/generated/assets/arsmagicalegacy/patchouli_books/arcane_compendium/en_us/entries/affinities/water.json @@ -13,13 +13,13 @@ }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.enderman_thorns.description", - "title": "ability.arsmagicalegacy.enderman_thorns.name" + "text": "ability.arsmagicalegacy.nether_damage_water.description", + "title": "ability.arsmagicalegacy.nether_damage_water.name" }, { "type": "patchouli:text", - "text": "ability.arsmagicalegacy.nether_damage_water.description", - "title": "ability.arsmagicalegacy.nether_damage_water.name" + "text": "ability.arsmagicalegacy.enderman_thorns.description", + "title": "ability.arsmagicalegacy.enderman_thorns.name" }, { "type": "patchouli:text", diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_chimerite_ore.json new file mode 100644 index 000000000..773e1876f --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_chimerite_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_chimerite_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:chimerite_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:chimerite_from_blasting_chimerite_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_chimerite_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:chimerite_from_blasting_chimerite_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_deepslate_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_deepslate_chimerite_ore.json new file mode 100644 index 000000000..fb1a96b7d --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_blasting_deepslate_chimerite_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_chimerite_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_chimerite_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:chimerite_from_blasting_deepslate_chimerite_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_chimerite_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:chimerite_from_blasting_deepslate_chimerite_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_chimerite_ore.json new file mode 100644 index 000000000..b28ea4db6 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_chimerite_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_chimerite_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:chimerite_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:chimerite_from_smelting_chimerite_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_chimerite_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:chimerite_from_smelting_chimerite_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_deepslate_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_deepslate_chimerite_ore.json new file mode 100644 index 000000000..e14bcfc87 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/chimerite_from_smelting_deepslate_chimerite_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_chimerite_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_chimerite_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:chimerite_from_smelting_deepslate_chimerite_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_chimerite_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:chimerite_from_smelting_deepslate_chimerite_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_deepslate_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_deepslate_moonstone_ore.json new file mode 100644 index 000000000..f4fb8b875 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_deepslate_moonstone_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_moonstone_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_moonstone_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:moonstone_from_blasting_deepslate_moonstone_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_moonstone_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:moonstone_from_blasting_deepslate_moonstone_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_moonstone_ore.json new file mode 100644 index 000000000..a207bd522 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_blasting_moonstone_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_moonstone_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:moonstone_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:moonstone_from_blasting_moonstone_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_moonstone_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:moonstone_from_blasting_moonstone_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_deepslate_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_deepslate_moonstone_ore.json new file mode 100644 index 000000000..bdc17db91 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_deepslate_moonstone_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_moonstone_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_moonstone_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:moonstone_from_smelting_deepslate_moonstone_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_moonstone_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:moonstone_from_smelting_deepslate_moonstone_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_moonstone_ore.json new file mode 100644 index 000000000..e584336c5 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/moonstone_from_smelting_moonstone_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_moonstone_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:moonstone_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:moonstone_from_smelting_moonstone_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_moonstone_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:moonstone_from_smelting_moonstone_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/stripped_witchwood.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/stripped_witchwood.json index e26b4a7c1..feb0bcb9a 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/stripped_witchwood.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/stripped_witchwood.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_stripped_witchwood_log": { + "has_log": { "conditions": { "items": [ { @@ -22,7 +22,7 @@ }, "requirements": [ [ - "has_stripped_witchwood_log", + "has_log", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_deepslate_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_deepslate_topaz_ore.json new file mode 100644 index 000000000..96331cdbd --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_deepslate_topaz_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_topaz_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_topaz_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:topaz_from_blasting_deepslate_topaz_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_topaz_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:topaz_from_blasting_deepslate_topaz_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_topaz_ore.json new file mode 100644 index 000000000..e1ecad979 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_blasting_topaz_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:topaz_from_blasting_topaz_ore" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_topaz_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:topaz_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_topaz_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:topaz_from_blasting_topaz_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_deepslate_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_deepslate_topaz_ore.json new file mode 100644 index 000000000..d15a687fa --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_deepslate_topaz_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_topaz_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_topaz_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:topaz_from_smelting_deepslate_topaz_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_topaz_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:topaz_from_smelting_deepslate_topaz_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_topaz_ore.json new file mode 100644 index 000000000..7fd878098 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/topaz_from_smelting_topaz_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:topaz_from_smelting_topaz_ore" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_topaz_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:topaz_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_topaz_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:topaz_from_smelting_topaz_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_deepslate_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_deepslate_vinteum_ore.json new file mode 100644 index 000000000..46771da6d --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_deepslate_vinteum_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_vinteum_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_vinteum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:vinteum_dust_from_blasting_deepslate_vinteum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_vinteum_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:vinteum_dust_from_blasting_deepslate_vinteum_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_vinteum_ore.json new file mode 100644 index 000000000..bb079927f --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_blasting_vinteum_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:vinteum_dust_from_blasting_vinteum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_vinteum_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:vinteum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_vinteum_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:vinteum_dust_from_blasting_vinteum_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_deepslate_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_deepslate_vinteum_ore.json new file mode 100644 index 000000000..e5f3fdea1 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_deepslate_vinteum_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_deepslate_vinteum_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:deepslate_vinteum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:vinteum_dust_from_smelting_deepslate_vinteum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_deepslate_vinteum_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:vinteum_dust_from_smelting_deepslate_vinteum_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_vinteum_ore.json new file mode 100644 index 000000000..38a727275 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/vinteum_dust_from_smelting_vinteum_ore.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:vinteum_dust_from_smelting_vinteum_ore" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_vinteum_ore": { + "conditions": { + "items": [ + { + "items": [ + "arsmagicalegacy:vinteum_ore" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_vinteum_ore", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "arsmagicalegacy:vinteum_dust_from_smelting_vinteum_ore" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood.json index 2bf385150..0b72a2d31 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_log": { + "has_log": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_log", + "has_log", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_button.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_button.json index 77f76f010..2ae30e76c 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_button.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_button.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_button" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_button" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_door.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_door.json index 75ffcec7e..cd9322e84 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_door.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_door.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_door" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_door" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence.json index 86ec82365..a7a111250 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_fence" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_fence" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence_gate.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence_gate.json index 3386f41c1..80141f07e 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence_gate.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_fence_gate.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_fence_gate" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_fence_gate" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_planks.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_planks.json index c4b9492bb..f0506fe3c 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_planks.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_planks.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_planks" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_logs": { + "has_logs": { "conditions": { "items": [ { @@ -16,11 +10,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_planks" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_logs", + "has_logs", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_pressure_plate.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_pressure_plate.json index 9c5791b80..659723dc8 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_pressure_plate.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_pressure_plate.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_pressure_plate" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_pressure_plate" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_slab.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_slab.json index 8c6dcd60d..0f107a8bf 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_slab.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_slab.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_slab" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_slab" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_stairs.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_stairs.json index a0b14c620..81a9a82e4 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_stairs.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_stairs.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_stairs" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_stairs" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_trapdoor.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_trapdoor.json index 685869afd..694e82d6e 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_trapdoor.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/arsmagicalegacy/witchwood_trapdoor.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "arsmagicalegacy:witchwood_trapdoor" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_witchwood_planks": { + "has_planks": { "conditions": { "items": [ { @@ -18,11 +12,17 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:witchwood_trapdoor" + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "has_witchwood_planks", + "has_planks", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/advancements/recipes/misc/arcane_compendium.json b/src/main/generated/data/arsmagicalegacy/advancements/recipes/misc/arcane_compendium.json index 9334929f9..7d2692a4c 100644 --- a/src/main/generated/data/arsmagicalegacy/advancements/recipes/misc/arcane_compendium.json +++ b/src/main/generated/data/arsmagicalegacy/advancements/recipes/misc/arcane_compendium.json @@ -1,28 +1,46 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_the_recipe": { + "filled_liquid_essence_bucket": { "conditions": { - "recipe": "arsmagicalegacy:arcane_compendium" + "item": { + "items": [ + "arsmagicalegacy:liquid_essence_bucket" + ] + } }, - "trigger": "minecraft:recipe_unlocked" + "trigger": "minecraft:filled_bucket" }, - "has_vinteum_dust": { + "has_liquid_essence_bucket": { "conditions": { "items": [ { "items": [ - "arsmagicalegacy:vinteum_dust" + "arsmagicalegacy:liquid_essence_bucket" ] } ] }, "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "arsmagicalegacy:arcane_compendium" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "in_liquid_essence": { + "conditions": { + "block": "arsmagicalegacy:liquid_essence" + }, + "trigger": "minecraft:enter_block" } }, "requirements": [ [ - "has_vinteum_dust", + "has_liquid_essence_bucket", + "in_liquid_essence", + "filled_liquid_essence_bucket", "has_the_recipe" ] ], diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/clarity.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/clarity.json similarity index 80% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/clarity.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/clarity.json index 00d707285..89a0be039 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/clarity.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/clarity.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:arcane", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/enderman_pumpkin.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/enderman_pumpkin.json similarity index 80% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/enderman_pumpkin.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/enderman_pumpkin.json index ea713098d..7c80bccc3 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/enderman_pumpkin.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/enderman_pumpkin.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:ender", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/enderman_thorns.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/enderman_thorns.json similarity index 80% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/enderman_thorns.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/enderman_thorns.json index 307b90866..a7048e200 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/enderman_thorns.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/enderman_thorns.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:water", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/fall_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fall_damage.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/fall_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fall_damage.json index 69ce81b59..3ae7ed28c 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/fall_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fall_damage.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:earth", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/feather_falling.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/feather_falling.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/feather_falling.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/feather_falling.json index 4d1b4f297..3c305f439 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/feather_falling.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/feather_falling.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:air", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/fire_punch.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fire_punch.json similarity index 79% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/fire_punch.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fire_punch.json index a5fab22f7..737f1744c 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/fire_punch.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fire_punch.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:fire", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/fire_resistance.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fire_resistance.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/fire_resistance.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fire_resistance.json index f31a6071d..d920d0652 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/fire_resistance.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/fire_resistance.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:fire", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/frost_punch.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/frost_punch.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/frost_punch.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/frost_punch.json index a1696ee2d..78fd1fea4 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/frost_punch.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/frost_punch.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:ice", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/frost_walker.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/frost_walker.json similarity index 79% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/frost_walker.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/frost_walker.json index 8eee10f1c..a79c1db3a 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/frost_walker.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/frost_walker.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:ice", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/gravity.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/gravity.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/gravity.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/gravity.json index edb4e41ee..1590a4d8c 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/gravity.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/gravity.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:air", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/haste.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/haste.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/haste.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/haste.json index 402a6226f..61924f897 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/haste.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/haste.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:earth", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/jump_boost.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/jump_boost.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/jump_boost.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/jump_boost.json index 4d1b4f297..3c305f439 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/jump_boost.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/jump_boost.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:air", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/light_health_reduction.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/light_health_reduction.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/light_health_reduction.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/light_health_reduction.json diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/magic_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/magic_damage.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/magic_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/magic_damage.json index cfcb14ce1..fd057957c 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/magic_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/magic_damage.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:arcane", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/mana_reduction.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/mana_reduction.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/mana_reduction.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/mana_reduction.json index 3cc5afa2a..103a62734 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/mana_reduction.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/mana_reduction.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:arcane", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/nausea.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nausea.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/nausea.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nausea.json index 9bd2acca9..7bd29ca91 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/nausea.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nausea.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:life", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/nether_damage_nature.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_nature.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/nether_damage_nature.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_nature.json index ec1e48b90..c0745edc2 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/nether_damage_nature.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_nature.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:nature", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/nether_damage_water.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_water.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/nether_damage_water.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_water.json index 9f32b2c42..dd0118921 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/nether_damage_water.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/nether_damage_water.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:water", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/night_vision.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/night_vision.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/night_vision.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/night_vision.json index f5ea88266..2ea2a1b08 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/night_vision.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/night_vision.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:ender", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/poison_resistance.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/poison_resistance.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/poison_resistance.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/poison_resistance.json index f5ea88266..2ea2a1b08 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/poison_resistance.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/poison_resistance.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:ender", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/regeneration.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/regeneration.json similarity index 79% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/regeneration.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/regeneration.json index 6328fa553..d45e16764 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/regeneration.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/regeneration.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:life", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/resistance.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/resistance.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/resistance.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/resistance.json index 402a6226f..61924f897 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/resistance.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/resistance.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:earth", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/saturation.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/saturation.json similarity index 80% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/saturation.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/saturation.json index 54d33d5a9..996e8184a 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/saturation.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/saturation.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:nature", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/slowness.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/slowness.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/slowness.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/slowness.json index a1de0a9ca..b8075a654 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/slowness.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/slowness.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:ice", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/smite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/smite.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/smite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/smite.json index ffd5b2c75..588451eb7 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/smite.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/smite.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:life", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/speed.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/speed.json similarity index 83% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/speed.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/speed.json index e07e48625..0a8bea510 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/speed.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/speed.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:lightning", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/step_assist.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/step_assist.json similarity index 81% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/step_assist.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/step_assist.json index 05bb3b7d9..d877ddd98 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/step_assist.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/step_assist.json @@ -1,6 +1,6 @@ { "affinity": "arsmagicalegacy:lightning", "bounds": { - "min": 1.0 + "min": 1 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/swim_speed.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/swim_speed.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/swim_speed.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/swim_speed.json index 2c46ef01e..b9848e959 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/swim_speed.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/swim_speed.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:water", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/thorns.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/thorns.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/thorns.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/thorns.json index 2113efac7..476c40841 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/thorns.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/thorns.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:nature", "bounds": { - "max": 1.0, + "max": 1, "min": 0.01 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/water_damage_fire.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_fire.json similarity index 82% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/water_damage_fire.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_fire.json index 8e477a8db..ca87f9136 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/water_damage_fire.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_fire.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:fire", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/water_damage_lightning.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_lightning.json similarity index 83% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/water_damage_lightning.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_lightning.json index b26930d9c..312aaf61b 100644 --- a/src/main/generated/data/arsmagicalegacy/affinity_abilities/water_damage_lightning.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_damage_lightning.json @@ -1,7 +1,7 @@ { "affinity": "arsmagicalegacy:lightning", "bounds": { - "max": 1.0, + "max": 1, "min": 0.5 } } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/affinity_abilities/water_health_reduction.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_health_reduction.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/affinity_abilities/water_health_reduction.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ability/water_health_reduction.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/chimerite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/chimerite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/chimerite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/chimerite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/coal.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/coal.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/coal.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/coal.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/diamond.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/diamond.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/diamond.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/diamond.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/emerald.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/emerald.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/emerald.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/emerald.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/exposed_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/exposed_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/exposed_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/exposed_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/glass.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/glass.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/glass.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/glass.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/gold.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/gold.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/gold.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/gold.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/iron.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/iron.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/iron.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/iron.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/lapis.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/lapis.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/lapis.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/lapis.json diff --git a/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/moonstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/moonstone.json new file mode 100644 index 000000000..e0c2192a5 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/moonstone.json @@ -0,0 +1,4 @@ +{ + "cap": "arsmagicalegacy:moonstone_block", + "power": 14 +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/netherite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/netherite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/netherite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/netherite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/oxidized_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/oxidized_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/oxidized_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/oxidized_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/redstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/redstone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/redstone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/redstone.json diff --git a/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/sunstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/sunstone.json new file mode 100644 index 000000000..338c076ca --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/sunstone.json @@ -0,0 +1,4 @@ +{ + "cap": "arsmagicalegacy:sunstone_block", + "power": 15 +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/topaz.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/topaz.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/topaz.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/topaz.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/vinteum.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/vinteum.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/vinteum.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/vinteum.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/waxed_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/waxed_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/waxed_exposed_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_exposed_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/waxed_exposed_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_exposed_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/waxed_oxidized_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_oxidized_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/waxed_oxidized_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_oxidized_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/waxed_weathered_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_weathered_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/waxed_weathered_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/waxed_weathered_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/cap/weathered_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/weathered_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/cap/weathered_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/cap/weathered_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/acacia_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/acacia_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/acacia_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/acacia_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/andesite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/andesite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/andesite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/andesite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/birch_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/birch_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/birch_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/birch_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/blackstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/blackstone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/blackstone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/blackstone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/cobbled_deepslate.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/cobbled_deepslate.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/cobbled_deepslate.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/cobbled_deepslate.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/cobblestone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/cobblestone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/cobblestone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/cobblestone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/crimson_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/crimson_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/crimson_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/crimson_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/dark_oak_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/dark_oak_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/dark_oak_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/dark_oak_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/dark_prismarine.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/dark_prismarine.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/dark_prismarine.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/dark_prismarine.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/deepslate_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/deepslate_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/deepslate_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/deepslate_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/deepslate_tiles.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/deepslate_tiles.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/deepslate_tiles.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/deepslate_tiles.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/diorite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/diorite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/diorite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/diorite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/end_stone_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/end_stone_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/end_stone_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/end_stone_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/exposed_cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/exposed_cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/exposed_cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/exposed_cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/granite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/granite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/granite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/granite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/jungle_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/jungle_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/jungle_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/jungle_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/mangrove_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mangrove_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/mangrove_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mangrove_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/mossy_cobblestone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mossy_cobblestone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/mossy_cobblestone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mossy_cobblestone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/mossy_stone_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mossy_stone_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/mossy_stone_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mossy_stone_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/mud_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mud_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/mud_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/mud_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/nether_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/nether_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/nether_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/nether_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/oak_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/oak_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/oak_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/oak_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/oxidized_cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/oxidized_cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/oxidized_cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/oxidized_cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/polished_andesite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_andesite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/polished_andesite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_andesite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/polished_blackstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_blackstone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/polished_blackstone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_blackstone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/polished_blackstone_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_blackstone_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/polished_blackstone_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_blackstone_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/polished_deepslate.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_deepslate.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/polished_deepslate.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_deepslate.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/polished_diorite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_diorite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/polished_diorite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_diorite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/polished_granite.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_granite.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/polished_granite.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/polished_granite.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/prismarine.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/prismarine.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/prismarine.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/prismarine.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/prismarine_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/prismarine_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/prismarine_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/prismarine_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/purpur_block.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/purpur_block.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/purpur_block.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/purpur_block.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/quartz_block.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/quartz_block.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/quartz_block.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/quartz_block.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/red_nether_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/red_nether_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/red_nether_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/red_nether_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/red_sandstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/red_sandstone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/red_sandstone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/red_sandstone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/sandstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/sandstone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/sandstone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/sandstone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/smooth_quartz.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_quartz.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/smooth_quartz.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_quartz.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/smooth_red_sandstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_red_sandstone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/smooth_red_sandstone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_red_sandstone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/smooth_sandstone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_sandstone.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/smooth_sandstone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/smooth_sandstone.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/spruce_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/spruce_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/spruce_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/spruce_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone.json new file mode 100644 index 000000000..01a0592ad --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone.json @@ -0,0 +1,5 @@ +{ + "block": "minecraft:stone", + "power": 2, + "stair": "minecraft:stone_stairs" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/stone_bricks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone_bricks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/stone_bricks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/stone_bricks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/warped_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/warped_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/warped_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/warped_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/waxed_cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/waxed_cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/waxed_exposed_cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_exposed_cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/waxed_exposed_cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_exposed_cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/waxed_oxidized_cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_oxidized_cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/waxed_oxidized_cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_oxidized_cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/waxed_weathered_cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_weathered_cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/waxed_weathered_cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/waxed_weathered_cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/weathered_cut_copper.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/weathered_cut_copper.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/weathered_cut_copper.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/weathered_cut_copper.json diff --git a/src/main/generated/data/arsmagicalegacy/altar/structure/witchwood_planks.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/witchwood_planks.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/altar/structure/witchwood_planks.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/altar/structure/witchwood_planks.json diff --git a/src/main/generated/data/arsmagicalegacy/occulus_tabs/affinity.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/affinity.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/occulus_tabs/affinity.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/affinity.json diff --git a/src/main/generated/data/arsmagicalegacy/occulus_tabs/defense.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/defense.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/occulus_tabs/defense.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/defense.json diff --git a/src/main/generated/data/arsmagicalegacy/occulus_tabs/offense.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/offense.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/occulus_tabs/offense.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/offense.json diff --git a/src/main/generated/data/arsmagicalegacy/occulus_tabs/utility.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/utility.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/occulus_tabs/utility.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/occulus_tab/utility.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/arcane_bolt.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/arcane_bolt.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/arcane_bolt.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/arcane_bolt.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/area_lightning.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/area_lightning.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/area_lightning.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/area_lightning.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/blink.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/blink.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/blink.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/blink.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/chaos_water_bolt.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/chaos_water_bolt.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/chaos_water_bolt.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/chaos_water_bolt.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/dispel.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/dispel.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/dispel.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/dispel.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/ender_bolt.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_bolt.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/ender_bolt.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_bolt.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/ender_torrent.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_torrent.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/ender_torrent.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_torrent.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/ender_wave.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_wave.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/ender_wave.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/ender_wave.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/fire_bolt.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/fire_bolt.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/fire_bolt.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/fire_bolt.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/heal_self.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/heal_self.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/heal_self.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/heal_self.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/lightning_bolt.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/lightning_bolt.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/lightning_bolt.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/lightning_bolt.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/lightning_rune.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/lightning_rune.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/lightning_rune.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/lightning_rune.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/melt_armor.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/melt_armor.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/melt_armor.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/melt_armor.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/nausea.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/nausea.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/nausea.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/nausea.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/otherworldly_roar.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/otherworldly_roar.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/otherworldly_roar.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/otherworldly_roar.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/scramble_synapses.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/scramble_synapses.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/scramble_synapses.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/scramble_synapses.json diff --git a/src/main/generated/data/arsmagicalegacy/prefab_spells/water_bolt.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/water_bolt.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/prefab_spells/water_bolt.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/prefab_spell/water_bolt.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_air_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_air_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_air_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_air_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_arcane_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_arcane_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_arcane_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_arcane_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_earth_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_earth_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_earth_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_earth_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_ender_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_ender_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_ender_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_ender_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_fire_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_fire_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_fire_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_fire_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_ice_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_ice_guardian.json similarity index 81% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_ice_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_ice_guardian.json index a899e28a2..ddcff1466 100644 --- a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_ice_guardian.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_ice_guardian.json @@ -7,6 +7,10 @@ { "type": "arsmagicalegacy:structure", "structure": "arsmagicalegacy:ice_guardian_spawn_ritual" + }, + { + "type": "arsmagicalegacy:biome", + "biome": "#forge:is_snowy" } ], "trigger": { diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_life_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_life_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_life_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_life_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_lightning_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_lightning_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_lightning_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_lightning_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_rituals/spawn_water_guardian.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_water_guardian.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/am_rituals/spawn_water_guardian.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/ritual/spawn_water_guardian.json diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/absorption.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/absorption.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/absorption.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/absorption.json index e8d195931..6da15d228 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/absorption.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/absorption.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:shield" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/agility.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/agility.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/agility.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/agility.json index bc4298b8a..dae7e8e88 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/agility.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/agility.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:swift_swim" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/aoe.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/aoe.json similarity index 93% rename from src/main/generated/data/arsmagicalegacy/am_skills/aoe.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/aoe.json index 80516a15d..ea5fa89b8 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/aoe.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/aoe.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:lightning_damage", diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/astral_distortion.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/astral_distortion.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/astral_distortion.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/astral_distortion.json index b479f7c86..ce0aa7e56 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/astral_distortion.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/astral_distortion.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:magic_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/attract.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/attract.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/attract.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/attract.json index 94fde5d42..747d622c6 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/attract.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/attract.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:rift" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/banish_rain.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/banish_rain.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/banish_rain.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/banish_rain.json index 70c536a10..143695d90 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/banish_rain.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/banish_rain.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:drought" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/beam.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/beam.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/beam.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/beam.json index be615284a..23737fe33 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/beam.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/beam.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:aoe" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/blindness.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blindness.json similarity index 91% rename from src/main/generated/data/arsmagicalegacy/am_skills/blindness.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blindness.json index a3a1d0b47..be86363bf 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/blindness.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blindness.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:lightning_damage", diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/blink.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blink.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/blink.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blink.json index 9527454be..a6c485a71 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/blink.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blink.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:random_teleport" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/blizzard.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blizzard.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/blizzard.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blizzard.json index bc66b5554..ceb475d2e 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/blizzard.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/blizzard.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:offense", + "parents": [], "x": 30, "y": 30 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/bounce.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/bounce.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/bounce.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/bounce.json index 0b400a934..6e8151ab6 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/bounce.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/bounce.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:projectile" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/chain.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/chain.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/chain.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/chain.json index 30b4768c3..6b525a1b9 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/chain.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/chain.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:grow" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/channel.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/channel.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/channel.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/channel.json index 53922fc8d..296cd21af 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/channel.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/channel.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:rift" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/charm.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/charm.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/charm.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/charm.json index 6a4923035..5738e26d1 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/charm.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/charm.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:light" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_damage.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/contingency_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_damage.json index 217f25d9f..450f4418a 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:reflect" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_death.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_death.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/contingency_death.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_death.json index 2b34227bc..c6a8f30e3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_death.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_death.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:ender_intervention" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_fall.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fall.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/contingency_fall.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fall.json index 6dc89b61b..252c513b7 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_fall.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fall.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:slow_falling" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_fire.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fire.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/contingency_fire.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fire.json index 453f12607..9521d8f4b 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_fire.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_fire.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:forge" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_health.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_health.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/contingency_health.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_health.json index 413acb812..a6ea8bfef 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/contingency_health.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/contingency_health.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:shield" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/create_water.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/create_water.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/create_water.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/create_water.json index 967944fc4..850788563 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/create_water.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/create_water.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:plant" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/damage.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/damage.json index f920d89f8..d8ee1f4cc 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:beam" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/daylight.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/daylight.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/daylight.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/daylight.json index 88eb1bb06..b5b2a22f3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/daylight.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/daylight.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:utility", + "parents": [], "x": 30, "y": 30 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/dig.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dig.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/dig.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dig.json index 95ee38385..3fcf354d4 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/dig.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dig.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:touch" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/disarm.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/disarm.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/disarm.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/disarm.json index a4cc7136c..56c5d6226 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/disarm.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/disarm.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:dispel" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/dismembering.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dismembering.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/dismembering.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dismembering.json index e9b3c62ab..6aa7c88a7 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/dismembering.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dismembering.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:offense", + "parents": [], "x": 30, "y": 210 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/dispel.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dispel.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/dispel.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dispel.json index 6f50c976b..29c70ec1f 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/dispel.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/dispel.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:heal" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/divine_intervention.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/divine_intervention.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/divine_intervention.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/divine_intervention.json index a53afb632..ac74abcfa 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/divine_intervention.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/divine_intervention.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:recall" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/drought.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/drought.json index 4432c8ee7..26db58eae 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/drought.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/drought.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:create_water" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/drowning_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/drowning_damage.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/drowning_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/drowning_damage.json index cd227222f..3d22d7bf3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/drowning_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/drowning_damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:magic_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/duration.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/duration.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/duration.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/duration.json index da508e194..fcac0039c 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/duration.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/duration.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:temporal_anchor" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/effect_power.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/effect_power.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/effect_power.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/effect_power.json index b7660b3c7..e7098ccc3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/effect_power.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/effect_power.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:defense", + "parents": [], "x": 30, "y": 75 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/ender_intervention.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/ender_intervention.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/ender_intervention.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/ender_intervention.json index 5881ad115..3e4fb22f1 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/ender_intervention.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/ender_intervention.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:recall" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/entangle.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/entangle.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/entangle.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/entangle.json index 5264f185d..25d4daad1 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/entangle.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/entangle.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:repel" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/explosion.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/explosion.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/explosion.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/explosion.json index 4b34d9d75..5508e57df 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/explosion.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/explosion.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:fury" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/falling_star.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/falling_star.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/falling_star.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/falling_star.json index f73000eca..039384490 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/falling_star.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/falling_star.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:offense", + "parents": [], "x": 30, "y": 75 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/fire_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fire_damage.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/fire_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fire_damage.json index 0d27ddef8..44025ff51 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/fire_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fire_damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:physical_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/fire_rain.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fire_rain.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/fire_rain.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fire_rain.json index b6e7c49c1..ac4f463e6 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/fire_rain.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fire_rain.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:offense", + "parents": [], "x": 30, "y": 120 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/flight.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/flight.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/flight.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/flight.json index 97cf5006c..a5b5e64d9 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/flight.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/flight.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:levitation" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/fling.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fling.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/fling.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fling.json index bccecc2ec..8dc53ae01 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/fling.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fling.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:knockback" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/forge.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/forge.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/forge.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/forge.json index 16bef6887..517770da0 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/forge.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/forge.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:ignition" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/frost.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/frost.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/frost.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/frost.json index 9c22ff1f1..6fab32024 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/frost.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/frost.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:frost_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/frost_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/frost_damage.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/frost_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/frost_damage.json index b3c51324a..5d937d5be 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/frost_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/frost_damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:physical_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/fury.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fury.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/fury.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fury.json index 62066159a..f0e8550cd 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/fury.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/fury.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/gravity.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/gravity.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/gravity.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/gravity.json index 72e1eaffc..3ee038eef 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/gravity.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/gravity.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:projectile" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/gravity_well.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/gravity_well.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/gravity_well.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/gravity_well.json index 6c2983948..786844585 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/gravity_well.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/gravity_well.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:slow_falling" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/grow.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/grow.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/grow.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/grow.json index fb476fb10..b62c7ad59 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/grow.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/grow.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:plant" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/harvest.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/harvest.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/harvest.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/harvest.json index 68b59b0d5..b5e38b984 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/harvest.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/harvest.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:plow" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/haste.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/haste.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/haste.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/haste.json index 54c3d20ae..1f640ae7c 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/haste.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/haste.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:slow_falling" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/heal.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/heal.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/heal.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/heal.json index 13f0e30b8..603164c29 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/heal.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/heal.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:regeneration" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/healing.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/healing.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/healing.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/healing.json index ffec6403d..84fcf2f5e 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/healing.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/healing.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:heal" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/ignition.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/ignition.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/ignition.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/ignition.json index 2792936a5..d1bfd77e8 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/ignition.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/ignition.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:fire_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/invisibility.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/invisibility.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/invisibility.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/invisibility.json index 54a719325..918d9b71a 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/invisibility.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/invisibility.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:true_sight" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/jump_boost.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/jump_boost.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/jump_boost.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/jump_boost.json index 9c0af7ac1..7d599e19c 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/jump_boost.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/jump_boost.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:self" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/knockback.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/knockback.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/knockback.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/knockback.json index 07b47e24a..70f2bee68 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/knockback.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/knockback.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:magic_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/levitation.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/levitation.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/levitation.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/levitation.json index 08cc59031..66860b5fb 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/levitation.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/levitation.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:gravity_well" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/life_drain.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/life_drain.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/life_drain.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/life_drain.json index 59f3e77a0..29c48cf75 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/life_drain.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/life_drain.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:life_tap" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/life_tap.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/life_tap.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/life_tap.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/life_tap.json index aaa5d6f78..5760cb12c 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/life_tap.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/life_tap.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:heal" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/light.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/light.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/light.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/light.json index 3bd8b40d4..21f24204c 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/light.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/light.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:dig" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/lightning_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/lightning_damage.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/lightning_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/lightning_damage.json index 4a98e6fa1..55fc5b0c2 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/lightning_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/lightning_damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:physical_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/lunar.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/lunar.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/lunar.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/lunar.json index 2be23bc55..6e6b9adb5 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/lunar.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/lunar.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:night_vision" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/magic_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/magic_damage.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/magic_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/magic_damage.json index 9da0571bf..07489a47d 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/magic_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/magic_damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:physical_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/mana_blast.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_blast.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/mana_blast.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_blast.json index 2b596336a..f6f3be62d 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/mana_blast.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_blast.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:offense", + "parents": [], "x": 30, "y": 165 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/mana_drain.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_drain.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/mana_drain.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_drain.json index ce8cc00e8..8fe33ef88 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/mana_drain.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_drain.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:life_drain" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/mana_shield.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_shield.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/mana_shield.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_shield.json index 4488d3f1f..f010b1dae 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/mana_shield.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mana_shield.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:defense", + "parents": [], "x": 30, "y": 30 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/mining_power.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mining_power.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/mining_power.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mining_power.json index e1ce038c2..55e0b1870 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/mining_power.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/mining_power.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:silk_touch" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/moonrise.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/moonrise.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/moonrise.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/moonrise.json index 52841c69c..66d95d49c 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/moonrise.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/moonrise.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:utility", + "parents": [], "x": 30, "y": 75 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/night_vision.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/night_vision.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/night_vision.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/night_vision.json index 4c93c18a5..9c13be199 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/night_vision.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/night_vision.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:light" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/physical_damage.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/physical_damage.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/physical_damage.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/physical_damage.json index f63def682..1ec9464b1 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/physical_damage.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/physical_damage.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:projectile" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/piercing.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/piercing.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/piercing.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/piercing.json index 34198a9ba..df5e66f6c 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/piercing.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/piercing.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:frost" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/place_block.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/place_block.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/place_block.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/place_block.json index ee67fd769..c7b9acdfe 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/place_block.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/place_block.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:dig" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/plant.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/plant.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/plant.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/plant.json index f008fceed..2bbc0aadd 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/plant.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/plant.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:light" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/plow.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/plow.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/plow.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/plow.json index 5d5465456..d561b54a6 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/plow.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/plow.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:plant" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/projectile.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/projectile.json similarity index 76% rename from src/main/generated/data/arsmagicalegacy/am_skills/projectile.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/projectile.json index 4933e9858..22da653dd 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/projectile.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/projectile.json @@ -2,7 +2,9 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", + "parents": [], "x": 210, "y": 30 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/prosperity.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/prosperity.json similarity index 73% rename from src/main/generated/data/arsmagicalegacy/am_skills/prosperity.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/prosperity.json index 9d7cc9604..610dffa40 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/prosperity.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/prosperity.json @@ -1,6 +1,8 @@ { + "cost": {}, "hidden": true, "occulus_tab": "arsmagicalegacy:utility", + "parents": [], "x": 30, "y": 120 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/random_teleport.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/random_teleport.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/random_teleport.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/random_teleport.json index 02af2f5bd..2b33484b3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/random_teleport.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/random_teleport.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:invisibility" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/range.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/range.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/range.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/range.json index 037a196eb..2b7bcc8f8 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/range.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/range.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:random_teleport" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/recall.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/recall.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/recall.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/recall.json index 0e26357e3..4a0e6e74a 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/recall.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/recall.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:transplace" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/reflect.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/reflect.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/reflect.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/reflect.json index e26689f9c..f49ff250d 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/reflect.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/reflect.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:shield" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/regeneration.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/regeneration.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/regeneration.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/regeneration.json index ef73e5719..d434f6ae3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/regeneration.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/regeneration.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:self" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/repel.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/repel.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/repel.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/repel.json index 251e59606..49eae5f4b 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/repel.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/repel.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:slowness" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/rift.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rift.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/rift.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rift.json index 3591fcb34..e6ea82274 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/rift.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rift.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:light" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/rune.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rune.json similarity index 91% rename from src/main/generated/data/arsmagicalegacy/am_skills/rune.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rune.json index d0fb8a56f..542007482 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/rune.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rune.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:agility", diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/rune_procs.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rune_procs.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/rune_procs.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rune_procs.json index 1c1d2b800..c841fbde0 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/rune_procs.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/rune_procs.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:rune" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/self.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/self.json similarity index 76% rename from src/main/generated/data/arsmagicalegacy/am_skills/self.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/self.json index f1389e912..82025e60f 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/self.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/self.json @@ -2,7 +2,9 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", + "parents": [], "x": 165, "y": 30 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/shield.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/shield.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/shield.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/shield.json index 29c568a81..1583f98ab 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/shield.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/shield.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:zone" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/shrink.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/shrink.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/shrink.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/shrink.json index ae58685cf..e086b6676 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/shrink.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/shrink.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:regeneration" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/silence.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/silence.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/silence.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/silence.json index 7c005efde..4f5dd30d9 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/silence.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/silence.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:astral_distortion" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/silk_touch.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/silk_touch.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/silk_touch.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/silk_touch.json index 25446bb72..96269304f 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/silk_touch.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/silk_touch.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:dig" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/slow_falling.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/slow_falling.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/slow_falling.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/slow_falling.json index c0e127321..5a0b72cea 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/slow_falling.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/slow_falling.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:jump_boost" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/slowness.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/slowness.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/slowness.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/slowness.json index 2748a6629..7d530b067 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/slowness.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/slowness.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:slow_falling" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/solar.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/solar.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/solar.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/solar.json index 17ecd3beb..18008fed6 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/solar.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/solar.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:blindness" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/storm.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/storm.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/storm.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/storm.json index b7425a628..072963c8a 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/storm.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/storm.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:lightning_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/summon.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/summon.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/summon.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/summon.json index 5ff681e96..9b31084ca 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/summon.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/summon.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:life_tap" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/swift_swim.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/swift_swim.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/swift_swim.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/swift_swim.json index 610dd46cd..7b424ee2b 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/swift_swim.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/swift_swim.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:haste" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/target_non_solid.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/target_non_solid.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/target_non_solid.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/target_non_solid.json index e29209350..d2205219f 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/target_non_solid.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/target_non_solid.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:touch" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/telekinesis.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/telekinesis.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/telekinesis.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/telekinesis.json index 5a67d6604..aad06ce0f 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/telekinesis.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/telekinesis.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:attract" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/temporal_anchor.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/temporal_anchor.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/temporal_anchor.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/temporal_anchor.json index f5bfc32a0..4a7a38a8d 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/temporal_anchor.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/temporal_anchor.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:reflect" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/touch.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/touch.json similarity index 76% rename from src/main/generated/data/arsmagicalegacy/am_skills/touch.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/touch.json index 5933274a6..d3e9bd24f 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/touch.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/touch.json @@ -2,7 +2,9 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", + "parents": [], "x": 120, "y": 30 } \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/transplace.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/transplace.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/transplace.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/transplace.json index 5f02e37b8..90fed87b3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/transplace.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/transplace.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:blink" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/true_sight.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/true_sight.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/true_sight.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/true_sight.json index ffe7575b0..44a362fe3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/true_sight.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/true_sight.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:night_vision" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/velocity.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/velocity.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/velocity.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/velocity.json index fbd26147f..130235c50 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/velocity.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/velocity.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:fling" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/wall.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wall.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/wall.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wall.json index 51f74dc0d..35471a837 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/wall.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wall.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:repel" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/water_breathing.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/water_breathing.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/water_breathing.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/water_breathing.json index 4b8e2066e..285d680d3 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/water_breathing.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/water_breathing.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:create_water" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/watery_grave.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/watery_grave.json similarity index 90% rename from src/main/generated/data/arsmagicalegacy/am_skills/watery_grave.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/watery_grave.json index bdd21e55b..5657f12d1 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/watery_grave.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/watery_grave.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:green": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:drowning_damage" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/wave.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wave.json similarity index 91% rename from src/main/generated/data/arsmagicalegacy/am_skills/wave.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wave.json index 84e5a7ced..de2fb6d46 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/wave.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wave.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:offense", "parents": [ "arsmagicalegacy:damage", diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/wizards_autumn.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wizards_autumn.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/wizards_autumn.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wizards_autumn.json index 1369b4cfb..fb72d8750 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/wizards_autumn.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/wizards_autumn.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:blue": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:utility", "parents": [ "arsmagicalegacy:dig" diff --git a/src/main/generated/data/arsmagicalegacy/am_skills/zone.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/zone.json similarity index 89% rename from src/main/generated/data/arsmagicalegacy/am_skills/zone.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/zone.json index d77c13c01..0e7c1ef11 100644 --- a/src/main/generated/data/arsmagicalegacy/am_skills/zone.json +++ b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/skill/zone.json @@ -2,6 +2,7 @@ "cost": { "arsmagicalegacy:red": 1 }, + "hidden": false, "occulus_tab": "arsmagicalegacy:defense", "parents": [ "arsmagicalegacy:dispel" diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/clay_to_sand_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/clay_to_sand_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/clay_to_sand_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/clay_to_sand_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/deepslate_bricks_to_cracked_deepslate_bricks_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/deepslate_bricks_to_cracked_deepslate_bricks_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/deepslate_bricks_to_cracked_deepslate_bricks_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/deepslate_bricks_to_cracked_deepslate_bricks_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/deepslate_tiles_to_cracked_deepslate_tiles_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/deepslate_tiles_to_cracked_deepslate_tiles_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/deepslate_tiles_to_cracked_deepslate_tiles_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/deepslate_tiles_to_cracked_deepslate_tiles_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/dirt_to_sand_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/dirt_to_sand_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/dirt_to_sand_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/dirt_to_sand_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/gravel_to_sand_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/gravel_to_sand_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/gravel_to_sand_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/gravel_to_sand_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/infested_stone_bricks_to_infested_cracked_stone_bricks_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/infested_stone_bricks_to_infested_cracked_stone_bricks_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/infested_stone_bricks_to_infested_cracked_stone_bricks_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/infested_stone_bricks_to_infested_cracked_stone_bricks_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/infested_stone_to_infested_cobblestone_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/infested_stone_to_infested_cobblestone_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/infested_stone_to_infested_cobblestone_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/infested_stone_to_infested_cobblestone_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/nether_bricks_to_cracked_nether_bricks_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/nether_bricks_to_cracked_nether_bricks_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/nether_bricks_to_cracked_nether_bricks_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/nether_bricks_to_cracked_nether_bricks_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/polished_blackstone_bricks_to_cracked_polished_blackstone_bricks_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/quartz_block_to_smooth_quartz_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/quartz_block_to_smooth_quartz_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/quartz_block_to_smooth_quartz_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/quartz_block_to_smooth_quartz_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/red_sandstone_to_smooth_red_sandstone_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/red_sandstone_to_smooth_red_sandstone_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/red_sandstone_to_smooth_red_sandstone_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/red_sandstone_to_smooth_red_sandstone_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/sandstone_to_smooth_sandstone_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/sandstone_to_smooth_sandstone_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/sandstone_to_smooth_sandstone_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/sandstone_to_smooth_sandstone_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/small_flowers_to_dead_bush_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/small_flowers_to_dead_bush_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/small_flowers_to_dead_bush_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/small_flowers_to_dead_bush_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/stone_bricks_to_cracked_stone_bricks_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/stone_bricks_to_cracked_stone_bricks_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/stone_bricks_to_cracked_stone_bricks_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/stone_bricks_to_cracked_stone_bricks_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/spell_transformations/stone_to_cobblestone_drought.json b/src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/stone_to_cobblestone_drought.json similarity index 100% rename from src/main/generated/data/arsmagicalegacy/spell_transformations/stone_to_cobblestone_drought.json rename to src/main/generated/data/arsmagicalegacy/arsmagicalegacy/spell_transformation/stone_to_cobblestone_drought.json diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/aum.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/aum.json new file mode 100644 index 000000000..d5a39805f --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/aum.json @@ -0,0 +1,12 @@ +{ + "type": "forge:add_features", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + "#minecraft:is_forest" + ] + }, + "features": "arsmagicalegacy:aum", + "step": "vegetal_decoration" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/cerublossom.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/cerublossom.json new file mode 100644 index 000000000..f657732f7 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/cerublossom.json @@ -0,0 +1,18 @@ +{ + "type": "forge:add_features", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + { + "type": "forge:or", + "values": [ + "#minecraft:is_jungle", + "#forge:is_swamp" + ] + } + ] + }, + "features": "arsmagicalegacy:cerublossom", + "step": "vegetal_decoration" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/chimerite_ore.json new file mode 100644 index 000000000..4688c945e --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/chimerite_ore.json @@ -0,0 +1,6 @@ +{ + "type": "forge:add_features", + "biomes": "#minecraft:is_overworld", + "features": "arsmagicalegacy:chimerite_ore", + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/desert_nova.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/desert_nova.json new file mode 100644 index 000000000..21fe8fb2e --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/desert_nova.json @@ -0,0 +1,12 @@ +{ + "type": "forge:add_features", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + "#forge:is_sandy" + ] + }, + "features": "arsmagicalegacy:desert_nova", + "step": "vegetal_decoration" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/dryad.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/dryad.json new file mode 100644 index 000000000..20df76dc5 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/dryad.json @@ -0,0 +1,16 @@ +{ + "type": "forge:add_spawns", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + "#minecraft:is_forest" + ] + }, + "spawners": { + "type": "arsmagicalegacy:dryad", + "maxCount": 25, + "minCount": 15, + "weight": 2 + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/liquid_essence_lake.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/liquid_essence_lake.json new file mode 100644 index 000000000..9eb99be73 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/liquid_essence_lake.json @@ -0,0 +1,6 @@ +{ + "type": "forge:add_features", + "biomes": "#minecraft:is_overworld", + "features": "arsmagicalegacy:liquid_essence_lake", + "step": "lakes" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/tarma_root.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/tarma_root.json new file mode 100644 index 000000000..25febc6df --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/tarma_root.json @@ -0,0 +1,19 @@ +{ + "type": "forge:add_features", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + { + "type": "forge:or", + "values": [ + "#minecraft:is_mountain", + "#minecraft:is_hill", + "#forge:is_underground" + ] + } + ] + }, + "features": "arsmagicalegacy:tarma_root", + "step": "vegetal_decoration" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_extra_ore.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_extra_ore.json new file mode 100644 index 000000000..e988b2a22 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_extra_ore.json @@ -0,0 +1,12 @@ +{ + "type": "forge:add_features", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + "#minecraft:is_mountain" + ] + }, + "features": "arsmagicalegacy:topaz_ore_extra", + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_ore.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_ore.json new file mode 100644 index 000000000..4548bd834 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/topaz_ore.json @@ -0,0 +1,6 @@ +{ + "type": "forge:add_features", + "biomes": "#minecraft:is_overworld", + "features": "arsmagicalegacy:topaz_ore", + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/vinteum_ore.json new file mode 100644 index 000000000..b15569265 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/vinteum_ore.json @@ -0,0 +1,6 @@ +{ + "type": "forge:add_features", + "biomes": "#minecraft:is_overworld", + "features": "arsmagicalegacy:vinteum_ore", + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/wakebloom.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/wakebloom.json new file mode 100644 index 000000000..2e50a43db --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/wakebloom.json @@ -0,0 +1,18 @@ +{ + "type": "forge:add_features", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + { + "type": "forge:or", + "values": [ + "#minecraft:is_jungle", + "#forge:is_swamp" + ] + } + ] + }, + "features": "arsmagicalegacy:wakebloom", + "step": "vegetal_decoration" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/witchwood_tree.json b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/witchwood_tree.json new file mode 100644 index 000000000..f416a6db6 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/forge/biome_modifier/witchwood_tree.json @@ -0,0 +1,12 @@ +{ + "type": "forge:add_features", + "biomes": { + "type": "forge:and", + "values": [ + "#minecraft:is_overworld", + "#forge:is_spooky" + ] + }, + "features": "arsmagicalegacy:trees_witchwood", + "step": "vegetal_decoration" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/obelisk_fuel/liquid_essence_bucket.json b/src/main/generated/data/arsmagicalegacy/obelisk_fuel/liquid_essence_bucket.json new file mode 100644 index 000000000..8598fb070 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/obelisk_fuel/liquid_essence_bucket.json @@ -0,0 +1,7 @@ +{ + "burn_time": 1000, + "etherium_per_tick": 2, + "input": { + "item": "arsmagicalegacy:liquid_essence_bucket" + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/arcane_compendium.json b/src/main/generated/data/arsmagicalegacy/recipes/arcane_compendium.json index 6ce56f5d0..ebf223822 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/arcane_compendium.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/arcane_compendium.json @@ -5,7 +5,7 @@ "item": "minecraft:book" }, { - "item": "arsmagicalegacy:vinteum_dust" + "item": "arsmagicalegacy:liquid_essence_bucket" } ], "result": { diff --git a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_boots.json b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_boots.json index 93134bb28..12dbdfa59 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_boots.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_boots.json @@ -2,8 +2,7 @@ "type": "minecraft:crafting_shaped", "key": { "E": { - "type": "forge:nbt", - "count": 1, + "type": "forge:partial_nbt", "item": "arsmagicalegacy:affinity_essence", "nbt": "{\"arsmagicalegacy:affinity\":\"arsmagicalegacy:water\"}" }, diff --git a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_chestplate.json b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_chestplate.json index 4eec708a5..0bf9bff33 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_chestplate.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_chestplate.json @@ -2,8 +2,7 @@ "type": "minecraft:crafting_shaped", "key": { "E": { - "type": "forge:nbt", - "count": 1, + "type": "forge:partial_nbt", "item": "arsmagicalegacy:affinity_essence", "nbt": "{\"arsmagicalegacy:affinity\":\"arsmagicalegacy:earth\"}" }, diff --git a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_helmet.json b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_helmet.json index fb1c65495..ccb17c44f 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_helmet.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_helmet.json @@ -2,8 +2,7 @@ "type": "minecraft:crafting_shaped", "key": { "E": { - "type": "forge:nbt", - "count": 1, + "type": "forge:partial_nbt", "item": "arsmagicalegacy:affinity_essence", "nbt": "{\"arsmagicalegacy:affinity\":\"arsmagicalegacy:air\"}" }, diff --git a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_leggings.json b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_leggings.json index 363ab843c..0d4f2bca5 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/battlemage_leggings.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/battlemage_leggings.json @@ -2,8 +2,7 @@ "type": "minecraft:crafting_shaped", "key": { "E": { - "type": "forge:nbt", - "count": 1, + "type": "forge:partial_nbt", "item": "arsmagicalegacy:affinity_essence", "nbt": "{\"arsmagicalegacy:affinity\":\"arsmagicalegacy:fire\"}" }, diff --git a/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_chimerite_ore.json new file mode 100644 index 000000000..f8a8cb51e --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_chimerite_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "chimerite_dust", + "ingredient": { + "item": "arsmagicalegacy:chimerite_ore" + }, + "result": "arsmagicalegacy:chimerite" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_deepslate_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_deepslate_chimerite_ore.json new file mode 100644 index 000000000..5eee8a9a7 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_blasting_deepslate_chimerite_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "chimerite_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_chimerite_ore" + }, + "result": "arsmagicalegacy:chimerite" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_chimerite_ore.json new file mode 100644 index 000000000..3485edfe4 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_chimerite_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "chimerite_dust", + "ingredient": { + "item": "arsmagicalegacy:chimerite_ore" + }, + "result": "arsmagicalegacy:chimerite" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_deepslate_chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_deepslate_chimerite_ore.json new file mode 100644 index 000000000..ea42df8e3 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/chimerite_from_smelting_deepslate_chimerite_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "chimerite_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_chimerite_ore" + }, + "result": "arsmagicalegacy:chimerite" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/mana_martini.json b/src/main/generated/data/arsmagicalegacy/recipes/mana_martini.json index f95a41b23..32ea56153 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/mana_martini.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/mana_martini.json @@ -14,8 +14,7 @@ "item": "minecraft:sugar" }, { - "type": "forge:nbt", - "count": 1, + "type": "forge:partial_nbt", "item": "minecraft:potion", "nbt": "{Potion:\"minecraft:water\"}" } diff --git a/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_deepslate_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_deepslate_moonstone_ore.json new file mode 100644 index 000000000..053e4b271 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_deepslate_moonstone_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "moonstone_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_moonstone_ore" + }, + "result": "arsmagicalegacy:moonstone" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_moonstone_ore.json new file mode 100644 index 000000000..c630c4b65 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_blasting_moonstone_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "moonstone_dust", + "ingredient": { + "item": "arsmagicalegacy:moonstone_ore" + }, + "result": "arsmagicalegacy:moonstone" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_deepslate_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_deepslate_moonstone_ore.json new file mode 100644 index 000000000..b7e55b022 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_deepslate_moonstone_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "moonstone_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_moonstone_ore" + }, + "result": "arsmagicalegacy:moonstone" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_moonstone_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_moonstone_ore.json new file mode 100644 index 000000000..d2471c874 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/moonstone_from_smelting_moonstone_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "moonstone_dust", + "ingredient": { + "item": "arsmagicalegacy:moonstone_ore" + }, + "result": "arsmagicalegacy:moonstone" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_deepslate_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_deepslate_topaz_ore.json new file mode 100644 index 000000000..3c4702f38 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_deepslate_topaz_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "topaz_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_topaz_ore" + }, + "result": "arsmagicalegacy:topaz" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_topaz_ore.json new file mode 100644 index 000000000..03a55d437 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_blasting_topaz_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "topaz_dust", + "ingredient": { + "item": "arsmagicalegacy:topaz_ore" + }, + "result": "arsmagicalegacy:topaz" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_deepslate_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_deepslate_topaz_ore.json new file mode 100644 index 000000000..ee689494a --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_deepslate_topaz_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "topaz_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_topaz_ore" + }, + "result": "arsmagicalegacy:topaz" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_topaz_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_topaz_ore.json new file mode 100644 index 000000000..235638c97 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/topaz_from_smelting_topaz_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "topaz_dust", + "ingredient": { + "item": "arsmagicalegacy:topaz_ore" + }, + "result": "arsmagicalegacy:topaz" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_deepslate_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_deepslate_vinteum_ore.json new file mode 100644 index 000000000..122ddb1c2 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_deepslate_vinteum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "vinteum_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_vinteum_ore" + }, + "result": "arsmagicalegacy:vinteum_dust" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_vinteum_ore.json new file mode 100644 index 000000000..90d7ec39a --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_blasting_vinteum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "cookingtime": 100, + "experience": 0.7, + "group": "vinteum_dust", + "ingredient": { + "item": "arsmagicalegacy:vinteum_ore" + }, + "result": "arsmagicalegacy:vinteum_dust" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_deepslate_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_deepslate_vinteum_ore.json new file mode 100644 index 000000000..2cf25d0e6 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_deepslate_vinteum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "vinteum_dust", + "ingredient": { + "item": "arsmagicalegacy:deepslate_vinteum_ore" + }, + "result": "arsmagicalegacy:vinteum_dust" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_vinteum_ore.json new file mode 100644 index 000000000..914311852 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/recipes/vinteum_dust_from_smelting_vinteum_ore.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "cookingtime": 200, + "experience": 0.7, + "group": "vinteum_dust", + "ingredient": { + "item": "arsmagicalegacy:vinteum_ore" + }, + "result": "arsmagicalegacy:vinteum_dust" +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence.json b/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence.json index 7eb1d4f53..4583c8a15 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence.json @@ -3,15 +3,15 @@ "group": "wooden_fence", "key": { "#": { - "item": "arsmagicalegacy:witchwood_planks" - }, - "-": { "tag": "forge:rods/wooden" + }, + "W": { + "item": "arsmagicalegacy:witchwood_planks" } }, "pattern": [ - "#-#", - "#-#" + "W#W", + "W#W" ], "result": { "count": 3, diff --git a/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence_gate.json b/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence_gate.json index eafeaa37c..82107c066 100644 --- a/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence_gate.json +++ b/src/main/generated/data/arsmagicalegacy/recipes/witchwood_fence_gate.json @@ -3,15 +3,15 @@ "group": "wooden_fence_gate", "key": { "#": { - "item": "arsmagicalegacy:witchwood_planks" - }, - "-": { "tag": "forge:rods/wooden" + }, + "W": { + "item": "arsmagicalegacy:witchwood_planks" } }, "pattern": [ - "-#-", - "-#-" + "#W#", + "#W#" ], "result": { "item": "arsmagicalegacy:witchwood_fence_gate" diff --git a/src/main/generated/data/arsmagicalegacy/spell_parts/aoe.json b/src/main/generated/data/arsmagicalegacy/spell_parts/aoe.json index b6a4b965a..9d1ca39fc 100644 --- a/src/main/generated/data/arsmagicalegacy/spell_parts/aoe.json +++ b/src/main/generated/data/arsmagicalegacy/spell_parts/aoe.json @@ -24,9 +24,9 @@ "type": "arsmagicalegacy:etherium", "amount": 1, "types": [ - "LIGHT", "NEUTRAL", - "DARK" + "DARK", + "LIGHT" ] } ] diff --git a/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_damage.json b/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_damage.json index 57e1ef286..c1bb307c3 100644 --- a/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_damage.json +++ b/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_damage.json @@ -31,9 +31,9 @@ "type": "arsmagicalegacy:etherium", "amount": 5000, "types": [ - "LIGHT", "NEUTRAL", - "DARK" + "DARK", + "LIGHT" ] } ] diff --git a/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fall.json b/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fall.json index b0567e285..7be2f9906 100644 --- a/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fall.json +++ b/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fall.json @@ -38,9 +38,9 @@ "type": "arsmagicalegacy:etherium", "amount": 5000, "types": [ - "LIGHT", "NEUTRAL", - "DARK" + "DARK", + "LIGHT" ] } ] diff --git a/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fire.json b/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fire.json index 0626a2683..48c1c5d0f 100644 --- a/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fire.json +++ b/src/main/generated/data/arsmagicalegacy/spell_parts/contingency_fire.json @@ -31,9 +31,9 @@ "type": "arsmagicalegacy:etherium", "amount": 5000, "types": [ - "LIGHT", "NEUTRAL", - "DARK" + "DARK", + "LIGHT" ] } ] diff --git a/src/main/generated/data/arsmagicalegacy/spell_parts/wall.json b/src/main/generated/data/arsmagicalegacy/spell_parts/wall.json index 16498b974..54798d330 100644 --- a/src/main/generated/data/arsmagicalegacy/spell_parts/wall.json +++ b/src/main/generated/data/arsmagicalegacy/spell_parts/wall.json @@ -35,9 +35,9 @@ "type": "arsmagicalegacy:etherium", "amount": 2500, "types": [ - "LIGHT", "NEUTRAL", - "DARK" + "DARK", + "LIGHT" ] } ] diff --git a/src/main/generated/data/arsmagicalegacy/spell_parts/wave.json b/src/main/generated/data/arsmagicalegacy/spell_parts/wave.json index 4a491218b..1f0d8ad25 100644 --- a/src/main/generated/data/arsmagicalegacy/spell_parts/wave.json +++ b/src/main/generated/data/arsmagicalegacy/spell_parts/wave.json @@ -21,9 +21,9 @@ "type": "arsmagicalegacy:etherium", "amount": 2500, "types": [ - "LIGHT", "NEUTRAL", - "DARK" + "DARK", + "LIGHT" ] } ] diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/aum.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/aum.json new file mode 100644 index 000000000..d2adb4799 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/aum.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:random_patch", + "config": { + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:aum" + } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + } + } + ] + }, + "tries": 64, + "xz_spread": 7, + "y_spread": 3 + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/cerublossom.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/cerublossom.json new file mode 100644 index 000000000..af6ba2149 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/cerublossom.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:random_patch", + "config": { + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:cerublossom" + } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + } + } + ] + }, + "tries": 64, + "xz_spread": 7, + "y_spread": 3 + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/chimerite_ore.json new file mode 100644 index 000000000..a7a312843 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/chimerite_ore.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 7, + "targets": [ + { + "state": { + "Name": "arsmagicalegacy:chimerite_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "arsmagicalegacy:deepslate_chimerite_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/desert_nova.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/desert_nova.json new file mode 100644 index 000000000..16c2bed61 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/desert_nova.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:random_patch", + "config": { + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:desert_nova" + } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + } + } + ] + }, + "tries": 64, + "xz_spread": 7, + "y_spread": 3 + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/liquid_essence_lake.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/liquid_essence_lake.json new file mode 100644 index 000000000..d5ea35bc6 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/liquid_essence_lake.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:lake", + "config": { + "barrier": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + }, + "fluid": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:liquid_essence", + "Properties": { + "level": "0" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/tarma_root.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/tarma_root.json new file mode 100644 index 000000000..0b57de96e --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/tarma_root.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:random_patch", + "config": { + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:tarma_root" + } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + } + } + ] + }, + "tries": 64, + "xz_spread": 7, + "y_spread": 3 + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore.json new file mode 100644 index 000000000..c62ce6204 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.5, + "size": 4, + "targets": [ + { + "state": { + "Name": "arsmagicalegacy:topaz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "arsmagicalegacy:deepslate_topaz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore_extra.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore_extra.json new file mode 100644 index 000000000..474a7539e --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/topaz_ore_extra.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 4, + "targets": [ + { + "state": { + "Name": "arsmagicalegacy:topaz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "arsmagicalegacy:deepslate_topaz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/vinteum_ore.json new file mode 100644 index 000000000..cb4a10024 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/vinteum_ore.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 10, + "targets": [ + { + "state": { + "Name": "arsmagicalegacy:vinteum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "arsmagicalegacy:deepslate_vinteum_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/wakebloom.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/wakebloom.json new file mode 100644 index 000000000..82f483f5d --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/wakebloom.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:random_patch", + "config": { + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:wakebloom" + } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + } + } + ] + }, + "tries": 64, + "xz_spread": 7, + "y_spread": 3 + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/witchwood_tree.json b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/witchwood_tree.json new file mode 100644 index 000000000..68a195ca2 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/configured_feature/witchwood_tree.json @@ -0,0 +1,53 @@ +{ + "type": "minecraft:tree", + "config": { + "decorators": [], + "dirt_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:dirt" + } + }, + "foliage_placer": { + "type": "minecraft:dark_oak_foliage_placer", + "offset": 1, + "radius": 1 + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:witchwood_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "force_dirt": false, + "ignore_vines": true, + "minimum_size": { + "type": "minecraft:three_layers_feature_size", + "limit": 1, + "lower_size": 1, + "middle_size": 1, + "upper_limit": 2, + "upper_size": 2 + }, + "trunk_placer": { + "type": "minecraft:dark_oak_trunk_placer", + "base_height": 9, + "height_rand_a": 3, + "height_rand_b": 1 + }, + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "arsmagicalegacy:witchwood_log", + "Properties": { + "axis": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/aum.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/aum.json new file mode 100644 index 000000000..8eb0f65b2 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/aum.json @@ -0,0 +1,19 @@ +{ + "feature": "arsmagicalegacy:aum", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 32 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/cerublossom.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/cerublossom.json new file mode 100644 index 000000000..fbfad82f4 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/cerublossom.json @@ -0,0 +1,19 @@ +{ + "feature": "arsmagicalegacy:cerublossom", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 32 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/chimerite_ore.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/chimerite_ore.json new file mode 100644 index 000000000..8858d7793 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/chimerite_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "arsmagicalegacy:chimerite_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 6 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 16 + }, + "min_inclusive": { + "absolute": -16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/desert_nova.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/desert_nova.json new file mode 100644 index 000000000..547a68027 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/desert_nova.json @@ -0,0 +1,19 @@ +{ + "feature": "arsmagicalegacy:desert_nova", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 32 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/liquid_essence_lake.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/liquid_essence_lake.json new file mode 100644 index 000000000..4d7be2ab7 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/liquid_essence_lake.json @@ -0,0 +1,19 @@ +{ + "feature": "arsmagicalegacy:liquid_essence_lake", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 500 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/tarma_root.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/tarma_root.json new file mode 100644 index 000000000..a71b09dc0 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/tarma_root.json @@ -0,0 +1,19 @@ +{ + "feature": "arsmagicalegacy:tarma_root", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 32 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore.json new file mode 100644 index 000000000..267416b0c --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "arsmagicalegacy:topaz_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 7 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "above_bottom": 80 + }, + "min_inclusive": { + "above_bottom": -80 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore_extra.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore_extra.json new file mode 100644 index 000000000..09dc5ed4f --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/topaz_ore_extra.json @@ -0,0 +1,27 @@ +{ + "feature": "arsmagicalegacy:topaz_ore_extra", + "placement": [ + { + "type": "minecraft:count", + "count": 100 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 480 + }, + "min_inclusive": { + "absolute": -16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/trees_witchwood.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/trees_witchwood.json new file mode 100644 index 000000000..00405b897 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/trees_witchwood.json @@ -0,0 +1,51 @@ +{ + "feature": "arsmagicalegacy:witchwood_tree", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:weighted_list", + "distribution": [ + { + "data": 1, + "weight": 9 + }, + { + "data": 1, + "weight": 1 + } + ] + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:surface_water_depth_filter", + "max_water_depth": 0 + }, + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR" + }, + { + "type": "minecraft:biome" + }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:would_survive", + "state": { + "Name": "arsmagicalegacy:witchwood_sapling", + "Properties": { + "stage": "0" + } + } + } + }, + { + "type": "minecraft:rarity_filter", + "chance": 8 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/vinteum_ore.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/vinteum_ore.json new file mode 100644 index 000000000..17479f694 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/vinteum_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "arsmagicalegacy:vinteum_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 8 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 80 + }, + "min_inclusive": { + "absolute": -16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/wakebloom.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/wakebloom.json new file mode 100644 index 000000000..817c0b0b8 --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/wakebloom.json @@ -0,0 +1,19 @@ +{ + "feature": "arsmagicalegacy:wakebloom", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 32 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "MOTION_BLOCKING" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/witchwood_tree.json b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/witchwood_tree.json new file mode 100644 index 000000000..c80e7288f --- /dev/null +++ b/src/main/generated/data/arsmagicalegacy/worldgen/placed_feature/witchwood_tree.json @@ -0,0 +1,17 @@ +{ + "feature": "arsmagicalegacy:witchwood_tree", + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:would_survive", + "state": { + "Name": "arsmagicalegacy:witchwood_sapling", + "Properties": { + "stage": "0" + } + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaAPIImpl.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaAPIImpl.java index e52f9a278..f2791fe13 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaAPIImpl.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaAPIImpl.java @@ -1,9 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbilityManager; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.etherium.IEtheriumHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.ContingencyType; @@ -12,10 +10,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IMagicHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IManaHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IRiftHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTabManager; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualEffect; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillManager; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellDataManager; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellHelper; @@ -24,7 +23,6 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ShapeGroup; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellStack; import com.github.minecraftschurlimods.arsmagicalegacy.client.ClientHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ability.AbilityManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.affinity.AffinityHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.etherium.EtheriumHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; @@ -34,14 +32,13 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.MagicHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.ManaHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.RiftHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.OcculusTabManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.Spell; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.SpellDataManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.SpellHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.SpellTransformationManager; import com.github.minecraftschurlimods.arsmagicalegacy.network.OpenOcculusGuiPacket; +import com.mojang.serialization.Codec; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -70,12 +67,12 @@ public ItemStack getBookStack() { } @Override - public IForgeRegistry getSkillPointRegistry() { + public IForgeRegistry getSkillPointRegistry() { return AMRegistries.SKILL_POINT_REGISTRY.get(); } @Override - public IForgeRegistry getAffinityRegistry() { + public IForgeRegistry getAffinityRegistry() { return AMRegistries.AFFINITY_REGISTRY.get(); } @@ -84,34 +81,29 @@ public IForgeRegistry getSpellPartRegistry() { return AMRegistries.SPELL_PART_REGISTRY.get(); } - @Override - public IForgeRegistry getAbilityRegistry() { - return AMRegistries.ABILITY_REGISTRY.get(); - } - @Override public IForgeRegistry getContingencyTypeRegistry() { return AMRegistries.CONTINGENCY_TYPE_REGISTRY.get(); } @Override - public ISkillManager getSkillManager() { - return SkillManager.instance(); + public IForgeRegistry> getRitualTriggerTypeRegistry() { + return AMRegistries.RITUAL_TRIGGER_TYPE_REGISTRY.get(); } @Override - public IOcculusTabManager getOcculusTabManager() { - return OcculusTabManager.instance(); + public IForgeRegistry> getRitualRequirementTypeRegistry() { + return AMRegistries.RITUAL_REQUIREMENT_TYPE_REGISTRY.get(); } @Override - public ISpellDataManager getSpellDataManager() { - return SpellDataManager.instance(); + public IForgeRegistry> getRitualEffectTypeRegistry() { + return AMRegistries.RITUAL_EFFECT_TYPE_REGISTRY.get(); } @Override - public IAbilityManager getAbilityManager() { - return AbilityManager.instance(); + public ISpellDataManager getSpellDataManager() { + return SpellDataManager.instance(); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaLegacy.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaLegacy.java index b5fd577cc..63b79ea26 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaLegacy.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/ArsMagicaLegacy.java @@ -2,20 +2,15 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.client.DistProxy; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ability.AbilityManager; -import com.github.minecraftschurlimods.arsmagicalegacy.common.handler.EventHandler; import com.github.minecraftschurlimods.arsmagicalegacy.common.affinity.AffinityHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.block.altar.AltarMaterialManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.block.obelisk.ObeliskFuelManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.etherium.EtheriumHelper; +import com.github.minecraftschurlimods.arsmagicalegacy.common.handler.EventHandler; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries; import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.BurnoutHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.MagicHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.ManaHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualManager; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.OcculusTabManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.SpellDataManager; import com.github.minecraftschurlimods.arsmagicalegacy.compat.CompatManager; import com.github.minecraftschurlimods.arsmagicalegacy.network.BEClientSyncPacket; @@ -67,13 +62,8 @@ public ArsMagicaLegacy() { Config.init(); registerNetworkPackets(); EtheriumHelper.instance(); - OcculusTabManager.instance(); - SkillManager.instance(); SpellDataManager.instance(); - AltarMaterialManager.instance(); ObeliskFuelManager.instance(); - RitualManager.instance(); - AbilityManager.instance(); CompatManager.preInit(); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/Config.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/Config.java index c1d84f4b9..d8a784d80 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/Config.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/Config.java @@ -1,6 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy; import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; +import com.github.minecraftschurlimods.betterhudlib.HUDElement; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.config.ModConfig; @@ -39,18 +40,102 @@ static synchronized void init() { * Class holding the client config values. */ public static final class Client { - public final ForgeConfigSpec.IntValue HUD_HORIZONTAL_OFFSET; - public final ForgeConfigSpec.IntValue HUD_VERTICAL_OFFSET; + public final ForgeConfigSpec.IntValue MANA_X; + public final ForgeConfigSpec.IntValue MANA_Y; + public final ForgeConfigSpec.EnumValue MANA_ANCHOR_X; + public final ForgeConfigSpec.EnumValue MANA_ANCHOR_Y; + public final ForgeConfigSpec.IntValue BURNOUT_X; + public final ForgeConfigSpec.IntValue BURNOUT_Y; + public final ForgeConfigSpec.EnumValue BURNOUT_ANCHOR_X; + public final ForgeConfigSpec.EnumValue BURNOUT_ANCHOR_Y; + public final ForgeConfigSpec.IntValue XP_X; + public final ForgeConfigSpec.IntValue XP_Y; + public final ForgeConfigSpec.EnumValue XP_ANCHOR_X; + public final ForgeConfigSpec.EnumValue XP_ANCHOR_Y; + public final ForgeConfigSpec.IntValue SPELL_BOOK_X; + public final ForgeConfigSpec.IntValue SPELL_BOOK_Y; + public final ForgeConfigSpec.EnumValue SPELL_BOOK_ANCHOR_X; + public final ForgeConfigSpec.EnumValue SPELL_BOOK_ANCHOR_Y; private Client(ForgeConfigSpec.Builder builder) { - HUD_HORIZONTAL_OFFSET = builder - .comment("Horizontal offset of the hud, from the center of the screen.") - .translation(TranslationConstants.CONFIG + "hud_horizontal_offset") - .defineInRange("hud_horizontal_offset", -210, Short.MIN_VALUE, Short.MAX_VALUE); - HUD_VERTICAL_OFFSET = builder - .comment("Vertical offset of the hud, from the bottom of the screen.") - .translation(TranslationConstants.CONFIG + "hud_vertical_offset") - .defineInRange("hud_vertical_offset", 3, 0, Short.MAX_VALUE); + builder.comment("HUD Elements").push("hud_elements"); + builder.push("mana"); + MANA_X = builder + .comment("Horizontal position of the mana bar.") + .translation(TranslationConstants.CONFIG + "mana_x") + .defineInRange("mana_x", 210, Short.MIN_VALUE, Short.MAX_VALUE); + MANA_Y = builder + .comment("Vertical position of the mana bar.") + .translation(TranslationConstants.CONFIG + "mana_y") + .defineInRange("mana_y", 23, Short.MIN_VALUE, Short.MAX_VALUE); + MANA_ANCHOR_X = builder + .comment("Horizontal anchor of the mana bar.") + .translation(TranslationConstants.CONFIG + "mana_anchor_x") + .defineEnum("mana_anchor_x", HUDElement.AnchorX.CENTER); + MANA_ANCHOR_Y = builder + .comment("Horizontal anchor of the mana bar.") + .translation(TranslationConstants.CONFIG + "mana_anchor_y") + .defineEnum("mana_anchor_y", HUDElement.AnchorY.BOTTOM); + builder.pop(); + builder.push("burnout"); + BURNOUT_X = builder + .comment("Horizontal position of the burnout bar.") + .translation(TranslationConstants.CONFIG + "burnout_x") + .defineInRange("burnout_x", 210, Short.MIN_VALUE, Short.MAX_VALUE); + BURNOUT_Y = builder + .comment("Vertical position of the burnout bar.") + .translation(TranslationConstants.CONFIG + "burnout_y") + .defineInRange("burnout_y", 13, Short.MIN_VALUE, Short.MAX_VALUE); + BURNOUT_ANCHOR_X = builder + .comment("Horizontal anchor of the burnout bar.") + .translation(TranslationConstants.CONFIG + "burnout_anchor_x") + .defineEnum("burnout_anchor_x", HUDElement.AnchorX.CENTER); + BURNOUT_ANCHOR_Y = builder + .comment("Horizontal anchor of the burnout bar.") + .translation(TranslationConstants.CONFIG + "burnout_anchor_y") + .defineEnum("burnout_anchor_y", HUDElement.AnchorY.BOTTOM); + builder.pop(); + builder.push("xp"); + XP_X = builder + .comment("Horizontal position of the magic xp bar.") + .translation(TranslationConstants.CONFIG + "xp_x") + .defineInRange("xp_x", 210, Short.MIN_VALUE, Short.MAX_VALUE); + XP_Y = builder + .comment("Vertical position of the magic xp bar.") + .translation(TranslationConstants.CONFIG + "xp_y") + .defineInRange("xp_y", 33, Short.MIN_VALUE, Short.MAX_VALUE); + XP_ANCHOR_X = builder + .comment("Horizontal anchor of the magic xp bar.") + .translation(TranslationConstants.CONFIG + "xp_anchor_x") + .defineEnum("xp_anchor_x", HUDElement.AnchorX.CENTER); + XP_ANCHOR_Y = builder + .comment("Horizontal anchor of the magic xp bar.") + .translation(TranslationConstants.CONFIG + "xp_anchor_y") + .defineEnum("xp_anchor_y", HUDElement.AnchorY.BOTTOM); + builder.pop(); + builder.push("spell_book"); + SPELL_BOOK_X = builder + .comment("Horizontal position of the spell book hud.") + .translation(TranslationConstants.CONFIG + "spell_book_x") + .defineInRange("spell_book_x", 100, Short.MIN_VALUE, Short.MAX_VALUE); + SPELL_BOOK_Y = builder + .comment("Vertical position of the spell book hud.") + .translation(TranslationConstants.CONFIG + "spell_book_y") + .defineInRange("spell_book_y", 19, Short.MIN_VALUE, Short.MAX_VALUE); + SPELL_BOOK_ANCHOR_X = builder + .comment("Horizontal anchor of the spell book hud.") + .translation(TranslationConstants.CONFIG + "spell_book_anchor_x") + .defineEnum("spell_book_anchor_x", HUDElement.AnchorX.CENTER); + SPELL_BOOK_ANCHOR_Y = builder + .comment("Horizontal anchor of the spell book hud.") + .translation(TranslationConstants.CONFIG + "spell_book_anchor_y") + .defineEnum("spell_book_anchor_y", HUDElement.AnchorY.BOTTOM); + builder.pop(); + builder.pop(); + } + + public void save() { + clientSpec.save(); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientHelper.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientHelper.java index e1cb4efd2..1bac82c66 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientHelper.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientHelper.java @@ -4,9 +4,14 @@ import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.occulus.OcculusScreen; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.core.RegistryAccess; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.loading.FMLEnvironment; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public final class ClientHelper { @@ -58,4 +63,12 @@ public static boolean showAdvancedTooltips() { public static void updateStepHeight(Player player, float stepHeight) { player.maxUpStep = stepHeight; } + + @NotNull + public static RegistryAccess getRegistryAccess() { + if (FMLEnvironment.dist == Dist.DEDICATED_SERVER) return RegistryAccess.BUILTIN.get(); + ClientPacketListener connection = Minecraft.getInstance().getConnection(); + if (connection == null) return RegistryAccess.BUILTIN.get(); + return connection.registryAccess(); + } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientInit.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientInit.java index 072b98066..ce11c14eb 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientInit.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/ClientInit.java @@ -2,10 +2,10 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityItem; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPointItem; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.InscriptionTableScreen; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.ObeliskScreen; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.RiftScreen; @@ -54,11 +54,13 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlockEntities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlocks; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMEntities; +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMFluids; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMMenuTypes; import com.github.minecraftschurlimods.arsmagicalegacy.common.item.spellbook.SpellBookItem; import com.github.minecraftschurlimods.arsmagicalegacy.compat.CompatManager; import com.github.minecraftschurlimods.arsmagicalegacy.network.SpellBookNextSpellPacket; +import com.github.minecraftschurlimods.betterhudlib.HUDManager; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; @@ -70,12 +72,12 @@ import net.minecraft.world.item.DyeableLeatherItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.event.ModelEvent; -import net.minecraftforge.client.event.RegisterColorHandlersEvent; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.client.event.ModelEvent; import net.minecraftforge.client.event.ModelEvent.BakingCompleted; import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; +import net.minecraftforge.client.event.RegisterColorHandlersEvent; import net.minecraftforge.client.event.RegisterGuiOverlaysEvent; import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.common.MinecraftForge; @@ -97,6 +99,7 @@ public final class ClientInit { public static void init() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); Keybinds.init(modEventBus); + HUDManager.enableKeybind(); modEventBus.addListener(ClientInit::clientSetup); modEventBus.addListener(ClientInit::registerClientReloadListeners); modEventBus.addListener(ClientInit::modelRegister); @@ -114,6 +117,8 @@ public static void init() { private static void clientSetup(FMLClientSetupEvent event) { registerMenuScreens(); CompatManager.clientInit(event); + ItemBlockRenderTypes.setRenderLayer(AMFluids.LIQUID_ESSENCE.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AMFluids.FLOWING_LIQUID_ESSENCE.get(), RenderType.translucent()); } private static void registerMenuScreens() { @@ -143,15 +148,15 @@ private static void modelRegister(ModelEvent.RegisterAdditional event) { if (itemId == null) continue; var api = ArsMagicaAPI.get(); if (item instanceof IAffinityItem) { - IForgeRegistry affinities = api.getAffinityRegistry(); - for (IAffinity affinity : affinities) { - if (!IAffinity.NONE.equals(affinities.getKey(affinity))) { + IForgeRegistry affinities = api.getAffinityRegistry(); + for (Affinity affinity : affinities) { + if (!Affinity.NONE.equals(affinities.getKey(affinity))) { event.register(new ResourceLocation(affinity.getId().getNamespace(), "item/" + itemId.getPath() + "_" + affinity.getId().getPath())); } } } if (item instanceof ISkillPointItem) { - for (ISkillPoint skillPoint : api.getSkillPointRegistry()) { + for (SkillPoint skillPoint : api.getSkillPointRegistry()) { event.register(new ResourceLocation(skillPoint.getId().getNamespace(), "item/" + itemId.getPath() + "_" + skillPoint.getId().getPath())); } } @@ -213,6 +218,7 @@ private static void registerRenderers(EntityRenderersEvent.RegisterRenderers eve private static void entityRenderPre(RenderLivingEvent.Pre pre) { pre.getPoseStack().pushPose(); + if (pre.getEntity().getAttribute(AMAttributes.SCALE.get()) == null) return; float factor = (float) pre.getEntity().getAttributeValue(AMAttributes.SCALE.get()); if (factor == 1) return; pre.getPoseStack().scale(factor, factor, factor); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/InscriptionTableScreen.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/InscriptionTableScreen.java index e1084b413..6dcf2cd09 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/InscriptionTableScreen.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/InscriptionTableScreen.java @@ -2,6 +2,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.Config; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellComponent; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; @@ -89,12 +90,15 @@ private void onSlotChangedInt() { protected void init() { super.init(); var api = ArsMagicaAPI.get(); - var skillManager = api.getSkillManager(); + var registryAccess = getMinecraft().getConnection().registryAccess(); + var skillRegistry = registryAccess.registryOrThrow(Skill.REGISTRY_KEY); var spellPartRegistry = api.getSpellPartRegistry(); Predicate searchFilter = spellPart -> { String value = searchBar.getValue(); if (StringUtil.isNullOrEmpty(value) || value.equals(SEARCH_LABEL.getString())) return true; - return StringUtils.containsIgnoreCase(skillManager.get(spellPart).getDisplayName().getString(), value); + Skill skill = skillRegistry.get(spellPart); + if (skill == null) return false; + return StringUtils.containsIgnoreCase(skill.getDisplayName().getString(), value); }; Predicate knowsFilter = spellPart -> { assert Minecraft.getInstance().player != null; @@ -131,7 +135,7 @@ protected void init() { .stream() .sorted(Comparator.comparing(ISpellPart::getType).thenComparing(ISpellPart::getId)) .map(ISpellPart::getId) - .toList(), rl -> Pair.of(SkillIconAtlas.instance().getSprite(rl), skillManager.get(rl).getDisplayName()))); + .toList(), rl -> Pair.of(SkillIconAtlas.instance().getSprite(rl), skillRegistry.get(rl).getDisplayName(registryAccess)))); searchBar.setResponder(s -> sourceBox.update()); int offsetX = leftPos + SHAPE_GROUP_X; DropValidator.WithData dropValidator = ((DropValidator.WithData) this::isValidInShapeGroup).map(spellPartRegistry::getValue); @@ -283,12 +287,18 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } } + @Override + public Minecraft getMinecraft() { + return minecraft != null ? minecraft : Minecraft.getInstance(); + } + private void setFromRecipe(ISpell spell) { - var skillManager = ArsMagicaAPI.get().getSkillManager(); + var registryAccess = getMinecraft().getConnection().registryAccess(); + var skillRegistry = registryAccess.registryOrThrow(Skill.REGISTRY_KEY); spellStackDropZone = new BasicDropZone(spellStackDropZone != null ? spellStackDropZone.getX() : 0, spellStackDropZone != null ? spellStackDropZone.getY() : 0, 141, 18, ICON_SIZE, ICON_SIZE, 4, spellStackDropZone); spellStackDropZone.clear(); for (ISpellPart iSpellPart : spell.spellStack().parts()) { - spellStackDropZone.add(new DraggableWithData<>(0, 0, 0, 0, SkillIconAtlas.instance().getSprite(iSpellPart.getId()), skillManager.get(iSpellPart.getId()).getDisplayName(), iSpellPart.getId())); + spellStackDropZone.add(new DraggableWithData<>(0, 0, 0, 0, SkillIconAtlas.instance().getSprite(iSpellPart.getId()), skillRegistry.get(iSpellPart.getId()).getDisplayName(registryAccess), iSpellPart.getId())); } int i = 0; for (ShapeGroup shapeGroup : spell.shapeGroups()) { @@ -301,7 +311,7 @@ private void setFromRecipe(ISpell spell) { } zone.clear(); for (ISpellPart spellPart : shapeGroup.parts()) { - zone.add(new DraggableWithData<>(0, 0, 0, 0, SkillIconAtlas.instance().getSprite(spellPart.getId()), skillManager.get(spellPart.getId()).getDisplayName(), spellPart.getId())); + zone.add(new DraggableWithData<>(0, 0, 0, 0, SkillIconAtlas.instance().getSprite(spellPart.getId()), skillRegistry.get(spellPart.getId()).getDisplayName(registryAccess), spellPart.getId())); } if (shapeGroupDropZones.size() > i) { shapeGroupDropZones.set(i, zone); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/SpellCustomizationScreen.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/SpellCustomizationScreen.java index 861c7f674..5b888209d 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/SpellCustomizationScreen.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/SpellCustomizationScreen.java @@ -2,8 +2,8 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.client.SpellIconAtlas; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; import com.github.minecraftschurlimods.arsmagicalegacy.network.SpellIconSelectPacket; import com.mojang.blaze3d.systems.RenderSystem; @@ -38,8 +38,8 @@ public SpellCustomizationScreen(ItemStack stack) { super(Component.empty()); editBox = new EditBox(font, 0, 0, 0, 0, Component.translatable(TranslationConstants.SPELL_CUSTOMIZATION_TITLE)); spellIconSelector = new SpellIconSelector(0, 0, 0, 0, null); - SpellItem.getSpellName(stack).ifPresent(editBox::setValue); - SpellItem.getSpellIcon(stack).ifPresent(spellIconSelector::setSelected); + ISpellItem.getSpellName(stack).ifPresent(editBox::setValue); + ISpellItem.getSpellIcon(stack).ifPresent(spellIconSelector::setSelected); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragHandler.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragHandler.java index 630fe699b..5c8279f40 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragHandler.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragHandler.java @@ -1,10 +1,12 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.gui.dropdis; +import org.jetbrains.annotations.Nullable; + public interface DragHandler { /** * @return The currently dragged element. */ - Draggable getDragged(); + @Nullable Draggable getDragged(); /** * Sets the dragged element. diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragPane.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragPane.java index a2eb20e18..bb0ecc8e6 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragPane.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/dropdis/DragPane.java @@ -89,6 +89,7 @@ public T addDropArea(T dropArea) { return dropArea; } + @Nullable @Override public Draggable getDragged() { return dragged; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusAffinityTabRenderer.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusAffinityTabRenderer.java index 45e158c86..cbceb7ac2 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusAffinityTabRenderer.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusAffinityTabRenderer.java @@ -1,11 +1,10 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.gui.occulus; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbilityData; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.client.OcculusTabRenderer; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.RenderUtil; import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; import com.mojang.blaze3d.systems.RenderSystem; @@ -13,11 +12,10 @@ import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.registries.IForgeRegistry; import java.text.NumberFormat; import java.util.ArrayList; @@ -28,13 +26,13 @@ public class OcculusAffinityTabRenderer extends OcculusTabRenderer { private static final NumberFormat RANGE_FORMAT = NumberFormat.getPercentInstance(); - public OcculusAffinityTabRenderer(IOcculusTab occulusTab, Screen parent) { + public OcculusAffinityTabRenderer(OcculusTab occulusTab, Screen parent) { super(occulusTab, parent); } @Override protected void renderBg(PoseStack pMatrixStack, int pMouseX, int pMouseY, float pPartialTicks) { - RenderSystem.setShaderTexture(0, occulusTab.getBackground()); + RenderSystem.setShaderTexture(0, occulusTab.background(getMinecraft().getConnection().registryAccess())); RenderUtil.drawBox(pMatrixStack, 0, 0, width, height, getBlitOffset(), 0, 0, 1, 1); } @@ -43,18 +41,20 @@ protected void renderFg(PoseStack pMatrixStack, int pMouseX, int pMouseY, float var api = ArsMagicaAPI.get(); var helper = api.getAffinityHelper(); var registry = api.getAffinityRegistry(); + RegistryAccess registryAccess = getMinecraft().getConnection().registryAccess(); + var abilityRegistry = registryAccess.registryOrThrow(Ability.REGISTRY_KEY); int affNum = registry.getValues().size() - 1; int portion = 360 / affNum; int currentID = 0; int cX = width / 2; int cY = height / 2; List drawString = new ArrayList<>(); - List affinities = new ArrayList<>(registry.getValues()); + List affinities = new ArrayList<>(registry.getValues()); affinities.sort(null); Player player = getPlayer(); assert player != null; - for (IAffinity aff : affinities) { - if (Objects.equals(aff.getId(), IAffinity.NONE)) continue; + for (Affinity aff : affinities) { + if (Objects.equals(aff.getId(), Affinity.NONE)) continue; double depth = helper.getAffinityDepth(player, aff) / 100; double var1 = Math.cos(Math.toRadians(portion * currentID)); double var2 = Math.sin(Math.toRadians(portion * currentID)); @@ -71,15 +71,15 @@ protected void renderFg(PoseStack pMatrixStack, int pMouseX, int pMouseY, float currentID++; int displace = (int) ((Math.max(affStartX1, affStartX2) - Math.min(affStartX1, affStartX2) + Math.max(affStartY1, affStartY2) - Math.min(affStartY1, affStartY2)) / 2); if (depth > 0.01F) { - RenderUtil.fractalLine2dd(pMatrixStack, affStartX1 + cX, affStartY1 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.getColor(), displace, 0.8F); - RenderUtil.fractalLine2dd(pMatrixStack, affStartX2 + cX, affStartY2 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.getColor(), displace, 0.8F); - RenderUtil.fractalLine2dd(pMatrixStack, affStartX1 + cX, affStartY1 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.getColor(), displace, 1.1F); - RenderUtil.fractalLine2dd(pMatrixStack, affStartX2 + cX, affStartY2 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.getColor(), displace, 1.1F); + RenderUtil.fractalLine2dd(pMatrixStack, affStartX1 + cX, affStartY1 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.color(), displace, 0.8F); + RenderUtil.fractalLine2dd(pMatrixStack, affStartX2 + cX, affStartY2 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.color(), displace, 0.8F); + RenderUtil.fractalLine2dd(pMatrixStack, affStartX1 + cX, affStartY1 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.color(), displace, 1.1F); + RenderUtil.fractalLine2dd(pMatrixStack, affStartX2 + cX, affStartY2 + cY, affEndX + cX, affEndY + cY, getBlitOffset(), aff.color(), displace, 1.1F); } else { - RenderUtil.line2d(pMatrixStack, (float) affStartX1 + cX, (float) affStartY1 + cY, (float) affEndX + cX, (float) affEndY + cY, getBlitOffset(), aff.getColor()); - RenderUtil.line2d(pMatrixStack, (float) affStartX2 + cX, (float) affStartY2 + cY, (float) affEndX + cX, (float) affEndY + cY, getBlitOffset(), aff.getColor()); + RenderUtil.line2d(pMatrixStack, (float) affStartX1 + cX, (float) affStartY1 + cY, (float) affEndX + cX, (float) affEndY + cY, getBlitOffset(), aff.color()); + RenderUtil.line2d(pMatrixStack, (float) affStartX2 + cX, (float) affStartY2 + cY, (float) affEndX + cX, (float) affEndY + cY, getBlitOffset(), aff.color()); } - drawString(pMatrixStack, getFont(), "%.2f".formatted(depth * 100), (int) ((affDrawTextX * 0.9) + cX), (int) ((affDrawTextY * 0.9) + cY), aff.getColor()); + drawString(pMatrixStack, getFont(), "%.2f".formatted(depth * 100), (int) ((affDrawTextX * 0.9) + cX), (int) ((affDrawTextY * 0.9) + cY), aff.color()); int xMovement = affDrawTextX > 0 ? 5 : -5; xMovement = affDrawTextX == 0 ? 0 : xMovement; int yMovement = affDrawTextY > 0 ? 5 : -5; @@ -88,19 +88,15 @@ protected void renderFg(PoseStack pMatrixStack, int pMouseX, int pMouseY, float int drawY = (int) ((affDrawTextY * 1.1) + cY + yMovement); getItemRenderer().renderAndDecorateFakeItem(helper.getEssenceForAffinity(aff), drawX + posX, drawY + posY); if (pMouseX > drawX && pMouseX < drawX + 16 && pMouseY > drawY && pMouseY < drawY + 16) { - drawString.add(aff.getDisplayName().copy().withStyle(style -> style.withColor(aff.getColor()))); - var abilityManager = api.getAbilityManager(); - List abilities = abilityManager.getAbilitiesForAffinity(aff); - IForgeRegistry abilityRegistry = api.getAbilityRegistry(); - abilities.sort((o1, o2) -> (int)((Objects.requireNonNullElse(abilityManager.get(o1).bounds().getMin(), 0D) * 100) - (Objects.requireNonNullElse(abilityManager.get(o2).bounds().getMin(), 0D) * 100))); - abilities.forEach(resourceLocation -> { - IAbilityData abilityData = abilityManager.get(resourceLocation); - boolean test = abilityData.test(player); - IAbility value = abilityRegistry.getValue(resourceLocation); - assert value != null; - MutableComponent component = value.getDisplayName().copy().withStyle(test ? ChatFormatting.GREEN : ChatFormatting.DARK_RED); + drawString.add(aff.getDisplayName().copy().withStyle(style -> style.withColor(aff.color()))); + abilityRegistry.stream() + .filter(ability -> aff.getId().equals(ability.affinity().getId())) + .sorted((o1, o2) -> (int) ((Objects.requireNonNullElse(o1.bounds().getMin(), 0D) * 100) - (Objects.requireNonNullElse(o2.bounds().getMin(), 0D) * 100))) + .forEach(ability -> { + boolean test = ability.test(player); + MutableComponent component = ability.getDisplayName(registryAccess).copy().withStyle(test ? ChatFormatting.GREEN : ChatFormatting.DARK_RED); if (Screen.hasShiftDown()) { - MinMaxBounds.Doubles range = abilityData.bounds(); + MinMaxBounds.Doubles range = ability.bounds(); Double lower = range.getMin(); Double upper = range.getMax(); if (lower != null || upper != null) { diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusScreen.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusScreen.java index 73e789708..9418e157f 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusScreen.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusScreen.java @@ -2,15 +2,18 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.client.OcculusTabRenderer; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Widget; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.Registry; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import java.util.Comparator; + public class OcculusScreen extends Screen { private static final ResourceLocation OVERLAY = new ResourceLocation(ArsMagicaAPI.MOD_ID, "textures/gui/occulus/overlay.png"); private static final Component TITLE = Component.translatable("gui.%s.occulus".formatted(ArsMagicaAPI.MOD_ID)); @@ -25,6 +28,7 @@ public class OcculusScreen extends Screen { private Button prevPage; private Button nextPage; private OcculusTabRenderer activeTab; + private int activeTabIndex; public OcculusScreen() { super(TITLE); @@ -39,18 +43,21 @@ public OcculusScreen() { protected void init() { posX = width / 2 - guiWidth / 2; posY = height / 2 - guiHeight / 2; - var registry = ArsMagicaAPI.get().getOcculusTabManager(); + var registry = minecraft.level.registryAccess().registryOrThrow(OcculusTab.REGISTRY_KEY); int tabSize = 22; - for (IOcculusTab tab : registry.getTabs()) { - int tabIndex = tab.getOcculusIndex(); + for (OcculusTab tab : registry) { + int tabIndex = tab.index(); addRenderableWidget(new OcculusTabButton(tabIndex, 7 + ((tabIndex % 8) * (tabSize + 2)), -tabSize, tab, pButton -> setActiveTab(tabIndex))); } - maxPage = (int) Math.floor((float) (registry.getTabs().size() - 1) / 16F); + maxPage = (int) Math.floor((float) (registry.size() - 1) / 16F); nextPage = addRenderableWidget(new Button(guiWidth + 2, -21, 20, 20, Component.literal(">"), this::nextPage)); prevPage = addRenderableWidget(new Button(-15, -21, 20, 20, Component.literal("<"), this::prevPage)); nextPage.active = page < maxPage; prevPage.active = false; addRenderableWidget(new SkillPointPanel()).init(getMinecraft(), guiWidth, guiHeight); + if (activeTab == null) { + setActiveTab(activeTabIndex); + } addRenderableWidget(activeTab).init(tabWidth, tabHeight, width, height, posX + 7, posY + 7); } @@ -97,10 +104,12 @@ private void onPageChanged() { } private void setActiveTab(int tabIndex) { - clearWidgets(); - IOcculusTab tab = ArsMagicaAPI.get().getOcculusTabManager().getByIndex(tabIndex); - activeTab = tab.getRendererFactory().get().create(tab, this); + activeTabIndex = tabIndex; if (minecraft != null) { + clearWidgets(); + Registry occulusTabRegistry = minecraft.level.registryAccess().registryOrThrow(OcculusTab.REGISTRY_KEY); + OcculusTab tab = occulusTabRegistry.stream().sorted(Comparator.comparing(OcculusTab::index)).toArray(OcculusTab[]::new)[tabIndex]; + activeTab = tab.rendererFactory().get().create(tab, this); init(); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusSkillTreeTabRenderer.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusSkillTreeTabRenderer.java index a2edfb6b2..6c8751e1c 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusSkillTreeTabRenderer.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusSkillTreeTabRenderer.java @@ -3,9 +3,9 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.client.OcculusTabRenderer; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkill; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.client.SkillIconAtlas; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.ColorUtil; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.RenderUtil; @@ -25,6 +25,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; public class OcculusSkillTreeTabRenderer extends OcculusTabRenderer { public static final Component MISSING_REQUIREMENTS = Component.translatable(TranslationConstants.OCCULUS_MISSING_REQUIREMENTS).withStyle(ChatFormatting.DARK_RED); @@ -34,33 +35,33 @@ public class OcculusSkillTreeTabRenderer extends OcculusTabRenderer { private int lastMouseY = 0; private float offsetX = 0; private float offsetY = 0; - private ISkill hoverItem = null; + private Skill hoverItem = null; - public OcculusSkillTreeTabRenderer(IOcculusTab occulusTab, Screen parent) { + public OcculusSkillTreeTabRenderer(OcculusTab occulusTab, Screen parent) { super(occulusTab, parent); } - private static int getColorForSkill(ISkill skill) { - return skill.getCost().keySet().stream().map(ArsMagicaAPI.get().getSkillPointRegistry()::getValue).filter(Objects::nonNull).findFirst().map(ISkillPoint::color).orElse(ColorUtil.GRAY); + private static int getColorForSkill(Skill skill) { + return skill.cost().keySet().stream().map(ArsMagicaAPI.get().getSkillPointRegistry()::getValue).filter(Objects::nonNull).findFirst().map(SkillPoint::color).orElse(ColorUtil.GRAY); } - private static int getColorForLine(ISkill parent, ISkill child) { + private static int getColorForLine(Skill parent, Skill child) { return ColorUtil.calculateAverage(getColorForSkill(parent), getColorForSkill(child)); } @Override protected void init() { - offsetX = occulusTab.getStartX() - width / 2f; + offsetX = occulusTab.startX() - width / 2f; if (offsetX < 0) offsetX = 0; if (offsetX > textureWidth - width) offsetX = textureWidth - width; - offsetY = occulusTab.getStartY() - width / 2f; + offsetY = occulusTab.startY() - width / 2f; if (offsetY < 0) offsetY = 0; if (offsetY > textureHeight - height) offsetY = textureHeight - height; } @Override protected void renderBg(PoseStack pMatrixStack, int pMouseX, int pMouseY, float pPartialTicks) { - RenderSystem.setShaderTexture(0, occulusTab.getBackground()); + RenderSystem.setShaderTexture(0, occulusTab.background(getMinecraft().getConnection().registryAccess())); float scaledOffsetX = offsetX * SCALE; float scaledOffsetY = offsetY * SCALE; float scaledWidth = width * (1 / SCALE); @@ -83,10 +84,12 @@ protected void renderFg(PoseStack stack, int mouseX, int mouseY, float partialTi Player player = getMinecraft().player; if (player == null) return; var api = ArsMagicaAPI.get(); - var skillManager = api.getSkillManager(); + var registryAccess = getMinecraft().getConnection().registryAccess(); + var skillRegistry = registryAccess.registryOrThrow(Skill.REGISTRY_KEY); + var occulusTabRegistry = registryAccess.registryOrThrow(OcculusTab.REGISTRY_KEY); var helper = api.getSkillHelper(); - Set skills = skillManager.getSkillsForOcculusTab(occulusTab); - skills.removeIf(skill -> skill.isHidden() && !helper.knows(player, skill)); + Set skills = skillRegistry.stream().filter(skill -> Objects.equals(occulusTabRegistry.getKey(occulusTab), skill.occulusTab())).collect(Collectors.toSet()); + skills.removeIf(skill -> skill.hidden() && !helper.knows(player, skill.getId(registryAccess))); stack.pushPose(); stack.translate(-offsetX, -offsetY, 0); stack.scale(SCALE, SCALE, 0); @@ -99,18 +102,18 @@ protected void renderFg(PoseStack stack, int mouseX, int mouseY, float partialTi float multiplier = 0.75F + tick / 80F; double guiScale = getMinecraft().getWindow().getGuiScale(); RenderSystem.enableScissor((int) (posX * guiScale), (int) Math.floor(posY * guiScale), (int) (width * guiScale), (int) Math.floor(height * guiScale)); - for (ISkill skill : skills) { - boolean knows = helper.knows(player, skill); - float cX = skill.getX() + SKILL_SIZE / 2 + 1; - float cY = skill.getY() + SKILL_SIZE / 2 + 1; + for (Skill skill : skills) { + boolean knows = helper.knows(player, skill, registryAccess); + float cX = skill.x() + SKILL_SIZE / 2 + 1; + float cY = skill.y() + SKILL_SIZE / 2 + 1; setBlitOffset(1); - boolean hasPrereq = helper.canLearn(player, skill) || knows; - for (ResourceLocation parentId : skill.getParents()) { - Optional parent = skillManager.getOptional(parentId); + boolean hasPrereq = helper.canLearn(player, skill, registryAccess) || knows; + for (ResourceLocation parentId : skill.parents()) { + Optional parent = Optional.ofNullable(skillRegistry.get(parentId)); if (parent.isEmpty()) continue; - ISkill parentSkill = parent.get(); - float parentCX = parentSkill.getX() + SKILL_SIZE / 2 + 1; - float parentCY = parentSkill.getY() + SKILL_SIZE / 2 + 1; + Skill parentSkill = parent.get(); + float parentCX = parentSkill.x() + SKILL_SIZE / 2 + 1; + float parentCY = parentSkill.y() + SKILL_SIZE / 2 + 1; int color = (knows ? ColorUtil.KNOWS_COLOR : getColorForLine(parentSkill, skill) & ColorUtil.UNKNOWN_SKILL_LINE_COLOR_MASK); if (!hasPrereq) { color = ColorUtil.BLACK; @@ -124,9 +127,9 @@ protected void renderFg(PoseStack stack, int mouseX, int mouseY, float partialTi } } RenderSystem.setShaderTexture(0, SkillIconAtlas.SKILL_ICON_ATLAS); - for (ISkill skill : skills) { - boolean knows = helper.knows(player, skill); - boolean hasPrereq = helper.canLearn(player, skill) || knows; + for (Skill skill : skills) { + boolean knows = helper.knows(player, skill, registryAccess); + boolean hasPrereq = helper.canLearn(player, skill, registryAccess) || knows; if (!hasPrereq) { RenderSystem.setShaderColor(0.5F, 0.5F, 0.5F, 1); } else if (!knows) { @@ -138,19 +141,19 @@ protected void renderFg(PoseStack stack, int mouseX, int mouseY, float partialTi } setBlitOffset(16); RenderSystem.enableBlend(); - blit(stack, skill.getX(), skill.getY(), getBlitOffset(), (int) SKILL_SIZE, (int) SKILL_SIZE, SkillIconAtlas.instance().getSprite(skill.getId())); + blit(stack, skill.x(), skill.y(), getBlitOffset(), (int) SKILL_SIZE, (int) SKILL_SIZE, SkillIconAtlas.instance().getSprite(skillRegistry.getKey(skill))); RenderSystem.disableBlend(); RenderSystem.setShaderColor(1, 1, 1, 1); } RenderSystem.disableScissor(); stack.popPose(); if (!(mouseX > offsetX && mouseX < offsetX+width && mouseY > offsetY && mouseY < offsetY+height)) return; - for (ISkill skill : skills) { - if (mouseX >= skill.getX() && mouseX <= skill.getX() + SKILL_SIZE && mouseY >= skill.getY() && mouseY <= skill.getY() + SKILL_SIZE) { + for (Skill skill : skills) { + if (mouseX >= skill.x() && mouseX <= skill.x() + SKILL_SIZE && mouseY >= skill.y() && mouseY <= skill.y() + SKILL_SIZE) { List list = new ArrayList<>(); - list.add(skill.getDisplayName().copy().withStyle(style -> style.withColor(getColorForSkill(skill)))); - if (helper.canLearn(player, skill) || helper.knows(player, skill)) { - list.add(skill.getDescription().copy().withStyle(ChatFormatting.DARK_GRAY)); + list.add(skill.getDisplayName(registryAccess).copy().withStyle(style -> style.withColor(getColorForSkill(skill)))); + if (helper.canLearn(player, skill, registryAccess) || helper.knows(player, skill, registryAccess)) { + list.add(skill.getDescription(registryAccess).copy().withStyle(ChatFormatting.DARK_GRAY)); } else { list.add(MISSING_REQUIREMENTS); } @@ -172,9 +175,10 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { if (mouseButton == 0 && mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) { var helper = ArsMagicaAPI.get().getSkillHelper(); Player player = getMinecraft().player; - if (player != null && hoverItem != null && !helper.knows(player, hoverItem)) { - if (helper.canLearn(player, hoverItem) || player.isCreative()) { - ArsMagicaLegacy.NETWORK_HANDLER.sendToServer(new LearnSkillPacket(hoverItem.getId())); + var registryAccess = getMinecraft().getConnection().registryAccess(); + if (player != null && hoverItem != null && !helper.knows(player, hoverItem, registryAccess)) { + if (helper.canLearn(player, hoverItem, registryAccess) || player.isCreative()) { + ArsMagicaLegacy.NETWORK_HANDLER.sendToServer(new LearnSkillPacket(hoverItem.getId(getMinecraft().getConnection().registryAccess()))); } } else { setDragging(true); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusTabButton.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusTabButton.java index a06c51696..345faa085 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusTabButton.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/gui/occulus/OcculusTabButton.java @@ -1,19 +1,20 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.gui.occulus; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.RenderUtil; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.resources.ResourceLocation; public class OcculusTabButton extends Button { private static final int SIZE = 22; private final int index; - private final IOcculusTab tab; + private final OcculusTab tab; - public OcculusTabButton(int index, int x, int y, IOcculusTab tab, OnPress pOnPress) { + public OcculusTabButton(int index, int x, int y, OcculusTab tab, OnPress pOnPress) { super(x, y, SIZE, SIZE, tab.getDisplayName(), pOnPress); this.index = index; this.tab = tab; @@ -25,7 +26,7 @@ public void renderButton(PoseStack pMatrixStack, int pMouseX, int pMouseY, float float f = 1f / 0x100; RenderSystem.setShaderTexture(0, new ResourceLocation(ArsMagicaAPI.MOD_ID, "textures/gui/occulus/overlay.png")); RenderUtil.drawBox(pMatrixStack, x, y, SIZE, SIZE, getBlitOffset(), 0, 210 * f, SIZE * f, 210 * f + SIZE * f); - RenderSystem.setShaderTexture(0, tab.getIcon()); + RenderSystem.setShaderTexture(0, tab.icon(Minecraft.getInstance().getConnection().registryAccess())); RenderUtil.drawBox(pMatrixStack, x + 2f, y + 2f, 18, 18, getBlitOffset(), 0, 0, 1, 1); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/AbstractHUD.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/AbstractHUD.java index 731b09d7c..23effd68b 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/AbstractHUD.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/AbstractHUD.java @@ -1,35 +1,30 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.hud; +import com.github.minecraftschurlimods.arsmagicalegacy.Config; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.ColorUtil; +import com.github.minecraftschurlimods.betterhudlib.HUDElement; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.client.gui.overlay.ForgeGui; -import net.minecraftforge.client.gui.overlay.IGuiOverlay; +import net.minecraftforge.common.ForgeConfigSpec.EnumValue; +import net.minecraftforge.common.ForgeConfigSpec.IntValue; -public abstract class AbstractHUD extends GuiComponent implements IGuiOverlay { +public abstract class AbstractHUD extends HUDElement { public static final ResourceLocation BAR_TEXTURE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "textures/hud/bar.png"); + private final EnumValue anchorX; + private final EnumValue anchorY; + private final IntValue x; + private final IntValue y; - @Override - public void render(ForgeGui gui, PoseStack mStack, float partialTicks, int width, int height) { - if (!Minecraft.getInstance().options.hideGui && gui.shouldDrawSurvivalElements()) { - render(mStack, width, height, partialTicks); - } + protected AbstractHUD(EnumValue anchorX, EnumValue anchorY, IntValue x, IntValue y, int width, int height) { + super(anchorX, anchorY, x::get, y::get, () -> width, () -> height); + this.anchorX = anchorX; + this.anchorY = anchorY; + this.x = x; + this.y = y; } - /** - * Renders the HUD. - * - * @param mStack The pose stack to use. - * @param width The width to use. - * @param height The height to use. - * @param partialTicks The partial ticks value to use. - */ - protected abstract void render(PoseStack mStack, int width, int height, float partialTicks); - /** * Renders a bar. * @@ -62,4 +57,17 @@ protected void renderBar(PoseStack mStack, int x, int y, int width, int height, RenderSystem.disableBlend(); mStack.popPose(); } + + @Override + protected void onPositionUpdate(AnchorX anchorX, AnchorY anchorY, int x, int y) { + this.anchorX.set(anchorX); + this.anchorY.set(anchorY); + this.x.set(x); + this.y.set(y); + } + + @Override + protected void save() { + Config.CLIENT.save(); + } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/BurnoutHUD.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/BurnoutHUD.java index 3da2d59ab..88d7d50b3 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/BurnoutHUD.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/BurnoutHUD.java @@ -5,12 +5,15 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.gui.overlay.ForgeGui; public final class BurnoutHUD extends AbstractHUD { + public BurnoutHUD() { + super(Config.CLIENT.BURNOUT_ANCHOR_X, Config.CLIENT.BURNOUT_ANCHOR_Y, Config.CLIENT.BURNOUT_X, Config.CLIENT.BURNOUT_Y, 80, 10); + } + @Override - protected void render(PoseStack mStack, int width, int height, float partialTicks) { - int xStart = width / 2 + Config.CLIENT.HUD_HORIZONTAL_OFFSET.get(); - int yStart = height - 10 - Config.CLIENT.HUD_VERTICAL_OFFSET.get(); + public void draw(ForgeGui forgeGui, PoseStack poseStack, float partialTick) { Player player = Minecraft.getInstance().player; var api = ArsMagicaAPI.get(); if (player == null || !api.getMagicHelper().knowsMagic(player)) return; @@ -21,6 +24,6 @@ protected void render(PoseStack mStack, int width, int height, float partialTick burnout = burnoutHelper.getBurnout(player); maxBurnout = burnoutHelper.getMaxBurnout(player); } - renderBar(mStack, xStart, yStart, 80, 10, burnout, maxBurnout, 0x880000); + renderBar(poseStack, 0, 0, getWidth(), getHeight(), burnout, maxBurnout, 0x880000); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ManaHUD.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ManaHUD.java index 5290f25f1..c3fe9eb99 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ManaHUD.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ManaHUD.java @@ -6,12 +6,15 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.gui.overlay.ForgeGui; public final class ManaHUD extends AbstractHUD { + public ManaHUD() { + super(Config.CLIENT.MANA_ANCHOR_X, Config.CLIENT.MANA_ANCHOR_Y, Config.CLIENT.MANA_X, Config.CLIENT.MANA_Y, 80, 10); + } + @Override - protected void render(PoseStack mStack, int width, int height, float partialTicks) { - int xStart = width / 2 + Config.CLIENT.HUD_HORIZONTAL_OFFSET.get(); - int yStart = height - 20 - Config.CLIENT.HUD_VERTICAL_OFFSET.get(); + public void draw(ForgeGui forgeGui, PoseStack poseStack, float partialTick) { Player player = Minecraft.getInstance().player; var api = ArsMagicaAPI.get(); if (player == null || !api.getMagicHelper().knowsMagic(player)) return; @@ -22,6 +25,6 @@ protected void render(PoseStack mStack, int width, int height, float partialTick mana = manaHelper.getMana(player); maxMana = manaHelper.getMaxMana(player); } - renderBar(mStack, xStart, yStart, 80, 10, mana, maxMana, 0x99FFFF); + renderBar(poseStack, 0, 0, getWidth(), getHeight(), mana, maxMana, 0x99FFFF); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ShapeGroupHUD.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ShapeGroupHUD.java index cabfcfea4..840d10390 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ShapeGroupHUD.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/ShapeGroupHUD.java @@ -1,13 +1,16 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.hud; +import com.github.minecraftschurlimods.betterhudlib.HUDElement; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; import net.minecraftforge.client.gui.overlay.ForgeGui; -import net.minecraftforge.client.gui.overlay.IGuiOverlay; -public final class ShapeGroupHUD extends GuiComponent implements IGuiOverlay { - @Override - public void render(ForgeGui gui, PoseStack mStack, float partialTicks, int width, int height) { +public final class ShapeGroupHUD extends HUDElement { + public ShapeGroupHUD() { + super(AnchorX.CENTER, AnchorY.CENTER, 0, 0, 0, 0); + } + @Override + public void draw(ForgeGui forgeGui, PoseStack poseStack, float partialTicks) { + // TODO } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/SpellBookHUD.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/SpellBookHUD.java index 573ee7757..7111a62eb 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/SpellBookHUD.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/SpellBookHUD.java @@ -1,42 +1,58 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.hud; +import com.github.minecraftschurlimods.arsmagicalegacy.Config; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.client.ClientHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.item.spellbook.SpellBookItem; +import com.github.minecraftschurlimods.betterhudlib.HUDElement; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.client.gui.overlay.ForgeGui; -import net.minecraftforge.client.gui.overlay.IGuiOverlay; -public final class SpellBookHUD extends GuiComponent implements IGuiOverlay { +public final class SpellBookHUD extends HUDElement { private static final ResourceLocation TEXTURE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "textures/hud/spell_book.png"); + public SpellBookHUD() { + super(Config.CLIENT.SPELL_BOOK_ANCHOR_X, Config.CLIENT.SPELL_BOOK_ANCHOR_Y, Config.CLIENT.SPELL_BOOK_X::get, Config.CLIENT.SPELL_BOOK_Y::get, () -> 148, () -> 22); + } + @Override - public void render(ForgeGui gui, PoseStack mStack, float partialTicks, int width, int height) { + public void draw(ForgeGui forgeGui, PoseStack poseStack, float partialTicks) { Player player = ClientHelper.getLocalPlayer(); if (player == null || Minecraft.getInstance().options.hideGui) return; ItemStack mainHand = player.getItemInHand(InteractionHand.MAIN_HAND); ItemStack offHand = player.getItemInHand(InteractionHand.OFF_HAND); if (mainHand.getItem() instanceof SpellBookItem) { - renderSpellBookHUD(gui, mStack, partialTicks, width, height, mainHand); + renderSpellBookHUD(forgeGui, poseStack, mainHand); } else if (offHand.getItem() instanceof SpellBookItem) { - renderSpellBookHUD(gui, mStack, partialTicks, width, height, offHand); + renderSpellBookHUD(forgeGui, poseStack, offHand); } } - private void renderSpellBookHUD(ForgeGui gui, PoseStack mStack, float partialTicks, int width, int height, ItemStack spellBook) { + @Override + protected void onPositionUpdate(AnchorX anchorX, AnchorY anchorY, int x, int y) { + Config.CLIENT.SPELL_BOOK_ANCHOR_X.set(anchorX); + Config.CLIENT.SPELL_BOOK_ANCHOR_Y.set(anchorY); + Config.CLIENT.SPELL_BOOK_X.set(x); + Config.CLIENT.SPELL_BOOK_Y.set(y); + } + + @Override + protected void save() { + Config.CLIENT.save(); + } + + private void renderSpellBookHUD(ForgeGui gui, PoseStack mStack, ItemStack spellBook) { SimpleContainer active = SpellBookItem.getContainer(spellBook).active(); final int selected = SpellBookItem.getSelectedSlot(spellBook); if (selected != -1) { mStack.pushPose(); - mStack.translate(width / 2f + 100, height - 19, 100); mStack.scale(0.75f, 0.75f, 0.75f); mStack.pushPose(); RenderSystem.setShaderTexture(0, TEXTURE); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/XpHUD.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/XpHUD.java index ab3c282df..b3a9e8b7c 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/XpHUD.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/hud/XpHUD.java @@ -6,12 +6,15 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.world.entity.player.Player; +import net.minecraftforge.client.gui.overlay.ForgeGui; public final class XpHUD extends AbstractHUD { + public XpHUD() { + super(Config.CLIENT.XP_ANCHOR_X, Config.CLIENT.XP_ANCHOR_Y, Config.CLIENT.XP_X, Config.CLIENT.XP_Y, 80, 10); + } + @Override - protected void render(PoseStack mStack, int width, int height, float partialTicks) { - int xStart = width / 2 + Config.CLIENT.HUD_HORIZONTAL_OFFSET.get(); - int yStart = height - 30 - Config.CLIENT.HUD_VERTICAL_OFFSET.get(); + public void draw(ForgeGui forgeGui, PoseStack poseStack, float v) { Player player = Minecraft.getInstance().player; var api = ArsMagicaAPI.get(); if (player == null || !api.getMagicHelper().knowsMagic(player)) return; @@ -24,15 +27,15 @@ protected void render(PoseStack mStack, int width, int height, float partialTick xp = helper.getXp(player); xpForNextLevel = helper.getXpForNextLevel(level); } - renderBar(mStack, xStart, yStart, 80, 10, xp, xpForNextLevel, 0x7777FF); + renderBar(poseStack, 0, 0, getWidth(), getHeight(), xp, xpForNextLevel, 0x7777FF); String s = String.valueOf(level); Font font = Minecraft.getInstance().font; - int i1 = width / 2 + Config.CLIENT.HUD_HORIZONTAL_OFFSET.get() + 40 - font.width(s) / 2; - int j1 = height - 40 - Config.CLIENT.HUD_VERTICAL_OFFSET.get(); - font.draw(mStack, s, (float) (i1 + 1), (float) j1, 0); - font.draw(mStack, s, (float) (i1 - 1), (float) j1, 0); - font.draw(mStack, s, (float) i1, (float) (j1 + 1), 0); - font.draw(mStack, s, (float) i1, (float) (j1 - 1), 0); - font.draw(mStack, s, (float) i1, (float) j1, 0x7777FF); + int i1 = 40 - font.width(s) / 2; + int j1 = -10; + font.draw(poseStack, s, (float) (i1 + 1), (float) j1, 0); + font.draw(poseStack, s, (float) (i1 - 1), (float) j1, 0); + font.draw(poseStack, s, (float) i1, (float) (j1 + 1), 0); + font.draw(poseStack, s, (float) i1, (float) (j1 - 1), 0); + font.draw(poseStack, s, (float) i1, (float) j1, 0x7777FF); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/AffinityOverrideModel.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/AffinityOverrideModel.java index ddbe3b311..b4ef35075 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/AffinityOverrideModel.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/AffinityOverrideModel.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.model; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.block.model.ItemOverrides; @@ -28,8 +28,8 @@ public ItemOverrides getOverrides() { private static class AffinityItemOverrides extends ItemOverrides { @Override public BakedModel resolve(BakedModel model, ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity, int seed) { - IAffinity affinity = ArsMagicaAPI.get().getAffinityHelper().getAffinityForStack(stack); - if (affinity.getId().equals(IAffinity.NONE)) return model; + Affinity affinity = ArsMagicaAPI.get().getAffinityHelper().getAffinityForStack(stack); + if (affinity.getId().equals(Affinity.NONE)) return model; ResourceLocation rl = new ResourceLocation(affinity.getId().getNamespace(), "item/" + ForgeRegistries.ITEMS.getKey(stack.getItem()).getPath() + "_" + affinity.getId().getPath()); return Minecraft.getInstance().getModelManager().getModel(rl); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SkillPointOverrideModel.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SkillPointOverrideModel.java index a49c07598..562d3a00c 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SkillPointOverrideModel.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SkillPointOverrideModel.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.model; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.block.model.ItemOverrides; @@ -28,7 +28,7 @@ public ItemOverrides getOverrides() { private static class SkillPointItemOverrides extends ItemOverrides { @Override public BakedModel resolve(BakedModel model, ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity, int seed) { - ISkillPoint skillPoint = ArsMagicaAPI.get().getSkillHelper().getSkillPointForStack(stack); + SkillPoint skillPoint = ArsMagicaAPI.get().getSkillHelper().getSkillPointForStack(stack); ResourceLocation rl = new ResourceLocation(skillPoint.getId().getNamespace(), "item/" + ForgeRegistries.ITEMS.getKey(stack.getItem()).getPath() + "_" + skillPoint.getId().getPath()); return Minecraft.getInstance().getModelManager().getModel(rl); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SpellItemModel.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SpellItemModel.java index 9e2b2270b..7db6444ef 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SpellItemModel.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/client/model/SpellItemModel.java @@ -1,9 +1,9 @@ package com.github.minecraftschurlimods.arsmagicalegacy.client.model; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.client.SpellIconAtlas; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.mojang.blaze3d.vertex.PoseStack; @@ -29,7 +29,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.BakedModelWrapper; -import net.minecraftforge.client.model.data.ModelData; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -47,7 +46,7 @@ public class SpellItemModel extends BakedModelWrapper { private final ItemOverrides overrides = new ItemOverrides() { @Override public BakedModel resolve(BakedModel model, ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity, int seed) { - icon = SpellItem.getSpellIcon(stack); + icon = ISpellItem.getSpellIcon(stack); return super.resolve(model, stack, level, entity, seed); } }; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/AbilityManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/AbilityManager.java deleted file mode 100644 index 24f487846..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/AbilityManager.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ability; - -import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbilityData; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbilityManager; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; -import com.github.minecraftschurlimods.codeclib.CodecDataManager; -import com.github.minecraftschurlimods.codeclib.CodecHelper; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.advancements.critereon.MinMaxBounds; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.util.Lazy; -import net.minecraftforge.registries.IForgeRegistry; -import org.jetbrains.annotations.Nullable; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -public final class AbilityManager extends CodecDataManager implements IAbilityManager { - private static final Lazy INSTANCE = Lazy.concurrentOf(AbilityManager::new); - - private AbilityManager() { - super(ArsMagicaAPI.MOD_ID, "affinity_abilities", AbilityData.CODEC, (data, logger) -> { - IForgeRegistry affinityRegistry = ArsMagicaAPI.get().getAbilityRegistry(); - data.keySet().removeIf(ability -> !affinityRegistry.containsKey(ability)); - }, LoggerFactory.getLogger(AbilityManager.class)); - subscribeAsSyncable(ArsMagicaLegacy.NETWORK_HANDLER); - } - - @Override - public List getAbilitiesForPlayer(Player player) { - return entrySet().stream().filter(e -> e.getValue().test(player)).map(Entry::getKey).collect(Collectors.toList()); - } - - @Override - public List getAbilitiesForAffinity(IAffinity affinity) { - return getAbilitiesForAffinity(affinity.getId()); - } - - @Override - public List getAbilitiesForAffinity(ResourceLocation affinity) { - return entrySet().stream().filter(entry -> entry.getValue().affinity().getId().equals(affinity)).map(Entry::getKey).collect(Collectors.toList()); - } - - @Override - public boolean hasAbility(Player player, ResourceLocation ability) { - return get(ability).test(player); - } - - /** - * @return The only instance of this class. - */ - public static AbilityManager instance() { - return INSTANCE.get(); - } - - @Override - public IAbilityData getOrThrow(@Nullable ResourceLocation id) { - return super.getOrThrow(id); - } - - @Override - public Optional getOptional(@Nullable ResourceLocation id) { - return super.getOptional(id); - } - - private record AbilityData(IAffinity affinity, MinMaxBounds.Doubles bounds) implements IAbilityData { - private static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - CodecHelper.forRegistry(ArsMagicaAPI.get()::getAffinityRegistry).fieldOf("affinity").forGetter(IAbilityData::affinity), - CodecHelper.DOUBLE_MIN_MAX_BOUNDS.fieldOf("bounds").forGetter(IAbilityData::bounds) - ).apply(inst, AbilityData::new)); - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/package-info.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/package-info.java deleted file mode 100644 index 32a65b3ba..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package com.github.minecraftschurlimods.arsmagicalegacy.common.ability; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/AbilityUUIDs.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/AbilityUUIDs.java similarity index 98% rename from src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/AbilityUUIDs.java rename to src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/AbilityUUIDs.java index 76e00d874..16b4875e0 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ability/AbilityUUIDs.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/AbilityUUIDs.java @@ -1,4 +1,4 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ability; +package com.github.minecraftschurlimods.arsmagicalegacy.common.affinity; import org.jetbrains.annotations.ApiStatus.NonExtendable; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/Affinity.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/Affinity.java deleted file mode 100644 index 4c8c26ab4..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/Affinity.java +++ /dev/null @@ -1,163 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.affinity; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.sounds.SoundEvent; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -public final class Affinity implements IAffinity { - private final int color; - private final Set minorOpposites; - private final Set majorOpposites; - private final ResourceLocation directOpposite; - private final Supplier castSound; - private final Supplier loopSound; - - public Affinity(int color, Set minorOpposites, Set majorOpposites, ResourceLocation directOpposite, Supplier castSound, Supplier loopSound) { - this.color = color; - this.minorOpposites = minorOpposites; - this.majorOpposites = majorOpposites; - this.directOpposite = directOpposite; - this.castSound = castSound; - this.loopSound = loopSound; - } - - /** - * @return A new affinity builder. - */ - public static Builder builder() { - return new Builder(); - } - - @Override - public int getColor() { - return color; - } - - @Override - public Set getMinorOpposingAffinities() { - return Collections.unmodifiableSet(minorOpposites); - } - - @Override - public Set getMajorOpposingAffinities() { - return Collections.unmodifiableSet(majorOpposites); - } - - @Override - public Set getAdjacentAffinities() { - return ArsMagicaAPI.get().getAffinityRegistry().getValues().stream().filter(iAffinity -> !getMinorOpposingAffinities().contains(iAffinity.getId()) && !getMajorOpposingAffinities().contains(iAffinity.getId()) && !getDirectOpposingAffinity().equals(iAffinity.getId())).map(IAffinity::getId).collect(Collectors.toSet()); - } - - @Override - public ResourceLocation getDirectOpposingAffinity() { - return directOpposite; - } - - @Override - public SoundEvent getCastSound() { - return castSound.get(); - } - - @Override - public SoundEvent getLoopSound() { - return loopSound.get(); - } - - public static class Builder { - private final Set minorOpposites = new HashSet<>(); - private final Set majorOpposites = new HashSet<>(); - private Integer color; - private ResourceLocation directOpposite; - private Supplier castSound; - private Supplier loopSound; - - /** - * @param color The color to set. - * @return This builder, for chaining. - */ - public Builder setColor(int color) { - this.color = color; - return this; - } - - /** - * @param minorOpposite The minor opposite to add. - * @return This builder, for chaining. - */ - public Builder addMinorOpposite(ResourceLocation minorOpposite) { - minorOpposites.add(minorOpposite); - return this; - } - - /** - * @param majorOpposite The major opposite to add. - * @return This builder, for chaining. - */ - public Builder addMajorOpposite(ResourceLocation majorOpposite) { - majorOpposites.add(majorOpposite); - return this; - } - - /** - * @param minorOpposite The minor opposite(s) to add. - * @return This builder, for chaining. - */ - public Builder addMinorOpposites(ResourceLocation... minorOpposite) { - minorOpposites.addAll(Arrays.asList(minorOpposite)); - return this; - } - - /** - * @param majorOpposite The major opposite(s) to add. - * @return This builder, for chaining. - */ - public Builder addMajorOpposites(ResourceLocation... majorOpposite) { - majorOpposites.addAll(Arrays.asList(majorOpposite)); - return this; - } - - /** - * @param directOpposite The direct opposite to set. - * @return This builder, for chaining. - */ - public Builder setDirectOpposite(ResourceLocation directOpposite) { - this.directOpposite = directOpposite; - return this; - } - - /** - * @param castSound The cast sound to set. - * @return This builder, for chaining. - */ - public Builder setCastSound(Supplier castSound) { - this.castSound = castSound; - return this; - } - - /** - * @param loopSound The loop sound to set. - * @return This builder, for chaining. - */ - public Builder setLoopSound(Supplier loopSound) { - this.loopSound = loopSound; - return this; - } - - /** - * @return The affinity created from this builder. - */ - public Affinity build() { - if (color == null) throw new IllegalStateException("An affinity needs a color!"); - if (directOpposite == null) throw new IllegalStateException("An affinity needs a direct opposite!"); - return new Affinity(color, minorOpposites, majorOpposites, directOpposite, castSound, loopSound); - } - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/AffinityHelper.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/AffinityHelper.java index 0bdf48740..e88d370ba 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/AffinityHelper.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/affinity/AffinityHelper.java @@ -2,7 +2,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityItem; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; @@ -72,7 +72,7 @@ public ItemStack getEssenceForAffinity(ResourceLocation affinity) { } @Override - public ItemStack getEssenceForAffinity(IAffinity affinity) { + public ItemStack getEssenceForAffinity(Affinity affinity) { return getEssenceForAffinity(affinity.getId()); } @@ -82,7 +82,7 @@ public ItemStack getTomeForAffinity(ResourceLocation affinity) { } @Override - public ItemStack getTomeForAffinity(IAffinity affinity) { + public ItemStack getTomeForAffinity(Affinity affinity) { return getTomeForAffinity(affinity.getId()); } @@ -94,14 +94,14 @@ public ItemStack getStackForAffinity(T item, Re } @Override - public ItemStack getStackForAffinity(T item, IAffinity affinity) { + public ItemStack getStackForAffinity(T item, Affinity affinity) { return getStackForAffinity(item, affinity.getId()); } @Override - public IAffinity getAffinityForStack(ItemStack stack) { + public Affinity getAffinityForStack(ItemStack stack) { if (stack.getItem() instanceof IAffinityItem item) return item.getAffinity(stack); - return Objects.requireNonNull(ArsMagicaAPI.get().getAffinityRegistry().getValue(IAffinity.NONE)); + return Objects.requireNonNull(ArsMagicaAPI.get().getAffinityRegistry().getValue(Affinity.NONE)); } @Override @@ -110,7 +110,7 @@ public double getAffinityDepth(Player player, ResourceLocation affinity) { } @Override - public double getAffinityDepth(Player player, IAffinity affinity) { + public double getAffinityDepth(Player player, Affinity affinity) { return getAffinityDepth(player, affinity.getId()); } @@ -123,7 +123,7 @@ public void setAffinityDepth(Player player, ResourceLocation affinity, float amo } @Override - public void setAffinityDepth(Player player, IAffinity affinity, float amount) { + public void setAffinityDepth(Player player, Affinity affinity, float amount) { setAffinityDepth(player, affinity.getId(), amount); } @@ -133,7 +133,7 @@ public void applyAffinityShift(Player player, ResourceLocation affinity, float s } @Override - public void applyAffinityShift(Player player, IAffinity affinity, float shift) { + public void applyAffinityShift(Player player, Affinity affinity, float shift) { if (affinity.getId() == Affinity.NONE) return; AffinityHolder storage = getAffinityHolder(player); float adjacentDecrement = shift * ADJACENT_FACTOR; @@ -146,13 +146,13 @@ public void applyAffinityShift(Player player, IAffinity affinity, float shift) { for (ResourceLocation adjacent : affinity.getAdjacentAffinities()) { storage.subtractFromAffinity(adjacent, adjacentDecrement); } - for (ResourceLocation minorOpposite : affinity.getMinorOpposingAffinities()) { + for (ResourceLocation minorOpposite : affinity.minorOpposites()) { storage.subtractFromAffinity(minorOpposite, minorOppositeDecrement); } - for (ResourceLocation majorOpposite : affinity.getMajorOpposingAffinities()) { + for (ResourceLocation majorOpposite : affinity.majorOpposites()) { storage.subtractFromAffinity(majorOpposite, majorOppositeDecrement); } - ResourceLocation directOpposite = affinity.getDirectOpposingAffinity(); + ResourceLocation directOpposite = affinity.directOpposite(); storage.subtractFromAffinity(directOpposite, shift); if (player instanceof ServerPlayer sp) { syncToPlayer(sp); @@ -255,7 +255,7 @@ public double getAffinityDepth(ResourceLocation affinity) { * @param affinity The affinity to get the depth for. * @return The depth for the given affinity. */ - public double getAffinityDepth(IAffinity affinity) { + public double getAffinityDepth(Affinity affinity) { return getAffinityDepth(affinity.getId()); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/OcculusBlock.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/OcculusBlock.java index a26af9a2a..c49860c39 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/OcculusBlock.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/OcculusBlock.java @@ -127,7 +127,7 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla } return InteractionResult.SUCCESS; } else { - pPlayer.awardStat(AMStats.INTERACT_WITH_OCCULUS); + pPlayer.awardStat(AMStats.INTERACT_WITH_OCCULUS.get()); return InteractionResult.CONSUME; } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarCoreBlockEntity.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarCoreBlockEntity.java index c7630b842..2b34d5d0e 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarCoreBlockEntity.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarCoreBlockEntity.java @@ -8,12 +8,12 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.etherium.IEtheriumProvider; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellIngredient; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.common.etherium.EtheriumHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlockEntities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlocks; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.network.BEClientSyncPacket; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.datafixers.util.Either; @@ -197,7 +197,8 @@ public void checkMultiblock() { private boolean checkMultiblockInternal() { if (getLevel() == null) return false; - AltarMaterialManager manager = AltarMaterialManager.instance(); + var structureRegistry = getLevel().registryAccess().registryOrThrow(AltarStructureMaterial.REGISTRY_KEY); + var capRegistry = getLevel().registryAccess().registryOrThrow(AltarCapMaterial.REGISTRY_KEY); for (Direction direction : Direction.Plane.HORIZONTAL) { BlockPos relative = getBlockPos().relative(direction, 2).relative(direction.getCounterClockWise(), 2).below(3); BlockState blockState = getLevel().getBlockState(relative); @@ -205,8 +206,10 @@ private boolean checkMultiblockInternal() { this.direction = direction; lecternPos = relative; viewPos = relative.above(); - structureMaterial = manager.getStructureMaterial(getLevel().getBlockState(getBlockPos().relative(direction.getClockWise())).getBlock()).orElse(null); - capMaterial = manager.getCapMaterial(getLevel().getBlockState(getBlockPos().relative(direction).relative(direction.getClockWise(), 2)).getBlock()).orElse(null); + Block sBlock = getLevel().getBlockState(getBlockPos().relative(direction.getClockWise())).getBlock(); + structureMaterial = structureRegistry.stream().filter(mat -> mat.block() == sBlock || mat.stair() == sBlock).findFirst().orElse(null); + Block cBlock = getLevel().getBlockState(getBlockPos().relative(direction).relative(direction.getClockWise(), 2)).getBlock(); + capMaterial = capRegistry.stream().filter(mat -> mat.cap() == cBlock).findFirst().orElse(null); leverPos = relative.relative(direction.getClockWise(), 4).above(1); camoState = getLevel().getBlockState(getBlockPos().relative(direction.getClockWise())); break; @@ -342,8 +345,8 @@ private void finishRecipe() { private ItemStack makeSpell() { ItemStack stack = new ItemStack(AMItems.SPELL.get()); - SpellItem.saveSpell(stack, SpellItem.getSpell(getBook())); - SpellItem.setSpellName(stack, getBook().getOrCreateTag().getString(WrittenBookItem.TAG_TITLE)); + ISpellItem.saveSpell(stack, ISpellItem.getSpell(getBook())); + ISpellItem.setSpellName(stack, getBook().getOrCreateTag().getString(WrittenBookItem.TAG_TITLE)); return stack; } @@ -426,7 +429,7 @@ public boolean isLeverActive() { @Nullable public Queue getRecipe() { if (recipe == null || recipe.isEmpty()) { - Optional.of(SpellItem.getSpell(getBook())).filter(ISpell::isValid).filter(((Predicate) ISpell::isEmpty).negate()).ifPresentOrElse(spell -> { + Optional.of(ISpellItem.getSpell(getBook())).filter(ISpell::isValid).filter(((Predicate) ISpell::isEmpty).negate()).ifPresentOrElse(spell -> { this.recipe = new ArrayDeque<>(spell.recipe()); requiredPower = this.recipe.size(); }, () -> { diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarMaterialManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarMaterialManager.java deleted file mode 100644 index be3256000..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/altar/AltarMaterialManager.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.block.altar; - -import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarCapMaterial; -import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarStructureMaterial; -import com.github.minecraftschurlimods.codeclib.CodecDataManager; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.Block; -import net.minecraftforge.common.util.Lazy; -import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Map; -import java.util.Optional; - -public final class AltarMaterialManager { - private static final Lazy INSTANCE = Lazy.concurrentOf(AltarMaterialManager::new); - private final Logger logger = LoggerFactory.getLogger(AltarMaterialManager.class); - public final CodecDataManager structure = new CodecDataManager<>(ArsMagicaAPI.MOD_ID, "altar/structure", AltarStructureMaterial.CODEC, logger).subscribeAsSyncable(ArsMagicaLegacy.NETWORK_HANDLER); - public final CodecDataManager cap = new CodecDataManager<>(ArsMagicaAPI.MOD_ID, "altar/cap", AltarCapMaterial.CODEC, logger).subscribeAsSyncable(ArsMagicaLegacy.NETWORK_HANDLER); - - /** - * @return The only instance of this class. - */ - public static AltarMaterialManager instance() { - return INSTANCE.get(); - } - - /** - * @param block The block to get the structure material of. - * @return An optional containing the structure material of the given block, or an empty optional if no structure material was found. - */ - public Optional getStructureMaterial(Block block) { - return structure.values().stream().filter(mat -> mat.block() == block || mat.stair() == block).findFirst(); - } - - /** - * @param block The block to get the cap material of. - * @return An optional containing the cap material of the given block, or an empty optional if no cap material was found. - */ - public Optional getCapMaterial(Block block) { - return cap.values().stream().filter(mat -> mat.cap() == block).findFirst(); - } - - /** - * @param r The random value to use. - * @return A random structure material. - */ - @Nullable - public AltarStructureMaterial getRandomStructureMaterial(int r) { - return structure.size() > 0 ? structure.values().toArray(AltarStructureMaterial[]::new)[r % structure.size()] : null; - } - - /** - * @param r The random value to use. - * @return A random cap material. - */ - @Nullable - public AltarCapMaterial getRandomCapMaterial(int r) { - return cap.size() > 0 ? cap.values().toArray(AltarCapMaterial[]::new)[r % cap.size()] : null; - } - - /** - * @param structureMaterial The structure material to get the id for. - * @return The id of the given structure material. - */ - @Nullable - public ResourceLocation getId(AltarStructureMaterial structureMaterial) { - return structure.entrySet().stream().filter(entry -> entry.getValue().equals(structureMaterial)).map(Map.Entry::getKey).findFirst().orElse(null); - } - - /** - * @param capMaterial The cap material to get the id for. - * @return The id of the given cap material. - */ - @Nullable - public ResourceLocation getId(AltarCapMaterial capMaterial) { - return cap.entrySet().stream().filter(entry -> entry.getValue().equals(capMaterial)).map(Map.Entry::getKey).findFirst().orElse(null); - } - - /** - * @param location The id to get the structure material for. - * @return The structure material for the given id. - */ - @Nullable - public AltarStructureMaterial getStructureMaterial(ResourceLocation location) { - return structure.get(location); - } - - /** - * @param location The id to get the cap material for. - * @return The cap material for the given id. - */ - @Nullable - public AltarCapMaterial getCapMaterial(ResourceLocation location) { - return cap.get(location); - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlock.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlock.java index ae0ee2622..f834e4d86 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlock.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlock.java @@ -116,7 +116,7 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla pPos = pPos.relative(pState.getValue(InscriptionTableBlock.FACING).getClockWise()); } NetworkHooks.openScreen((ServerPlayer) pPlayer, ((InscriptionTableBlockEntity) pLevel.getBlockEntity(pPos)), pPos); - pPlayer.awardStat(AMStats.INTERACT_WITH_INSCRIPTION_TABLE); + pPlayer.awardStat(AMStats.INTERACT_WITH_INSCRIPTION_TABLE.get()); return InteractionResult.CONSUME; } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlockEntity.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlockEntity.java index a41a76f4a..0d22db326 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlockEntity.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableBlockEntity.java @@ -3,8 +3,8 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMBlockEntities; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -50,7 +50,7 @@ public InscriptionTableBlockEntity(BlockPos pWorldPosition, BlockState pBlockSta */ public static ItemStack makeRecipe(String name, String author, ISpell spell) { ItemStack book = new ItemStack(Items.WRITTEN_BOOK); - SpellItem.saveSpell(book, spell); + ISpellItem.saveSpell(book, spell); CompoundTag tag = book.getOrCreateTag(); tag.putString(WrittenBookItem.TAG_TITLE, name); tag.putString(WrittenBookItem.TAG_AUTHOR, author); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableMenu.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableMenu.java index 766bbee3c..ed055420e 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableMenu.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/inscriptiontable/InscriptionTableMenu.java @@ -11,7 +11,6 @@ import com.github.minecraftschurlimods.arsmagicalegacy.client.gui.InscriptionTableScreen; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMMenuTypes; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.network.InscriptionTableSyncPacket; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; @@ -163,8 +162,8 @@ public void setChanged() { public void set(ItemStack stack) { super.set(stack); if (stack.getItem() instanceof ISpellItem) { - ISpell spell = SpellItem.getSpell(stack); - table.onSync(SpellItem.getSpellName(stack).orElse(null), spell.isEmpty() ? null : spell); + ISpell spell = ISpellItem.getSpell(stack); + table.onSync(ISpellItem.getSpellName(stack).orElse(null), spell.isEmpty() ? null : spell); } } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/obelisk/ObeliskBlock.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/obelisk/ObeliskBlock.java index 15ce4b815..fc0ef8138 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/obelisk/ObeliskBlock.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/block/obelisk/ObeliskBlock.java @@ -54,7 +54,7 @@ protected void openContainer(Level level, BlockPos pos, Player player) { BlockEntity blockentity = level.getBlockEntity(pos.below(level.getBlockState(pos).getValue(PART).ordinal())); if (blockentity instanceof ObeliskBlockEntity obeliskBlockEntity) { player.openMenu(obeliskBlockEntity); - player.awardStat(AMStats.INTERACT_WITH_OBELISK); + player.awardStat(AMStats.INTERACT_WITH_OBELISK.get()); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ArcaneGuardian.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ArcaneGuardian.java index 85e6df1d8..9bbec0979 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ArcaneGuardian.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ArcaneGuardian.java @@ -3,10 +3,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.AbstractBoss; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.ExecuteSpellGoal; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.DispelGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAttributes; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; @@ -71,9 +72,10 @@ public boolean hurt(DamageSource pSource, float pAmount) { protected void registerGoals() { super.registerGoals(); goalSelector.addGoal(1, new DispelGoal<>(this)); - goalSelector.addGoal(1, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "heal_self")).spell(), 16, 40)); - goalSelector.addGoal(2, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "blink")).spell(), 16, 4)); - goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "arcane_bolt")).spell(), 12, 18)); + Registry prefabSpells = level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY); + goalSelector.addGoal(1, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "heal_self")).spell(), 16, 40)); + goalSelector.addGoal(2, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "blink")).spell(), 16, 4)); + goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "arcane_bolt")).spell(), 12, 18)); } private void updateRotation() { diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/FireGuardian.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/FireGuardian.java index bf244fc5e..144d41453 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/FireGuardian.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/FireGuardian.java @@ -3,13 +3,14 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.AbstractBoss; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.ExecuteSpellGoal; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.DispelGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.DiveGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.FireRainGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.FlamethrowerGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAttributes; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.BossEvent; @@ -89,8 +90,9 @@ public boolean hurt(@NotNull DamageSource pSource, float pAmount) { protected void registerGoals() { super.registerGoals(); goalSelector.addGoal(1, new DispelGoal<>(this)); - goalSelector.addGoal(2, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "melt_armor")).spell(), 12, 18)); - goalSelector.addGoal(4, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "fire_bolt")).spell(), 12, 18)); + Registry prefabSpells = level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY); + goalSelector.addGoal(2, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "melt_armor")).spell(), 12, 18)); + goalSelector.addGoal(4, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "fire_bolt")).spell(), 12, 18)); goalSelector.addGoal(2, new DiveGoal(this)); goalSelector.addGoal(1, new FireRainGoal(this)); goalSelector.addGoal(3, new FlamethrowerGoal(this)); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LifeGuardian.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LifeGuardian.java index 01cc61237..7b035ec59 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LifeGuardian.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LifeGuardian.java @@ -3,10 +3,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.AbstractBoss; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.ExecuteSpellGoal; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.DispelGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAttributes; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; +import net.minecraft.core.Registry; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -91,8 +92,9 @@ public boolean hurt(DamageSource pSource, float pAmount) { protected void registerGoals() { super.registerGoals(); goalSelector.addGoal(1, new DispelGoal<>(this)); - goalSelector.addGoal(1, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "heal_self")).spell(), 16, 80)); - goalSelector.addGoal(2, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "nausea")).spell(), 16, 4)); + Registry prefabSpells = level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY); + goalSelector.addGoal(1, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "heal_self")).spell(), 16, 80)); + goalSelector.addGoal(2, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "nausea")).spell(), 16, 4)); //goalSelector.addGoal(3, new SummonAlliesGoal(this, EarthElemental.class, FireElemental.class, ManaElemental.class, Darkling.class)); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LightningGuardian.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LightningGuardian.java index 1be21ad14..227d29605 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LightningGuardian.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/LightningGuardian.java @@ -3,13 +3,14 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.AbstractBoss; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.ExecuteSpellGoal; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.DispelGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.LightningBoltGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.LightningRodGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.StaticGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAttributes; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.BossEvent; @@ -93,10 +94,11 @@ public boolean hurt(DamageSource pSource, float pAmount) { protected void registerGoals() { super.registerGoals(); goalSelector.addGoal(1, new DispelGoal<>(this)); - goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "lightning_bolt")).spell(), 20, 180)); - goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "lightning_rune")).spell(), 20, 180)); - goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "area_lightning")).spell(), 20, 180)); - goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "scramble_synapses")).spell(), 40, 240)); + Registry prefabSpells = level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY); + goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "lightning_bolt")).spell(), 20, 180)); + goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "lightning_rune")).spell(), 20, 180)); + goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "area_lightning")).spell(), 20, 180)); + goalSelector.addGoal(3, new ExecuteSpellGoal<>(this, prefabSpells.get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "scramble_synapses")).spell(), 40, 240)); goalSelector.addGoal(5, new LightningBoltGoal(this)); goalSelector.addGoal(2, new LightningRodGoal(this)); goalSelector.addGoal(3, new StaticGoal(this)); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ManaCreeper.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ManaCreeper.java index 6e3f524fd..1deaa01e2 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ManaCreeper.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ManaCreeper.java @@ -3,14 +3,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; -import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; -import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.goal.AvoidEntityGoal; import net.minecraft.world.entity.monster.Creeper; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; public class ManaCreeper extends Creeper { @@ -24,12 +18,8 @@ public static AttributeSupplier.Builder createAttributes() { @Override protected void registerGoals() { - goalSelector.addGoal(1, new FloatGoal(this)); - goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.8D)); - goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8F)); - goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); - targetSelector.addGoal(2, new HurtByTargetGoal(this)); + super.registerGoals(); + goalSelector.getAvailableGoals().stream().filter(goal -> goal.getGoal() instanceof AvoidEntityGoal).forEach(goal -> goalSelector.removeGoal(goal.getGoal())); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/WaterGuardian.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/WaterGuardian.java index c7da3fa7e..a95da0451 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/WaterGuardian.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/WaterGuardian.java @@ -3,13 +3,13 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.AbstractBoss; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.ExecuteSpellGoal; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.ChaosWaterBoltGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.CloneGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.DispelGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ai.WaterSpinAttackGoal; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAttributes; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -113,7 +113,7 @@ public boolean hurt(@NotNull DamageSource pSource, float pAmount) { protected void registerGoals() { super.registerGoals(); goalSelector.addGoal(1, new DispelGoal<>(this)); - goalSelector.addGoal(4, new ExecuteSpellGoal<>(this, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "water_bolt")).spell(), 12, 18)); + goalSelector.addGoal(4, new ExecuteSpellGoal<>(this, level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "water_bolt")).spell(), 12, 18)); goalSelector.addGoal(2, new ChaosWaterBoltGoal(this)); goalSelector.addGoal(3, new CloneGoal(this)); goalSelector.addGoal(3, new WaterSpinAttackGoal(this)); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ChaosWaterBoltGoal.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ChaosWaterBoltGoal.java index c0ab823dd..44e34bd52 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ChaosWaterBoltGoal.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ChaosWaterBoltGoal.java @@ -2,18 +2,19 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.WaterGuardian; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.phys.EntityHitResult; public class ChaosWaterBoltGoal extends Goal { private final WaterGuardian waterGuardian; - private final ISpell spell = PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "chaos_water_bolt")).spell(); + private final ISpell spell; public ChaosWaterBoltGoal(WaterGuardian waterGuardian) { this.waterGuardian = waterGuardian; + spell = waterGuardian.level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "chaos_water_bolt")).spell(); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/DispelGoal.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/DispelGoal.java index 3118311e8..136fbb52c 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/DispelGoal.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/DispelGoal.java @@ -3,13 +3,13 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.ExecuteSpellGoal; import com.github.minecraftschurlimods.arsmagicalegacy.api.entity.ISpellCasterEntity; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Mob; public class DispelGoal extends ExecuteSpellGoal { public DispelGoal(T caster) { - super(caster, PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "dispel")).spell(), 16, 40); + super(caster, caster.level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "dispel")).spell(), 16, 40); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderBoltGoal.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderBoltGoal.java index 9a4a8ef2c..4113ec7b4 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderBoltGoal.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderBoltGoal.java @@ -2,9 +2,9 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.EnderGuardian; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.ai.goal.Goal; @@ -12,11 +12,12 @@ public class EnderBoltGoal extends Goal { private final EnderGuardian enderGuardian; - private final ISpell spell = PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender_bolt")).spell(); + private final ISpell spell; private int cooldown = 0; public EnderBoltGoal(EnderGuardian enderGuardian) { this.enderGuardian = enderGuardian; + spell = enderGuardian.level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender_bolt")).spell(); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderTorrentGoal.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderTorrentGoal.java index 3707eb941..79e1266f2 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderTorrentGoal.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderTorrentGoal.java @@ -2,9 +2,9 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.EnderGuardian; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.ai.goal.Goal; @@ -12,11 +12,12 @@ public class EnderTorrentGoal extends Goal { private final EnderGuardian enderGuardian; - private final ISpell spell = PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender_bolt")).spell(); + private final ISpell spell; private int cooldown = 0; public EnderTorrentGoal(EnderGuardian enderGuardian) { this.enderGuardian = enderGuardian; + spell = enderGuardian.level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender_bolt")).spell(); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderWaveGoal.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderWaveGoal.java index efc4c01a4..9cbad8549 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderWaveGoal.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/EnderWaveGoal.java @@ -2,9 +2,9 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.EnderGuardian; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.ai.goal.Goal; @@ -13,11 +13,12 @@ public class EnderWaveGoal extends Goal { private final EnderGuardian enderGuardian; - private final ISpell spell = PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender_wave")).spell(); + private final ISpell spell; private int cooldown = 0; public EnderWaveGoal(EnderGuardian enderGuardian) { this.enderGuardian = enderGuardian; + spell = enderGuardian.level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ender_wave")).spell(); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/OtherwordlyRoarGoal.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/OtherwordlyRoarGoal.java index 5250d3795..137e382d8 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/OtherwordlyRoarGoal.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/OtherwordlyRoarGoal.java @@ -2,8 +2,8 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.EnderGuardian; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.goal.Goal; @@ -11,11 +11,12 @@ public class OtherwordlyRoarGoal extends Goal { private final EnderGuardian enderGuardian; - private final ISpell spell = PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "otherworldly_roar")).spell(); + private final ISpell spell; private int cooldown = 0; public OtherwordlyRoarGoal(EnderGuardian enderGuardian) { this.enderGuardian = enderGuardian; + spell = enderGuardian.level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "otherworldly_roar")).spell(); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ProtectGoal.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ProtectGoal.java index 2920102bc..984a8ba79 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ProtectGoal.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/entity/ai/ProtectGoal.java @@ -2,19 +2,20 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.EnderGuardian; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.phys.EntityHitResult; public class ProtectGoal extends Goal { private final EnderGuardian enderGuardian; - private final ISpell spell = PrefabSpellManager.instance().get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "dispel")).spell(); + private final ISpell spell; private int cooldown = 0; public ProtectGoal(EnderGuardian enderGuardian) { this.enderGuardian = enderGuardian; + spell = enderGuardian.level.registryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).get(new ResourceLocation(ArsMagicaAPI.MOD_ID, "dispel")).spell(); } @Override diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/AbilityHandler.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/AbilityHandler.java index b145ce626..5d92f1335 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/AbilityHandler.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/AbilityHandler.java @@ -2,11 +2,11 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbilityData; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.event.AffinityChangingEvent; import com.github.minecraftschurlimods.arsmagicalegacy.api.event.SpellEvent; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ability.AbilityUUIDs; +import com.github.minecraftschurlimods.arsmagicalegacy.common.affinity.AbilityUUIDs; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAbilities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMMobEffects; import com.github.minecraftschurlimods.arsmagicalegacy.network.UpdateStepHeightPacket; @@ -51,8 +51,8 @@ private static void livingDeath(LivingDeathEvent event) { var api = ArsMagicaAPI.get(); if (!api.getMagicHelper().knowsMagic(player)) return; var helper = api.getAffinityHelper(); - IAbilityData ability = api.getAbilityManager().get(AMAbilities.NAUSEA.getId()); - if (ability.test(player)) { + Ability ability = player.getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY).get(AMAbilities.NAUSEA); + if (ability != null && ability.test(player)) { player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, (int) (600 * helper.getAffinityDepth(player, ability.affinity())))); } } @@ -60,46 +60,43 @@ private static void livingDeath(LivingDeathEvent event) { private static void livingHurt(LivingHurtEvent event) { LivingEntity entity = event.getEntity(); + var api = ArsMagicaAPI.get(); + var helper = api.getAffinityHelper(); + var abilityRegistry = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY); if (event.getSource().getEntity() instanceof Player player) { - var api = ArsMagicaAPI.get(); - var manager = api.getAbilityManager(); - var helper = api.getAffinityHelper(); - IAbilityData ability = manager.get(AMAbilities.FIRE_PUNCH.getId()); - if (ability.test(player) && !entity.fireImmune()) { + Ability ability = abilityRegistry.get(AMAbilities.FIRE_PUNCH); + if (ability != null && ability.test(player) && !entity.fireImmune()) { entity.setSecondsOnFire((int) (5 * helper.getAffinityDepth(player, ability.affinity()))); } - ability = manager.get(AMAbilities.FROST_PUNCH.getId()); - if (ability.test(player) && entity.canFreeze()) { + ability = abilityRegistry.get(AMAbilities.FROST_PUNCH); + if (ability != null && ability.test(player) && entity.canFreeze()) { entity.addEffect(new MobEffectInstance(AMMobEffects.FROST.get(), (int) (100 * helper.getAffinityDepth(player, ability.affinity())))); } - ability = manager.get(AMAbilities.SMITE.getId()); - if (ability.test(player) && entity.getMobType() == MobType.UNDEAD) { + ability = abilityRegistry.get(AMAbilities.SMITE); + if (ability != null && ability.test(player) && entity.getMobType() == MobType.UNDEAD) { event.setAmount((float) (event.getAmount() + helper.getAffinityDepth(player, ability.affinity()) * 4)); } } if (entity instanceof Player player) { - var api = ArsMagicaAPI.get(); if (!api.getMagicHelper().knowsMagic(player)) return; - var manager = api.getAbilityManager(); - var helper = api.getAffinityHelper(); - IAbilityData ability = manager.get(AMAbilities.THORNS.getId()); - if (ability.test(player) && event.getSource().getEntity() != null) { + Ability ability = abilityRegistry.get(AMAbilities.THORNS); + if (ability != null && ability.test(player) && event.getSource().getEntity() != null) { event.getSource().getEntity().hurt(event.getSource(), (float) (event.getAmount() * helper.getAffinityDepth(player, ability.affinity()))); } - ability = manager.get(AMAbilities.ENDERMAN_THORNS.getId()); - if (ability.test(player) && event.getSource().getEntity() instanceof EnderMan enderMan) { + ability = abilityRegistry.get(AMAbilities.ENDERMAN_THORNS); + if (ability != null && ability.test(player) && event.getSource().getEntity() instanceof EnderMan enderMan) { enderMan.hurt(event.getSource(), (float) (event.getAmount() * helper.getAffinityDepth(player, ability.affinity()))); } - ability = manager.get(AMAbilities.RESISTANCE.getId()); - if (ability.test(player)) { + ability = abilityRegistry.get(AMAbilities.RESISTANCE); + if (ability != null && ability.test(player)) { event.setAmount((float) (event.getAmount() * (1 - helper.getAffinityDepth(player, ability.affinity()) / 2))); } - ability = manager.get(AMAbilities.FIRE_RESISTANCE.getId()); - if (ability.test(player) && event.getSource().isFire()) { + ability = abilityRegistry.get(AMAbilities.FIRE_RESISTANCE); + if (ability != null && ability.test(player) && event.getSource().isFire()) { event.setAmount((float) (event.getAmount() * (1 - helper.getAffinityDepth(player, ability.affinity()) / 2))); } - ability = manager.get(AMAbilities.MAGIC_DAMAGE.getId()); - if (ability.test(player) && event.getSource().isMagic()) { + ability = abilityRegistry.get(AMAbilities.MAGIC_DAMAGE); + if (ability != null && ability.test(player) && event.getSource().isMagic()) { event.setAmount((float) (event.getAmount() * (1 + helper.getAffinityDepth(player, ability.affinity()) / 2))); } } @@ -111,10 +108,10 @@ private static void livingJump(LivingEvent.LivingJumpEvent event) { if (entity instanceof Player player) { var api = ArsMagicaAPI.get(); if (!api.getMagicHelper().knowsMagic(player)) return; - var manager = api.getAbilityManager(); + var abilityRegistry = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY); var helper = api.getAffinityHelper(); - IAbilityData ability = manager.get(AMAbilities.JUMP_BOOST.getId()); - if (ability.test(player)) { + Ability ability = abilityRegistry.get(AMAbilities.JUMP_BOOST); + if (ability != null && ability.test(player)) { entity.setDeltaMovement(entity.getDeltaMovement().add(0, 0.5f * helper.getAffinityDepth(player, ability.affinity()), 0)); } } @@ -126,14 +123,14 @@ private static void livingFall(LivingFallEvent event) { if (entity instanceof Player player) { var api = ArsMagicaAPI.get(); if (!api.getMagicHelper().knowsMagic(player)) return; - var manager = api.getAbilityManager(); + var abilityRegistry = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY); var helper = api.getAffinityHelper(); - IAbilityData ability = manager.get(AMAbilities.FEATHER_FALLING.getId()); - if (ability.test(player)) { + Ability ability = abilityRegistry.get(AMAbilities.FEATHER_FALLING); + if (ability != null && ability.test(player)) { event.setDistance((float) (event.getDistance() * (1 - helper.getAffinityDepth(player, ability.affinity()) / 2))); } - ability = manager.get(AMAbilities.FALL_DAMAGE.getId()); - if (ability.test(player)) { + ability = abilityRegistry.get(AMAbilities.FALL_DAMAGE); + if (ability != null && ability.test(player)) { event.setDistance((float) (event.getDistance() / (1 - helper.getAffinityDepth(player, ability.affinity()) / 2))); } } @@ -143,16 +140,15 @@ private static void enderManAnger(EnderManAngerEvent event) { Player player = event.getPlayer(); var api = ArsMagicaAPI.get(); if (!api.getMagicHelper().knowsMagic(player)) return; - IAbilityData ability = api.getAbilityManager().get(AMAbilities.ENDERMAN_PUMPKIN.getId()); - if (ability.test(player)) { + Ability ability = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY).get(AMAbilities.ENDERMAN_PUMPKIN); + if (ability != null && ability.test(player)) { event.setCanceled(true); } } private static void potionApplicable(MobEffectEvent.Applicable event) { - var api = ArsMagicaAPI.get(); - IAbilityData ability = api.getAbilityManager().get(AMAbilities.POISON_RESISTANCE.getId()); - if (event.getEntity() instanceof Player player && event.getEffectInstance().getEffect() == MobEffects.POISON && ability.test(player)) { + Ability ability = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY).get(AMAbilities.POISON_RESISTANCE); + if (ability != null && event.getEntity() instanceof Player player && event.getEffectInstance().getEffect() == MobEffects.POISON && ability.test(player)) { event.setResult(Event.Result.DENY); } } @@ -161,18 +157,19 @@ private static void manaCostPre(SpellEvent.ManaCost.Pre event) { LivingEntity caster = event.getEntity(); if (caster instanceof Player player) { var api = ArsMagicaAPI.get(); - IAbilityData ability = api.getAbilityManager().get(AMAbilities.MANA_REDUCTION.getId()); - if (ability.test(player)) { + Ability ability = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY).get(AMAbilities.MANA_REDUCTION); + if (ability != null && ability.test(player)) { event.setBase(event.getBase() * (float) (1 - (api.getAffinityHelper().getAffinityDepth(player, ability.affinity())) * 0.5f)); } } } + @SuppressWarnings("ConstantConditions") private static void affinityChangingPost(AffinityChangingEvent.Post event) { var api = ArsMagicaAPI.get(); - var manager = api.getAbilityManager(); + var abilityRegistry = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY); var helper = api.getAffinityHelper(); - IAffinity affinity = event.affinity; + Affinity affinity = event.affinity; Player player = event.getEntity(); AttributeMap attributes = player.getAttributes(); attributes.getInstance(ForgeMod.SWIM_SPEED.get()).removeModifier(AbilityUUIDs.SWIM_SPEED); @@ -180,52 +177,52 @@ private static void affinityChangingPost(AffinityChangingEvent.Post event) { attributes.getInstance(ForgeMod.ENTITY_GRAVITY.get()).removeModifier(AbilityUUIDs.GRAVITY); attributes.getInstance(Attributes.MOVEMENT_SPEED).removeModifier(AbilityUUIDs.SLOWNESS); attributes.getInstance(Attributes.MOVEMENT_SPEED).removeModifier(AbilityUUIDs.SPEED); - IAbilityData ability = manager.get(AMAbilities.SWIM_SPEED.getId()); - if (affinity == ability.affinity()) { + Ability ability = abilityRegistry.get(AMAbilities.SWIM_SPEED); + if (ability != null && affinity == ability.affinity()) { if (ability.test(player)) { attributes.getInstance(ForgeMod.SWIM_SPEED.get()).addPermanentModifier(new AttributeModifier(AbilityUUIDs.SWIM_SPEED, "Swim Speed Ability", helper.getAffinityDepth(player, affinity) * 0.5f, AttributeModifier.Operation.MULTIPLY_TOTAL)); } } - ability = manager.get(AMAbilities.HASTE.getId()); - if (affinity == ability.affinity()) { + ability = abilityRegistry.get(AMAbilities.HASTE); + if (ability != null && affinity == ability.affinity()) { if (ability.test(player)) { attributes.getInstance(Attributes.ATTACK_SPEED).addPermanentModifier(new AttributeModifier(AbilityUUIDs.HASTE, "Haste Ability", helper.getAffinityDepth(player, affinity) * 0.5f, AttributeModifier.Operation.MULTIPLY_TOTAL)); } } - ability = manager.get(AMAbilities.GRAVITY.getId()); - if (affinity == ability.affinity()) { + ability = abilityRegistry.get(AMAbilities.GRAVITY); + if (ability != null && affinity == ability.affinity()) { if (ability.test(player)) { attributes.getInstance(ForgeMod.ENTITY_GRAVITY.get()).addPermanentModifier(new AttributeModifier(AbilityUUIDs.GRAVITY, "Gravity Ability", helper.getAffinityDepth(player, affinity) * 0.5f, AttributeModifier.Operation.MULTIPLY_TOTAL)); } } - ability = manager.get(AMAbilities.SLOWNESS.getId()); - if (affinity == ability.affinity()) { + ability = abilityRegistry.get(AMAbilities.SLOWNESS); + if (ability != null && affinity == ability.affinity()) { if (ability.test(player)) { attributes.getInstance(Attributes.MOVEMENT_SPEED).addPermanentModifier(new AttributeModifier(AbilityUUIDs.SLOWNESS, "Slowness Ability", -(helper.getAffinityDepth(player, affinity) - Objects.requireNonNullElse(ability.bounds().getMin(), 0d)) * 0.1f, AttributeModifier.Operation.ADDITION)); } } - ability = manager.get(AMAbilities.SPEED.getId()); - if (affinity == ability.affinity()) { + ability = abilityRegistry.get(AMAbilities.SPEED); + if (ability != null && affinity == ability.affinity()) { if (ability.test(player)) { attributes.getInstance(Attributes.MOVEMENT_SPEED).addPermanentModifier(new AttributeModifier(AbilityUUIDs.SPEED, "Speed Ability", (helper.getAffinityDepth(player, affinity) - Objects.requireNonNullElse(ability.bounds().getMin(), 0d)) * 0.1f, AttributeModifier.Operation.ADDITION)); } } - ability = manager.get(AMAbilities.STEP_ASSIST.getId()); - if (affinity == ability.affinity()) { + ability = abilityRegistry.get(AMAbilities.STEP_ASSIST); + if (ability != null && affinity == ability.affinity()) { float stepHeight = ability.test(player) ? 1f : 0.6f; - player.maxUpStep = stepHeight; + player.maxUpStep = stepHeight;//TODO move to attribute modifier ArsMagicaLegacy.NETWORK_HANDLER.sendToPlayer(new UpdateStepHeightPacket(stepHeight), player); } - ability = manager.get(AMAbilities.POISON_RESISTANCE.getId()); - if (affinity == ability.affinity() && ability.test(player) && player.hasEffect(MobEffects.POISON)) { + ability = abilityRegistry.get(AMAbilities.POISON_RESISTANCE); + if (ability != null && affinity == ability.affinity() && ability.test(player) && player.hasEffect(MobEffects.POISON)) { player.removeEffect(MobEffects.POISON); } } private static void spellCastPost(SpellEvent.Cast.Post event) { if (event.getEntity() instanceof Player player) { - IAbilityData ability = ArsMagicaAPI.get().getAbilityManager().get(AMAbilities.CLARITY.getId()); - if (ability.test(player) && player.getLevel().getRandom().nextBoolean()) { + Ability ability = event.getEntity().getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY).get(AMAbilities.CLARITY); + if (ability != null && ability.test(player) && player.getLevel().getRandom().nextBoolean()) { player.addEffect(new MobEffectInstance(AMMobEffects.CLARITY.get(), 1200)); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EffectHandler.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EffectHandler.java index a73813c83..e99624de3 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EffectHandler.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EffectHandler.java @@ -124,6 +124,7 @@ private static void potionRemove(MobEffectEvent.Remove event) { private static void entitySize(EntityEvent.Size event) { if (!(event.getEntity() instanceof LivingEntity living) || !living.isAddedToWorld()) return; + if (living.getAttribute(AMAttributes.SCALE.get()) == null) return; float factor = (float) living.getAttributeValue(AMAttributes.SCALE.get()); if (factor == 1) return; EntityDimensions newSize = event.getNewSize(); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EventHandler.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EventHandler.java index 2510cfcf3..84983895d 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EventHandler.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/EventHandler.java @@ -2,18 +2,16 @@ import com.github.minecraftschurlimods.arsmagicalegacy.Config; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.event.PlayerLevelUpEvent; import com.github.minecraftschurlimods.arsmagicalegacy.api.event.SpellEvent; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.ContingencyType; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IBurnoutHelper; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.IManaHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPartData; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ability.AbilityManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.affinity.AffinityHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.block.altar.AltarMaterialManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.block.obelisk.ObeliskFuelManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.AirGuardian; import com.github.minecraftschurlimods.arsmagicalegacy.common.entity.ArcaneGuardian; @@ -40,15 +38,10 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.MagicHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.ManaHelper; import com.github.minecraftschurlimods.arsmagicalegacy.common.magic.RiftHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualManager; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.OcculusTabManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.EtheriumSpellIngredient; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.IngredientSpellIngredient; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.SpellDataManager; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.SpellTransformationManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.TierMapping; import com.github.minecraftschurlimods.arsmagicalegacy.compat.CompatManager; import com.github.minecraftschurlimods.codeclib.CodecCapabilityProvider; @@ -183,15 +176,8 @@ private static void entityAttributeModification(EntityAttributeModificationEvent event.add(EntityType.PLAYER, AMAttributes.MAX_BURNOUT.get()); event.add(EntityType.PLAYER, AMAttributes.MANA_REGEN.get()); event.add(EntityType.PLAYER, AMAttributes.BURNOUT_REGEN.get()); - for (EntityType entity : ForgeRegistries.ENTITY_TYPES) { - EntityType living; - try { - //noinspection unchecked - living = (EntityType) entity; - } catch (ClassCastException e) { - continue; - } - event.add(living, AMAttributes.SCALE.get()); + for (EntityType entity : event.getTypes()) { + event.add(entity, AMAttributes.SCALE.get()); } } @@ -220,17 +206,9 @@ private static void attachCapabilities(AttachCapabilitiesEvent event) { } private static void addReloadListener(AddReloadListenerEvent event) { - event.addListener(OcculusTabManager.instance()); - event.addListener(SkillManager.instance()); event.addListener(SpellDataManager.instance()); - event.addListener(AbilityManager.instance()); - event.addListener(AltarMaterialManager.instance().cap); - event.addListener(AltarMaterialManager.instance().structure); event.addListener(TierMapping.instance()); - event.addListener(PrefabSpellManager.instance()); event.addListener(ObeliskFuelManager.instance()); - event.addListener(SpellTransformationManager.instance()); - event.addListener(RitualManager.instance()); } private static void entityJoinWorld(EntityJoinLevelEvent event) { @@ -291,8 +269,8 @@ private static void manaCostPre(SpellEvent.ManaCost.Pre event) { if (iSpellPart.getType() != ISpellPart.SpellPartType.COMPONENT) continue; ISpellPartData dataForPart = api.getSpellDataManager().getDataForPart(iSpellPart); if (dataForPart == null) continue; - Set affinities = dataForPart.affinities(); - for (IAffinity aff : affinities) { + Set affinities = dataForPart.affinities(); + for (Affinity aff : affinities) { double value = api.getAffinityHelper().getAffinityDepth(player, aff); if (value > 0) { cost -= (float) (cost * (0.5f * value / 100f)); @@ -310,10 +288,10 @@ private static void playerLevelUp(PlayerLevelUpEvent event) { if (level == 1) { api.getSkillHelper().addSkillPoint(player, AMSkillPoints.BLUE.getId(), Config.SERVER.EXTRA_BLUE_SKILL_POINTS.get()); } - for (ISkillPoint iSkillPoint : api.getSkillPointRegistry()) { - int minEarnLevel = iSkillPoint.minEarnLevel(); - if (level >= minEarnLevel && (level - minEarnLevel) % iSkillPoint.levelsForPoint() == 0) { - api.getSkillHelper().addSkillPoint(player, iSkillPoint); + for (SkillPoint skillPoint : api.getSkillPointRegistry()) { + int minEarnLevel = skillPoint.minEarnLevel(); + if (level >= minEarnLevel && (level - minEarnLevel) % skillPoint.levelsForPoint() == 0) { + api.getSkillHelper().addSkillPoint(player, skillPoint); event.getEntity().getLevel().playSound(null, event.getEntity().getX(), event.getEntity().getY(), event.getEntity().getZ(), AMSounds.GET_KNOWLEDGE_POINT.get(), SoundSource.PLAYERS, 1f, 1f); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/TickHandler.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/TickHandler.java index 6f458e07c..81f76a1cf 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/TickHandler.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/handler/TickHandler.java @@ -1,9 +1,9 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.handler; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbilityData; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.ContingencyType; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ability.AbilityUUIDs; +import com.github.minecraftschurlimods.arsmagicalegacy.common.affinity.AbilityUUIDs; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAbilities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAttributes; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMMobEffects; @@ -13,15 +13,21 @@ import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeMap; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.enchantment.FrostWalkerEnchantment; import net.minecraft.world.level.LightLayer; +import net.minecraftforge.common.capabilities.CapabilityProvider; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; + +import java.lang.reflect.Field; +import java.util.Objects; /** * Holds the living and player tick event handlers. These get special treatment as these events should not have more than one event handler per mod. @@ -32,6 +38,8 @@ static void init(IEventBus forgeBus) { forgeBus.addListener(TickHandler::playerTick); } + private static final Field CAP_PROVIDER_VALID = ObfuscationReflectionHelper.findField(CapabilityProvider.class, "valid"); + private static void livingUpdate(LivingEvent.LivingTickEvent event) { LivingEntity entity = event.getEntity(); if (entity.hasEffect(AMMobEffects.WATERY_GRAVE.get()) && (entity.isInWaterOrBubble() || entity.getPose() == Pose.SWIMMING)) { @@ -65,15 +73,15 @@ private static void playerTickServerStart(final Player player) { } private static void playerTickServerEnd(final Player player) { - + // NOOP } private static void playerTickClientStart(final Player player) { - + // NOOP } private static void playerTickClientEnd(final Player player) { - + // NOOP } private static void manaAndBurnoutRegen(final Player player) { @@ -87,52 +95,67 @@ private static void manaAndBurnoutRegen(final Player player) { private static void handleAbilities(final Player player) { if (player.isDeadOrDying()) return; var api = ArsMagicaAPI.get(); - var manager = api.getAbilityManager(); + var manager = player.getLevel().registryAccess().registryOrThrow(Ability.REGISTRY_KEY); var helper = api.getAffinityHelper(); - IAbilityData ability; + try { + if (!(boolean)CAP_PROVIDER_VALID.get(player)) return; + } catch (IllegalAccessException ignored) { + return; + } + Ability ability; if (!player.isCreative()) { - if (manager.hasAbility(player, AMAbilities.WATER_DAMAGE_FIRE.getId()) && player.isInWater() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { + ability = manager.get(AMAbilities.WATER_DAMAGE_FIRE); + if (ability != null && ability.test(player) && player.isInWater() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { player.hurt(DamageSource.OUT_OF_WORLD, 1); } - if (manager.hasAbility(player, AMAbilities.WATER_DAMAGE_LIGHTNING.getId()) && player.isInWater() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { + ability = manager.get(AMAbilities.WATER_DAMAGE_LIGHTNING); + if (ability != null && ability.test(player) && player.isInWater() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { player.hurt(DamageSource.OUT_OF_WORLD, 1); } - if (manager.hasAbility(player, AMAbilities.NETHER_DAMAGE_WATER.getId()) && player.getLevel().dimensionType().ultraWarm() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { + ability = manager.get(AMAbilities.NETHER_DAMAGE_WATER); + if (ability != null && ability.test(player) && player.getLevel().dimensionType().ultraWarm() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { player.hurt(DamageSource.OUT_OF_WORLD, 1); } - if (manager.hasAbility(player, AMAbilities.NETHER_DAMAGE_NATURE.getId()) && player.getLevel().dimensionType().ultraWarm() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { + ability = manager.get(AMAbilities.NETHER_DAMAGE_NATURE); + if (ability != null && ability.test(player) && player.getLevel().dimensionType().ultraWarm() && player.tickCount % 20 == 0 && (player.getHealth() - 1) / player.getMaxHealth() >= 0.75) { player.hurt(DamageSource.OUT_OF_WORLD, 1); } } - ability = manager.get(AMAbilities.SATURATION.getId()); - if (ability.test(player)) { + ability = manager.get(AMAbilities.SATURATION); + if (ability != null && ability.test(player)) { player.addEffect(new MobEffectInstance(MobEffects.SATURATION, (int) (20 * helper.getAffinityDepth(player, ability.affinity())), 0, false, false)); } - ability = manager.get(AMAbilities.REGENERATION.getId()); - if (ability.test(player)) { + ability = manager.get(AMAbilities.REGENERATION); + if (ability != null && ability.test(player)) { player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, (int) (20 * helper.getAffinityDepth(player, ability.affinity())), 0, false, false)); } - ability = manager.get(AMAbilities.NIGHT_VISION.getId()); - if (ability.test(player)) { + ability = manager.get(AMAbilities.NIGHT_VISION); + if (ability != null && ability.test(player)) { player.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, (int) (20 * helper.getAffinityDepth(player, ability.affinity())) + 200, 0, false, false)); } - ability = manager.get(AMAbilities.FROST_WALKER.getId()); - if (ability.test(player)) { + ability = manager.get(AMAbilities.FROST_WALKER); + if (ability != null && ability.test(player)) { FrostWalkerEnchantment.onEntityMoved(player, player.getLevel(), player.blockPosition(), 1); } AttributeMap attributes = player.getAttributes(); - attributes.getInstance(Attributes.MAX_HEALTH).removeModifier(AbilityUUIDs.HEALTH_REDUCTION); - boolean shouldReapplyHealthReduction = false; - ability = manager.get(AMAbilities.LIGHT_HEALTH_REDUCTION.getId()); - if (player.getLevel().getBrightness(LightLayer.SKY, player.blockPosition()) == 15 && ability.test(player)) { - shouldReapplyHealthReduction = true; - } - ability = manager.get(AMAbilities.WATER_HEALTH_REDUCTION.getId()); - if (player.isInWaterOrBubble() && ability.test(player)) { - shouldReapplyHealthReduction = true; - } - if (shouldReapplyHealthReduction) { - attributes.getInstance(Attributes.MAX_HEALTH).addPermanentModifier(new AttributeModifier(AbilityUUIDs.HEALTH_REDUCTION, "Health Reduction Ability", -helper.getAffinityDepth(player, ability.affinity()) * 4, AttributeModifier.Operation.ADDITION)); + AttributeInstance maxHealth = attributes.getInstance(Attributes.MAX_HEALTH); + assert maxHealth != null; + maxHealth.removeModifier(AbilityUUIDs.HEALTH_REDUCTION); + Ability lightHealthReduction = manager.get(AMAbilities.LIGHT_HEALTH_REDUCTION); + Ability waterHealthReduction = manager.get(AMAbilities.WATER_HEALTH_REDUCTION); + if ((lightHealthReduction != null + && player.getLevel().getBrightness(LightLayer.SKY, player.blockPosition()) == 15 + && lightHealthReduction.test(player)) + || (waterHealthReduction != null + && player.isInWaterOrBubble() + && waterHealthReduction.test(player))) { + double depth; + if (waterHealthReduction != null && lightHealthReduction != null) { + depth = Math.max(helper.getAffinityDepth(player, lightHealthReduction.affinity()), helper.getAffinityDepth(player, waterHealthReduction.affinity())); + } else { + depth = helper.getAffinityDepth(player, Objects.requireNonNullElse(waterHealthReduction, lightHealthReduction).affinity()); + } + maxHealth.addPermanentModifier(new AttributeModifier(AbilityUUIDs.HEALTH_REDUCTION, "Health Reduction Ability", -depth * 4, AttributeModifier.Operation.ADDITION)); if (player.getHealth() > player.getMaxHealth()) { player.setHealth(player.getMaxHealth()); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAbilities.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAbilities.java index ef9341a4a..c1b6615da 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAbilities.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAbilities.java @@ -1,58 +1,41 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.init; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import net.minecraftforge.registries.RegistryObject; -import org.jetbrains.annotations.ApiStatus.Internal; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.ApiStatus.NonExtendable; -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.ABILITIES; - @NonExtendable public interface AMAbilities { - RegistryObject FIRE_RESISTANCE = register("fire_resistance"); - RegistryObject FIRE_PUNCH = register("fire_punch"); - RegistryObject WATER_DAMAGE_FIRE = register("water_damage_fire"); - RegistryObject SWIM_SPEED = register("swim_speed"); - RegistryObject ENDERMAN_THORNS = register("enderman_thorns"); - RegistryObject NETHER_DAMAGE_WATER = register("nether_damage_water"); - RegistryObject RESISTANCE = register("resistance"); - RegistryObject HASTE = register("haste"); - RegistryObject FALL_DAMAGE = register("fall_damage"); - RegistryObject JUMP_BOOST = register("jump_boost"); - RegistryObject FEATHER_FALLING = register("feather_falling"); - RegistryObject GRAVITY = register("gravity"); - RegistryObject FROST_PUNCH = register("frost_punch"); - RegistryObject FROST_WALKER = register("frost_walker"); - RegistryObject SLOWNESS = register("slowness"); - RegistryObject SPEED = register("speed"); - RegistryObject STEP_ASSIST = register("step_assist"); - RegistryObject WATER_DAMAGE_LIGHTNING = register("water_damage_lightning"); - RegistryObject THORNS = register("thorns"); - RegistryObject SATURATION = register("saturation"); - RegistryObject NETHER_DAMAGE_NATURE = register("nether_damage_nature"); - RegistryObject SMITE = register("smite"); - RegistryObject REGENERATION = register("regeneration"); - RegistryObject NAUSEA = register("nausea"); - RegistryObject MANA_REDUCTION = register("mana_reduction"); - RegistryObject CLARITY = register("clarity"); - RegistryObject MAGIC_DAMAGE = register("magic_damage"); - RegistryObject POISON_RESISTANCE = register("poison_resistance"); - RegistryObject NIGHT_VISION = register("night_vision"); - RegistryObject ENDERMAN_PUMPKIN = register("enderman_pumpkin"); - RegistryObject LIGHT_HEALTH_REDUCTION = register("light_health_reduction"); - RegistryObject WATER_HEALTH_REDUCTION = register("water_health_reduction"); - - /** - * Empty method that is required for classloading - */ - @Internal - static void register() {} - - private static RegistryObject register(String name) { - return ABILITIES.register(name, AMAbilities::create); - } - - private static IAbility create() { - return new IAbility() {}; - } + ResourceLocation FIRE_RESISTANCE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "fire_resistance"); + ResourceLocation FIRE_PUNCH = new ResourceLocation(ArsMagicaAPI.MOD_ID, "fire_punch"); + ResourceLocation WATER_DAMAGE_FIRE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "water_damage_fire"); + ResourceLocation SWIM_SPEED = new ResourceLocation(ArsMagicaAPI.MOD_ID, "swim_speed"); + ResourceLocation ENDERMAN_THORNS = new ResourceLocation(ArsMagicaAPI.MOD_ID, "enderman_thorns"); + ResourceLocation NETHER_DAMAGE_WATER = new ResourceLocation(ArsMagicaAPI.MOD_ID, "nether_damage_water"); + ResourceLocation RESISTANCE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "resistance"); + ResourceLocation HASTE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "haste"); + ResourceLocation FALL_DAMAGE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "fall_damage"); + ResourceLocation JUMP_BOOST = new ResourceLocation(ArsMagicaAPI.MOD_ID, "jump_boost"); + ResourceLocation FEATHER_FALLING = new ResourceLocation(ArsMagicaAPI.MOD_ID, "feather_falling"); + ResourceLocation GRAVITY = new ResourceLocation(ArsMagicaAPI.MOD_ID, "gravity"); + ResourceLocation FROST_PUNCH = new ResourceLocation(ArsMagicaAPI.MOD_ID, "frost_punch"); + ResourceLocation FROST_WALKER = new ResourceLocation(ArsMagicaAPI.MOD_ID, "frost_walker"); + ResourceLocation SLOWNESS = new ResourceLocation(ArsMagicaAPI.MOD_ID, "slowness"); + ResourceLocation SPEED = new ResourceLocation(ArsMagicaAPI.MOD_ID, "speed"); + ResourceLocation STEP_ASSIST = new ResourceLocation(ArsMagicaAPI.MOD_ID, "step_assist"); + ResourceLocation WATER_DAMAGE_LIGHTNING = new ResourceLocation(ArsMagicaAPI.MOD_ID, "water_damage_lightning"); + ResourceLocation THORNS = new ResourceLocation(ArsMagicaAPI.MOD_ID, "thorns"); + ResourceLocation SATURATION = new ResourceLocation(ArsMagicaAPI.MOD_ID, "saturation"); + ResourceLocation NETHER_DAMAGE_NATURE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "nether_damage_nature"); + ResourceLocation SMITE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "smite"); + ResourceLocation REGENERATION = new ResourceLocation(ArsMagicaAPI.MOD_ID, "regeneration"); + ResourceLocation NAUSEA = new ResourceLocation(ArsMagicaAPI.MOD_ID, "nausea"); + ResourceLocation MANA_REDUCTION = new ResourceLocation(ArsMagicaAPI.MOD_ID, "mana_reduction"); + ResourceLocation CLARITY = new ResourceLocation(ArsMagicaAPI.MOD_ID, "clarity"); + ResourceLocation MAGIC_DAMAGE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "magic_damage"); + ResourceLocation POISON_RESISTANCE = new ResourceLocation(ArsMagicaAPI.MOD_ID, "poison_resistance"); + ResourceLocation NIGHT_VISION = new ResourceLocation(ArsMagicaAPI.MOD_ID, "night_vision"); + ResourceLocation ENDERMAN_PUMPKIN = new ResourceLocation(ArsMagicaAPI.MOD_ID, "enderman_pumpkin"); + ResourceLocation LIGHT_HEALTH_REDUCTION = new ResourceLocation(ArsMagicaAPI.MOD_ID, "light_health_reduction"); + ResourceLocation WATER_HEALTH_REDUCTION = new ResourceLocation(ArsMagicaAPI.MOD_ID, "water_health_reduction"); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAffinities.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAffinities.java index cc73db7f5..771a51baa 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAffinities.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAffinities.java @@ -1,24 +1,25 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.init; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; -import com.github.minecraftschurlimods.arsmagicalegacy.common.affinity.Affinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.ApiStatus.NonExtendable; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.AFFINITIES; + @NonExtendable public interface AMAffinities { - RegistryObject NONE = AMRegistries.AFFINITIES.register("none", () -> Affinity.builder().setColor(0) .setDirectOpposite(IAffinity.NONE) .setCastSound(AMSounds.CAST_NONE).build()); - RegistryObject WATER = AMRegistries.AFFINITIES.register("water", () -> Affinity.builder().setColor(0x0b5cef).setDirectOpposite(IAffinity.FIRE) .setCastSound(AMSounds.CAST_WATER) .setLoopSound(AMSounds.LOOP_WATER) .addMajorOpposites(IAffinity.LIGHTNING, IAffinity.EARTH, IAffinity.ARCANE, IAffinity.ENDER).addMinorOpposites(IAffinity.AIR, IAffinity.ICE) .build()); - RegistryObject FIRE = AMRegistries.AFFINITIES.register("fire", () -> Affinity.builder().setColor(0xef260b).setDirectOpposite(IAffinity.WATER) .setCastSound(AMSounds.CAST_FIRE) .setLoopSound(AMSounds.LOOP_FIRE) .addMajorOpposites(IAffinity.AIR, IAffinity.ICE, IAffinity.NATURE, IAffinity.LIFE) .addMinorOpposites(IAffinity.EARTH, IAffinity.LIGHTNING) .build()); - RegistryObject EARTH = AMRegistries.AFFINITIES.register("earth", () -> Affinity.builder().setColor(0x61330b).setDirectOpposite(IAffinity.AIR) .setCastSound(AMSounds.CAST_EARTH) .setLoopSound(AMSounds.LOOP_EARTH) .addMajorOpposites(IAffinity.WATER, IAffinity.ARCANE, IAffinity.LIFE, IAffinity.LIGHTNING) .addMinorOpposites(IAffinity.NATURE, IAffinity.FIRE) .build()); - RegistryObject AIR = AMRegistries.AFFINITIES.register("air", () -> Affinity.builder().setColor(0x777777).setDirectOpposite(IAffinity.EARTH) .setCastSound(AMSounds.CAST_AIR) .setLoopSound(AMSounds.LOOP_AIR) .addMajorOpposites(IAffinity.NATURE, IAffinity.FIRE, IAffinity.ICE, IAffinity.ENDER) .addMinorOpposites(IAffinity.WATER, IAffinity.ARCANE) .build()); - RegistryObject ICE = AMRegistries.AFFINITIES.register("ice", () -> Affinity.builder().setColor(0xd3e8fc).setDirectOpposite(IAffinity.LIGHTNING).setCastSound(AMSounds.CAST_ICE) .setLoopSound(AMSounds.LOOP_ICE) .addMajorOpposites(IAffinity.LIFE, IAffinity.FIRE, IAffinity.AIR, IAffinity.ARCANE) .addMinorOpposites(IAffinity.WATER, IAffinity.ENDER) .build()); - RegistryObject LIGHTNING = AMRegistries.AFFINITIES.register("lightning", () -> Affinity.builder().setColor(0xdece19).setDirectOpposite(IAffinity.ICE) .setCastSound(AMSounds.CAST_LIGHTNING).setLoopSound(AMSounds.LOOP_LIGHTNING).addMajorOpposites(IAffinity.WATER, IAffinity.ENDER, IAffinity.NATURE, IAffinity.EARTH) .addMinorOpposites(IAffinity.LIFE, IAffinity.FIRE) .build()); - RegistryObject NATURE = AMRegistries.AFFINITIES.register("nature", () -> Affinity.builder().setColor(0x228718).setDirectOpposite(IAffinity.ARCANE) .setCastSound(AMSounds.CAST_NATURE) .setLoopSound(AMSounds.LOOP_NATURE) .addMajorOpposites(IAffinity.AIR, IAffinity.ENDER, IAffinity.LIGHTNING, IAffinity.FIRE) .addMinorOpposites(IAffinity.LIFE, IAffinity.EARTH) .build()); - RegistryObject LIFE = AMRegistries.AFFINITIES.register("life", () -> Affinity.builder().setColor(0x34e122).setDirectOpposite(IAffinity.ENDER) .setCastSound(AMSounds.CAST_LIFE) .setLoopSound(AMSounds.LOOP_LIFE) .addMajorOpposites(IAffinity.ARCANE, IAffinity.ICE, IAffinity.FIRE, IAffinity.EARTH) .addMinorOpposites(IAffinity.NATURE, IAffinity.LIGHTNING).build()); - RegistryObject ARCANE = AMRegistries.AFFINITIES.register("arcane", () -> Affinity.builder().setColor(0xb935cd).setDirectOpposite(IAffinity.NATURE) .setCastSound(AMSounds.CAST_ARCANE) .setLoopSound(AMSounds.LOOP_ARCANE) .addMajorOpposites(IAffinity.LIFE, IAffinity.EARTH, IAffinity.WATER, IAffinity.ICE) .addMinorOpposites(IAffinity.AIR, IAffinity.ENDER) .build()); - RegistryObject ENDER = AMRegistries.AFFINITIES.register("ender", () -> Affinity.builder().setColor(0x3f043d).setDirectOpposite(IAffinity.LIFE) .setCastSound(AMSounds.CAST_ENDER) .setLoopSound(AMSounds.LOOP_ENDER) .addMajorOpposites(IAffinity.NATURE, IAffinity.LIGHTNING, IAffinity.WATER, IAffinity.AIR) .addMinorOpposites(IAffinity.ARCANE, IAffinity.ICE) .build()); + RegistryObject NONE = AFFINITIES.register("none", () -> Affinity.builder().setColor(0) .setDirectOpposite(Affinity.NONE) .setCastSound(AMSounds.CAST_NONE).build()); + RegistryObject WATER = AFFINITIES.register("water", () -> Affinity.builder().setColor(0x0b5cef).setDirectOpposite(Affinity.FIRE) .setCastSound(AMSounds.CAST_WATER) .setLoopSound(AMSounds.LOOP_WATER) .addMajorOpposites(Affinity.LIGHTNING, Affinity.EARTH, Affinity.ARCANE, Affinity.ENDER).addMinorOpposites(Affinity.AIR, Affinity.ICE) .build()); + RegistryObject FIRE = AFFINITIES.register("fire", () -> Affinity.builder().setColor(0xef260b).setDirectOpposite(Affinity.WATER) .setCastSound(AMSounds.CAST_FIRE) .setLoopSound(AMSounds.LOOP_FIRE) .addMajorOpposites(Affinity.AIR, Affinity.ICE, Affinity.NATURE, Affinity.LIFE) .addMinorOpposites(Affinity.EARTH, Affinity.LIGHTNING) .build()); + RegistryObject EARTH = AFFINITIES.register("earth", () -> Affinity.builder().setColor(0x61330b).setDirectOpposite(Affinity.AIR) .setCastSound(AMSounds.CAST_EARTH) .setLoopSound(AMSounds.LOOP_EARTH) .addMajorOpposites(Affinity.WATER, Affinity.ARCANE, Affinity.LIFE, Affinity.LIGHTNING) .addMinorOpposites(Affinity.NATURE, Affinity.FIRE) .build()); + RegistryObject AIR = AFFINITIES.register("air", () -> Affinity.builder().setColor(0x777777).setDirectOpposite(Affinity.EARTH) .setCastSound(AMSounds.CAST_AIR) .setLoopSound(AMSounds.LOOP_AIR) .addMajorOpposites(Affinity.NATURE, Affinity.FIRE, Affinity.ICE, Affinity.ENDER) .addMinorOpposites(Affinity.WATER, Affinity.ARCANE) .build()); + RegistryObject ICE = AFFINITIES.register("ice", () -> Affinity.builder().setColor(0xd3e8fc).setDirectOpposite(Affinity.LIGHTNING).setCastSound(AMSounds.CAST_ICE) .setLoopSound(AMSounds.LOOP_ICE) .addMajorOpposites(Affinity.LIFE, Affinity.FIRE, Affinity.AIR, Affinity.ARCANE) .addMinorOpposites(Affinity.WATER, Affinity.ENDER) .build()); + RegistryObject LIGHTNING = AFFINITIES.register("lightning", () -> Affinity.builder().setColor(0xdece19).setDirectOpposite(Affinity.ICE) .setCastSound(AMSounds.CAST_LIGHTNING).setLoopSound(AMSounds.LOOP_LIGHTNING).addMajorOpposites(Affinity.WATER, Affinity.ENDER, Affinity.NATURE, Affinity.EARTH) .addMinorOpposites(Affinity.LIFE, Affinity.FIRE) .build()); + RegistryObject NATURE = AFFINITIES.register("nature", () -> Affinity.builder().setColor(0x228718).setDirectOpposite(Affinity.ARCANE) .setCastSound(AMSounds.CAST_NATURE) .setLoopSound(AMSounds.LOOP_NATURE) .addMajorOpposites(Affinity.AIR, Affinity.ENDER, Affinity.LIGHTNING, Affinity.FIRE) .addMinorOpposites(Affinity.LIFE, Affinity.EARTH) .build()); + RegistryObject LIFE = AFFINITIES.register("life", () -> Affinity.builder().setColor(0x34e122).setDirectOpposite(Affinity.ENDER) .setCastSound(AMSounds.CAST_LIFE) .setLoopSound(AMSounds.LOOP_LIFE) .addMajorOpposites(Affinity.ARCANE, Affinity.ICE, Affinity.FIRE, Affinity.EARTH) .addMinorOpposites(Affinity.NATURE, Affinity.LIGHTNING).build()); + RegistryObject ARCANE = AFFINITIES.register("arcane", () -> Affinity.builder().setColor(0xb935cd).setDirectOpposite(Affinity.NATURE) .setCastSound(AMSounds.CAST_ARCANE) .setLoopSound(AMSounds.LOOP_ARCANE) .addMajorOpposites(Affinity.LIFE, Affinity.EARTH, Affinity.WATER, Affinity.ICE) .addMinorOpposites(Affinity.AIR, Affinity.ENDER) .build()); + RegistryObject ENDER = AFFINITIES.register("ender", () -> Affinity.builder().setColor(0x3f043d).setDirectOpposite(Affinity.LIFE) .setCastSound(AMSounds.CAST_ENDER) .setLoopSound(AMSounds.LOOP_ENDER) .addMajorOpposites(Affinity.NATURE, Affinity.LIGHTNING, Affinity.WATER, Affinity.AIR) .addMinorOpposites(Affinity.ARCANE, Affinity.ICE) .build()); /** * Empty method that is required for classloading diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAttributes.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAttributes.java index 9158cd4b2..663564332 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAttributes.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMAttributes.java @@ -9,6 +9,8 @@ import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.ApiStatus.NonExtendable; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.ATTRIBUTES; + @NonExtendable public interface AMAttributes { RegistryObject MAX_MANA = registerRanged("max_mana", 0d, 0d, Short.MAX_VALUE, true); @@ -20,12 +22,12 @@ public interface AMAttributes { private static RegistryObject registerRanged(String id, double defaultValue, double minValue, double maxValue, boolean syncable) { String key = Util.makeDescriptionId("attribute", new ResourceLocation(ArsMagicaAPI.MOD_ID, id)); - return AMRegistries.ATTRIBUTES.register(id, () -> new RangedAttribute(key, defaultValue, minValue, maxValue).setSyncable(syncable)); + return ATTRIBUTES.register(id, () -> new RangedAttribute(key, defaultValue, minValue, maxValue).setSyncable(syncable)); } private static RegistryObject registerBool(String id, boolean defaultValue, boolean syncable) { String key = Util.makeDescriptionId("attribute", new ResourceLocation(ArsMagicaAPI.MOD_ID, id)); - return AMRegistries.ATTRIBUTES.register(id, () -> new BooleanAttribute(key, defaultValue).setSyncable(syncable)); + return ATTRIBUTES.register(id, () -> new BooleanAttribute(key, defaultValue).setSyncable(syncable)); } class BooleanAttribute extends RangedAttribute { diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlockEntities.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlockEntities.java index 0810b4bc9..22c7d991c 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlockEntities.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlockEntities.java @@ -12,17 +12,17 @@ import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.ApiStatus.NonExtendable; -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.BLOCK_ENTITIES; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.BLOCK_ENTITY_TYPES; @NonExtendable public interface AMBlockEntities { - RegistryObject> ALTAR_CORE = BLOCK_ENTITIES.register("altar_core", () -> BlockEntityType.Builder.of(AltarCoreBlockEntity::new, AMBlocks.ALTAR_CORE.get()) .build(null)); - RegistryObject> ALTAR_VIEW = BLOCK_ENTITIES.register("altar_view", () -> BlockEntityType.Builder.of(AltarViewBlockEntity::new, AMBlocks.ALTAR_VIEW.get()) .build(null)); - RegistryObject> BLACK_AUREM = BLOCK_ENTITIES.register("black_aurem", () -> BlockEntityType.Builder.of(BlackAuremBlockEntity::new, AMBlocks.BLACK_AUREM.get()) .build(null)); - RegistryObject> CELESTIAL_PRISM = BLOCK_ENTITIES.register("celestial_prism", () -> BlockEntityType.Builder.of(CelestialPrismBlockEntity::new, AMBlocks.CELESTIAL_PRISM.get()) .build(null)); - RegistryObject> INSCRIPTION_TABLE = BLOCK_ENTITIES.register("inscription_table", () -> BlockEntityType.Builder.of(InscriptionTableBlockEntity::new, AMBlocks.INSCRIPTION_TABLE.get()).build(null)); - RegistryObject> OBELISK = BLOCK_ENTITIES.register("obelisk", () -> BlockEntityType.Builder.of(ObeliskBlockEntity::new, AMBlocks.OBELISK.get()) .build(null)); - RegistryObject> SPELL_RUNE = BLOCK_ENTITIES.register("spell_rune", () -> BlockEntityType.Builder.of(SpellRuneBlockEntity::new, AMBlocks.SPELL_RUNE.get()) .build(null)); + RegistryObject> ALTAR_CORE = BLOCK_ENTITY_TYPES.register("altar_core", () -> BlockEntityType.Builder.of(AltarCoreBlockEntity::new, AMBlocks.ALTAR_CORE.get()).build(null)); + RegistryObject> ALTAR_VIEW = BLOCK_ENTITY_TYPES.register("altar_view", () -> BlockEntityType.Builder.of(AltarViewBlockEntity::new, AMBlocks.ALTAR_VIEW.get()).build(null)); + RegistryObject> BLACK_AUREM = BLOCK_ENTITY_TYPES.register("black_aurem", () -> BlockEntityType.Builder.of(BlackAuremBlockEntity::new, AMBlocks.BLACK_AUREM.get()).build(null)); + RegistryObject> CELESTIAL_PRISM = BLOCK_ENTITY_TYPES.register("celestial_prism", () -> BlockEntityType.Builder.of(CelestialPrismBlockEntity::new, AMBlocks.CELESTIAL_PRISM.get()).build(null)); + RegistryObject> INSCRIPTION_TABLE = BLOCK_ENTITY_TYPES.register("inscription_table", () -> BlockEntityType.Builder.of(InscriptionTableBlockEntity::new, AMBlocks.INSCRIPTION_TABLE.get()).build(null)); + RegistryObject> OBELISK = BLOCK_ENTITY_TYPES.register("obelisk", () -> BlockEntityType.Builder.of(ObeliskBlockEntity::new, AMBlocks.OBELISK.get()).build(null)); + RegistryObject> SPELL_RUNE = BLOCK_ENTITY_TYPES.register("spell_rune", () -> BlockEntityType.Builder.of(SpellRuneBlockEntity::new, AMBlocks.SPELL_RUNE.get()).build(null)); /** * Empty method that is required for classloading diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlocks.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlocks.java index 47f8cefbf..0882e8bd8 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlocks.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMBlocks.java @@ -30,6 +30,7 @@ import net.minecraft.world.level.block.FlowerPotBlock; import net.minecraft.world.level.block.GlassBlock; import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.SaplingBlock; @@ -109,6 +110,7 @@ public interface AMBlocks { RegistryObject IRON_INLAY = BLOCKS.register("iron_inlay", () -> new InlayBlock(BlockBehaviour.Properties.copy(Blocks.RAIL))); RegistryObject REDSTONE_INLAY = BLOCKS.register("redstone_inlay", () -> new InlayBlock(BlockBehaviour.Properties.copy(Blocks.RAIL))); RegistryObject GOLD_INLAY = BLOCKS.register("gold_inlay", () -> new InlayBlock(BlockBehaviour.Properties.copy(Blocks.RAIL))); + RegistryObject LIQUID_ESSENCE = BLOCKS.register("liquid_essence", () -> new LiquidBlock(AMFluids.LIQUID_ESSENCE, BlockBehaviour.Properties.of(Material.WATER).noCollission().strength(100.0F).noLootTable().lightLevel((state) -> 5))); private static RegistryObject flowerPot(RegistryObject flower) { RegistryObject register = BLOCKS.register("potted_" + flower.getId().getPath(), () -> new FlowerPotBlock(() -> ((FlowerPotBlock) Blocks.FLOWER_POT), flower, FLOWER_POT)); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMDataSerializers.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMDataSerializers.java index f6287980b..0b3bc42ef 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMDataSerializers.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMDataSerializers.java @@ -6,11 +6,11 @@ import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.ApiStatus.NonExtendable; -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.DATA_SERIALIZERS; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.ENTITY_DATA_SERIALIZERS; @NonExtendable public interface AMDataSerializers { - RegistryObject> SPELL = DATA_SERIALIZERS.register("spell", () -> new CodecEntityDataSerializer<>(ISpell.CODEC)); + RegistryObject> SPELL = ENTITY_DATA_SERIALIZERS.register("spell", () -> new CodecEntityDataSerializer<>(ISpell.CODEC)); /** * Empty method that is required for classloading diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMEntities.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMEntities.java index b37820592..765a6a2b5 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMEntities.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMEntities.java @@ -22,26 +22,26 @@ import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.ApiStatus.Internal; -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.ENTITIES; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.ENTITY_TYPES; public interface AMEntities { - RegistryObject> PROJECTILE = ENTITIES.register("projectile", () -> EntityType.Builder.of(Projectile::new, MobCategory.MISC) .clientTrackingRange(8).sized(0.25F, 0.25F).build("projectile")); - RegistryObject> WALL = ENTITIES.register("wall", () -> EntityType.Builder.of(Wall::new, MobCategory.MISC) .clientTrackingRange(8).sized(0.25F, 0.25F).build("wall")); - RegistryObject> WAVE = ENTITIES.register("wave", () -> EntityType.Builder.of(Wave::new, MobCategory.MISC) .clientTrackingRange(8).sized(0.25F, 0.25F).build("wave")); - RegistryObject> ZONE = ENTITIES.register("zone", () -> EntityType.Builder.of(Zone::new, MobCategory.MISC) .clientTrackingRange(8).sized(0.25F, 0.25F).build("zone")); - RegistryObject> WATER_GUARDIAN = ENTITIES.register("water_guardian", () -> EntityType.Builder.of(WaterGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 1, 2).build("water_guardian")); - RegistryObject> FIRE_GUARDIAN = ENTITIES.register("fire_guardian", () -> EntityType.Builder.of(FireGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 1, 4).build("fire_guardian")); - RegistryObject> EARTH_GUARDIAN = ENTITIES.register("earth_guardian", () -> EntityType.Builder.of(EarthGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 1.5F, 3.5F).build("earth_guardian")); - RegistryObject> AIR_GUARDIAN = ENTITIES.register("air_guardian", () -> EntityType.Builder.of(AirGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 0.6F, 2.5F).build("air_guardian")); - RegistryObject> ICE_GUARDIAN = ENTITIES.register("ice_guardian", () -> EntityType.Builder.of(IceGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1.25F, 3.25F).build("ice_guardian")); - RegistryObject> LIGHTNING_GUARDIAN = ENTITIES.register("lightning_guardian", () -> EntityType.Builder.of(LightningGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1.75F, 3).build("lightning_guardian")); - RegistryObject> NATURE_GUARDIAN = ENTITIES.register("nature_guardian", () -> EntityType.Builder.of(NatureGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1.65F, 4.75F).build("nature_guardian")); - RegistryObject> LIFE_GUARDIAN = ENTITIES.register("life_guardian", () -> EntityType.Builder.of(LifeGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 1, 2).build("life_guardian")); - RegistryObject> ARCANE_GUARDIAN = ENTITIES.register("arcane_guardian", () -> EntityType.Builder.of(ArcaneGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 1, 3).build("arcane_guardian")); - RegistryObject> ENDER_GUARDIAN = ENTITIES.register("ender_guardian", () -> EntityType.Builder.of(EnderGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 1, 3).build("ender_guardian")); - RegistryObject> DRYAD = ENTITIES.register("dryad", () -> EntityType.Builder.of(Dryad::new, MobCategory.AMBIENT).clientTrackingRange(8).sized( 1, 2).build("dryad")); - RegistryObject> MAGE = ENTITIES.register("mage", () -> EntityType.Builder.of(Mage::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 1, 2).build("mage")); - RegistryObject> MANA_CREEPER = ENTITIES.register("mana_creeper", () -> EntityType.Builder.of(ManaCreeper::new, MobCategory.MONSTER).clientTrackingRange(8).sized( 0.6F, 1.7F).build("mana_creeper")); + RegistryObject> PROJECTILE = ENTITY_TYPES.register("projectile", () -> EntityType.Builder.of(Projectile::new, MobCategory.MISC).clientTrackingRange(8).sized(0.25F, 0.25F).build("projectile")); + RegistryObject> WALL = ENTITY_TYPES.register("wall", () -> EntityType.Builder.of(Wall::new, MobCategory.MISC).clientTrackingRange(8).sized(0.25F, 0.25F).build("wall")); + RegistryObject> WAVE = ENTITY_TYPES.register("wave", () -> EntityType.Builder.of(Wave::new, MobCategory.MISC).clientTrackingRange(8).sized(0.25F, 0.25F).build("wave")); + RegistryObject> ZONE = ENTITY_TYPES.register("zone", () -> EntityType.Builder.of(Zone::new, MobCategory.MISC).clientTrackingRange(8).sized(0.25F, 0.25F).build("zone")); + RegistryObject> WATER_GUARDIAN = ENTITY_TYPES.register("water_guardian", () -> EntityType.Builder.of(WaterGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1, 2).build("water_guardian")); + RegistryObject> FIRE_GUARDIAN = ENTITY_TYPES.register("fire_guardian", () -> EntityType.Builder.of(FireGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1, 4).build("fire_guardian")); + RegistryObject> EARTH_GUARDIAN = ENTITY_TYPES.register("earth_guardian", () -> EntityType.Builder.of(EarthGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1.5F, 3.5F).build("earth_guardian")); + RegistryObject> AIR_GUARDIAN = ENTITY_TYPES.register("air_guardian", () -> EntityType.Builder.of(AirGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(0.6F, 2.5F).build("air_guardian")); + RegistryObject> ICE_GUARDIAN = ENTITY_TYPES.register("ice_guardian", () -> EntityType.Builder.of(IceGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1.25F, 3.25F).build("ice_guardian")); + RegistryObject> LIGHTNING_GUARDIAN = ENTITY_TYPES.register("lightning_guardian", () -> EntityType.Builder.of(LightningGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1.75F, 3).build("lightning_guardian")); + RegistryObject> NATURE_GUARDIAN = ENTITY_TYPES.register("nature_guardian", () -> EntityType.Builder.of(NatureGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1.65F, 4.75F).build("nature_guardian")); + RegistryObject> LIFE_GUARDIAN = ENTITY_TYPES.register("life_guardian", () -> EntityType.Builder.of(LifeGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1, 2).build("life_guardian")); + RegistryObject> ARCANE_GUARDIAN = ENTITY_TYPES.register("arcane_guardian", () -> EntityType.Builder.of(ArcaneGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1, 3).build("arcane_guardian")); + RegistryObject> ENDER_GUARDIAN = ENTITY_TYPES.register("ender_guardian", () -> EntityType.Builder.of(EnderGuardian::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1, 3).build("ender_guardian")); + RegistryObject> DRYAD = ENTITY_TYPES.register("dryad", () -> EntityType.Builder.of(Dryad::new, MobCategory.AMBIENT).clientTrackingRange(8).sized(1, 2).build("dryad")); + RegistryObject> MAGE = ENTITY_TYPES.register("mage", () -> EntityType.Builder.of(Mage::new, MobCategory.MONSTER).clientTrackingRange(8).sized(1, 2).build("mage")); + RegistryObject> MANA_CREEPER = ENTITY_TYPES.register("mana_creeper", () -> EntityType.Builder.of(ManaCreeper::new, MobCategory.MONSTER).clientTrackingRange(8).sized(0.6F, 1.7F).build("mana_creeper")); /** * Empty method that is required for classloading diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFeatures.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFeatures.java deleted file mode 100644 index 7e582313a..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFeatures.java +++ /dev/null @@ -1,207 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.init; - -import com.mojang.serialization.Codec; -import net.minecraft.core.Holder; -import net.minecraft.data.worldgen.features.FeatureUtils; -import net.minecraft.data.worldgen.features.OreFeatures; -import net.minecraft.data.worldgen.placement.PlacementUtils; -import net.minecraft.data.worldgen.placement.VegetationPlacements; -import net.minecraft.tags.BiomeTags; -import net.minecraft.util.valueproviders.ConstantInt; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.MobSpawnSettings; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.levelgen.GenerationStep; -import net.minecraft.world.level.levelgen.VerticalAnchor; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration; -import net.minecraft.world.level.levelgen.feature.featuresize.FeatureSize; -import net.minecraft.world.level.levelgen.feature.featuresize.ThreeLayersFeatureSize; -import net.minecraft.world.level.levelgen.feature.foliageplacers.DarkOakFoliagePlacer; -import net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacer; -import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; -import net.minecraft.world.level.levelgen.feature.trunkplacers.DarkOakTrunkPlacer; -import net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacer; -import net.minecraft.world.level.levelgen.placement.BiomeFilter; -import net.minecraft.world.level.levelgen.placement.CountPlacement; -import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; -import net.minecraft.world.level.levelgen.placement.InSquarePlacement; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import net.minecraft.world.level.levelgen.placement.PlacementModifier; -import net.minecraft.world.level.levelgen.placement.RarityFilter; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.world.BiomeGenerationSettingsBuilder; -import net.minecraftforge.common.world.BiomeModifier; -import net.minecraftforge.common.world.MobSpawnSettingsBuilder; -import net.minecraftforge.common.world.ModifiableBiomeInfo; -import net.minecraftforge.registries.RegistryObject; -import org.jetbrains.annotations.ApiStatus.NonExtendable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.OptionalInt; -import java.util.function.Supplier; - -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.BIOME_MODIFIERS; -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.BIOME_MODIFIER_SERIALIZERS; -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.CONFIGURED_FEATURES; -import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.PLACED_FEATURES; - -@SuppressWarnings("OptionalGetWithoutIsPresent") -@NonExtendable -public interface AMFeatures { - RegistryObject> CHIMERITE_FEATURE = CONFIGURED_FEATURES.register("chimerite_ore", () -> ore(AMBlocks.CHIMERITE_ORE, AMBlocks.DEEPSLATE_CHIMERITE_ORE, 7, 0F)); - RegistryObject> VINTEUM_FEATURE = CONFIGURED_FEATURES.register("vinteum_ore", () -> ore(AMBlocks.VINTEUM_ORE, AMBlocks.DEEPSLATE_VINTEUM_ORE, 10, 0F)); - RegistryObject> TOPAZ_FEATURE = CONFIGURED_FEATURES.register("topaz_ore", () -> ore(AMBlocks.TOPAZ_ORE, AMBlocks.DEEPSLATE_TOPAZ_ORE, 4, 0.5F)); - RegistryObject> TOPAZ_EXTRA_FEATURE = CONFIGURED_FEATURES.register("topaz_ore_extra", () -> ore(AMBlocks.TOPAZ_ORE, AMBlocks.DEEPSLATE_TOPAZ_ORE, 4, 0F)); - RegistryObject> AUM_FEATURE = CONFIGURED_FEATURES.register("aum", () -> flower(64, AMBlocks.AUM)); - RegistryObject> CERUBLOSSOM_FEATURE = CONFIGURED_FEATURES.register("cerublossom", () -> flower(64, AMBlocks.CERUBLOSSOM)); - RegistryObject> DESERT_NOVA_FEATURE = CONFIGURED_FEATURES.register("desert_nova", () -> flower(64, AMBlocks.DESERT_NOVA)); - RegistryObject> TARMA_ROOT_FEATURE = CONFIGURED_FEATURES.register("tarma_root", () -> flower(64, AMBlocks.TARMA_ROOT)); - RegistryObject> WAKEBLOOM_FEATURE = CONFIGURED_FEATURES.register("wakebloom", () -> flower(64, AMBlocks.WAKEBLOOM)); - RegistryObject> WITCHWOOD_TREE_FEATURE = CONFIGURED_FEATURES.register("witchwood_tree", () -> tree(AMBlocks.WITCHWOOD_LOG, new DarkOakTrunkPlacer(9, 3, 1), AMBlocks.WITCHWOOD_LEAVES, new DarkOakFoliagePlacer(ConstantInt.of(1), ConstantInt.of(1)), new ThreeLayersFeatureSize(1, 2, 1, 1, 2, OptionalInt.empty()))); - - RegistryObject CHIMERITE_PLACEMENT = PLACED_FEATURES.register("chimerite_placement", () -> orePlacement(CHIMERITE_FEATURE.getHolder().get(), 6, HeightRangePlacement.triangle(VerticalAnchor.absolute(-16), VerticalAnchor.absolute(16)))); - RegistryObject VINTEUM_PLACEMENT = PLACED_FEATURES.register("vinteum_ore", () -> orePlacement(VINTEUM_FEATURE.getHolder().get(), 8, HeightRangePlacement.triangle(VerticalAnchor.absolute(-16), VerticalAnchor.absolute(80)))); - RegistryObject TOPAZ_PLACEMENT = PLACED_FEATURES.register("topaz_ore", () -> orePlacement(TOPAZ_FEATURE.getHolder().get(), 7, HeightRangePlacement.triangle(VerticalAnchor.aboveBottom(-80), VerticalAnchor.aboveBottom(80)))); - RegistryObject TOPAZ_EXTRA_PLACEMENT = PLACED_FEATURES.register("topaz_ore_extra", () -> orePlacement(TOPAZ_EXTRA_FEATURE.getHolder().get(), 100, HeightRangePlacement.triangle(VerticalAnchor.absolute(-16), VerticalAnchor.absolute(480)))); - RegistryObject AUM_PLACEMENT = PLACED_FEATURES.register("aum", () -> flowerPlacement(AUM_FEATURE.getHolder().get(), 32)); - RegistryObject CERUBLOSSOM_PLACEMENT = PLACED_FEATURES.register("cerublossom", () -> flowerPlacement(CERUBLOSSOM_FEATURE.getHolder().get(), 32)); - RegistryObject DESERT_NOVA_PLACEMENT = PLACED_FEATURES.register("desert_nova", () -> flowerPlacement(DESERT_NOVA_FEATURE.getHolder().get(), 32)); - RegistryObject TARMA_ROOT_PLACEMENT = PLACED_FEATURES.register("tarma_root", () -> flowerPlacement(TARMA_ROOT_FEATURE.getHolder().get(), 32)); - RegistryObject WAKEBLOOM_PLACEMENT = PLACED_FEATURES.register("wakebloom", () -> flowerPlacement(WAKEBLOOM_FEATURE.getHolder().get(), 32)); - RegistryObject WITCHWOOD_TREE_PLACEMENT = PLACED_FEATURES.register("witchwood_tree", () -> treePlacement(WITCHWOOD_TREE_FEATURE.getHolder().get(), AMBlocks.WITCHWOOD_SAPLING)); - RegistryObject WITCHWOOD_TREE_VEGETATION = PLACED_FEATURES.register("trees_witchwood", () -> treeVegetation(WITCHWOOD_TREE_FEATURE.getHolder().get(), PlacementUtils.countExtra(1, 0.1F, 0), 8, AMBlocks.WITCHWOOD_SAPLING)); - - RegistryObject> MODIFIER_CODEC = BIOME_MODIFIER_SERIALIZERS.register("modifier", () -> Codec.unit(new Modifier())); - RegistryObject MODIFIER = BIOME_MODIFIERS.register("modifier", Modifier::new); - - /** - * @param ore The ore block to use. - * @param deepslateOre The deepslate ore block to use. - * @param veinSize The vein size of this ore. - * @param airExposureDiscardChance A 0..1 float that represents the probability of the feature being discarded if the vein touches air. - * @return A configured ore feature based on the given parameters. - */ - static ConfiguredFeature ore(Supplier ore, Supplier deepslateOre, int veinSize, float airExposureDiscardChance) { - return feature(Feature.ORE, new OreConfiguration(List.of(OreConfiguration.target(OreFeatures.STONE_ORE_REPLACEABLES, ore.get().defaultBlockState()), OreConfiguration.target(OreFeatures.DEEPSLATE_ORE_REPLACEABLES, deepslateOre.get().defaultBlockState())), veinSize, airExposureDiscardChance)); - } - - /** - * @param feature The configured feature to use. - * @param veinCount The amount of veins for this feature. - * @param heightRangePlacement The height distribution of this feature. - * @return A placed feature based on the given parameters. - */ - static PlacedFeature orePlacement(Holder> feature, int veinCount, HeightRangePlacement heightRangePlacement) { - return placement(Holder.hackyErase(feature), CountPlacement.of(veinCount), InSquarePlacement.spread(), heightRangePlacement, BiomeFilter.biome()); - } - - /** - * @param tries How many tries for this feature will be performed. - * @param flower The flower block to use. - * @return A configured flower feature based on the given parameters. - */ - static ConfiguredFeature flower(int tries, Supplier flower) { - return feature(Feature.RANDOM_PATCH, FeatureUtils.simpleRandomPatchConfiguration(tries, PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(flower.get()))))); - } - - /** - * @param feature The configured feature to use. - * @param rarity The rarity of this feature. - * @return A placed feature based on the given parameters. - */ - static PlacedFeature flowerPlacement(Holder> feature, int rarity) { - return placement(Holder.hackyErase(feature), RarityFilter.onAverageOnceEvery(rarity), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); - } - - /** - * @param log The log block to use. - * @param trunk The trunk placer to use. - * @param leaves The leaves block to use. - * @param foliage The foliage placer to use. - * @param size The feature size to use. - * @return A configured tree feature based on the given parameters. - */ - static ConfiguredFeature tree(Supplier log, TrunkPlacer trunk, Supplier leaves, FoliagePlacer foliage, FeatureSize size) { - return feature(Feature.TREE, new TreeConfiguration.TreeConfigurationBuilder(BlockStateProvider.simple(log.get()), trunk, BlockStateProvider.simple(leaves.get()), foliage, size).ignoreVines().build()); - } - - /** - * @param feature The configured feature to use. - * @param sapling The sapling associated with this tree feature. - * @return A placed feature based on the given parameters. - */ - static PlacedFeature treePlacement(Holder> feature, Supplier sapling) { - return new PlacedFeature(Holder.hackyErase(feature), List.of(PlacementUtils.filteredByBlockSurvival(sapling.get()))); - } - - /** - * @param feature The configured feature to use. - * @param modifier The tree placement modifier to use. - * @param rarity The rarity of this feature. - * @param sapling The sapling associated with this tree feature. - * @return A placed feature based on the given parameters. - */ - static PlacedFeature treeVegetation(Holder> feature, PlacementModifier modifier, int rarity, Supplier sapling) { - List list = new ArrayList<>(VegetationPlacements.treePlacement(modifier, sapling.get())); - list.add(RarityFilter.onAverageOnceEvery(rarity)); - return placement(Holder.hackyErase(feature), list.toArray(new PlacementModifier[0])); - } - - private static ConfiguredFeature feature(Feature feature, T configuration) { - return new ConfiguredFeature<>(feature, configuration); - } - - private static PlacedFeature placement(Holder> feature, PlacementModifier... modifiers) { - return new PlacedFeature(feature, Arrays.asList(modifiers)); - } - - class Modifier implements BiomeModifier { - - @Override - public void modify(final Holder biome, final Phase phase, final ModifiableBiomeInfo.BiomeInfo.Builder builder) { - if (phase == Phase.ADD) { - BiomeGenerationSettingsBuilder generationSettings = builder.getGenerationSettings(); - MobSpawnSettingsBuilder spawn = builder.getMobSpawnSettings(); - if (biome.is(BiomeTags.IS_OVERWORLD)) { - generationSettings.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, CHIMERITE_PLACEMENT.getHolder().get()); - generationSettings.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, VINTEUM_PLACEMENT.getHolder().get()); - generationSettings.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, TOPAZ_PLACEMENT.getHolder().get()); - if (biome.is(BiomeTags.IS_MOUNTAIN)) { - generationSettings.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, TOPAZ_EXTRA_PLACEMENT.getHolder().get()); - } - if (biome.is(BiomeTags.IS_FOREST)) { - generationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, AUM_PLACEMENT.getHolder().get()); - spawn.addSpawn(MobCategory.AMBIENT, new MobSpawnSettings.SpawnerData(AMEntities.DRYAD.get(), 2, 15, 25)); - } - if (biome.is(BiomeTags.IS_JUNGLE) || biome.is(Tags.Biomes.IS_SWAMP)) { - generationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, CERUBLOSSOM_PLACEMENT.getHolder().get()); - generationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, WAKEBLOOM_PLACEMENT.getHolder().get()); - } - if (biome.is(Tags.Biomes.IS_SANDY)) { - generationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, DESERT_NOVA_PLACEMENT.getHolder().get()); - } - if (biome.is(BiomeTags.IS_MOUNTAIN) || biome.is(BiomeTags.IS_HILL) || biome.is(Tags.Biomes.IS_UNDERGROUND)) { - generationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, TARMA_ROOT_PLACEMENT.getHolder().get()); - } - if (biome.is(Tags.Biomes.IS_SPOOKY)) { - generationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, WITCHWOOD_TREE_VEGETATION.getHolder().get()); - } - } - } - } - - @Override - public Codec codec() { - return MODIFIER_CODEC.get(); - } - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFluids.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFluids.java new file mode 100644 index 000000000..1f39a22b8 --- /dev/null +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMFluids.java @@ -0,0 +1,44 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.common.init; + +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; +import net.minecraftforge.fluids.FluidType; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.ApiStatus.Internal; +import org.jetbrains.annotations.ApiStatus.NonExtendable; + +import java.util.function.Consumer; + +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.FLUIDS; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.FLUID_TYPES; + +@NonExtendable +public interface AMFluids { + RegistryObject LIQUID_ESSENCE_TYPE = FLUID_TYPES.register("liquid_essence", () -> new FluidType(FluidType.Properties.create().fallDistanceModifier(0F)) { + @Override + public void initializeClient(Consumer consumer) { + consumer.accept(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return new ResourceLocation(ArsMagicaAPI.MOD_ID, "block/liquid_essence_still"); + } + + @Override + public ResourceLocation getFlowingTexture() { + return new ResourceLocation(ArsMagicaAPI.MOD_ID, "block/liquid_essence_flowing"); + } + }); + } + }); + RegistryObject LIQUID_ESSENCE = FLUIDS.register("liquid_essence", () -> new ForgeFlowingFluid.Source(AMFluids.LIQUID_ESSENCE_PROPERTIES)); + RegistryObject FLOWING_LIQUID_ESSENCE = FLUIDS.register("flowing_liquid_essence", () -> new ForgeFlowingFluid.Flowing(AMFluids.LIQUID_ESSENCE_PROPERTIES)); + ForgeFlowingFluid.Properties LIQUID_ESSENCE_PROPERTIES = new ForgeFlowingFluid.Properties(LIQUID_ESSENCE_TYPE, LIQUID_ESSENCE, FLOWING_LIQUID_ESSENCE).bucket(AMItems.LIQUID_ESSENCE_BUCKET).block(AMBlocks.LIQUID_ESSENCE); + + /** + * Empty method that is required for classloading + */ + @Internal + static void register() {} +} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMItems.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMItems.java index c883f48dc..9ec231b25 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMItems.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMItems.java @@ -18,11 +18,13 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.DoubleHighBlockItem; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.PlaceOnWaterBlockItem; import net.minecraft.world.item.StandingAndWallBlockItem; import net.minecraft.world.level.block.Block; @@ -134,6 +136,7 @@ public ItemStack makeIcon() { RegistryObject LIFE_GUARDIAN_SPAWN_EGG = ITEMS.register("life_guardian_spawn_egg", () -> new ForgeSpawnEggItem(AMEntities.LIFE_GUARDIAN, 0x12e780, 0xc9bc2f, ITEM_64)); RegistryObject ARCANE_GUARDIAN_SPAWN_EGG = ITEMS.register("arcane_guardian_spawn_egg", () -> new ForgeSpawnEggItem(AMEntities.ARCANE_GUARDIAN, 0x7f3280, 0xc9bc2f, ITEM_64)); RegistryObject ENDER_GUARDIAN_SPAWN_EGG = ITEMS.register("ender_guardian_spawn_egg", () -> new ForgeSpawnEggItem(AMEntities.ENDER_GUARDIAN, 0x000000, 0xc9bc2f, ITEM_64)); + RegistryObject LIQUID_ESSENCE_BUCKET = ITEMS.register("liquid_essence_bucket", () -> new BucketItem(AMFluids.LIQUID_ESSENCE, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1).tab(TAB))); private static ColoredRegistryObject registerColoredItem(String suffix, Function creator) { return new ColoredRegistryObject<>(ITEMS, suffix, creator); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRegistries.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRegistries.java index e929bbbe5..8993506fc 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRegistries.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRegistries.java @@ -1,11 +1,21 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.init; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ability.IAbility; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Ability; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarCapMaterial; +import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarStructureMaterial; import com.github.minecraftschurlimods.arsmagicalegacy.api.magic.ContingencyType; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Ritual; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualEffect; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellTransformation; import com.mojang.serialization.Codec; import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleType; @@ -23,11 +33,9 @@ import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraft.world.level.material.Fluid; -import net.minecraftforge.common.world.BiomeModifier; import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fluids.FluidType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.IForgeRegistry; @@ -39,36 +47,45 @@ @NonExtendable public interface AMRegistries { - DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ArsMagicaAPI.MOD_ID); - DeferredRegister FLUIDS = DeferredRegister.create(ForgeRegistries.FLUIDS, ArsMagicaAPI.MOD_ID); - DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ArsMagicaAPI.MOD_ID); - DeferredRegister MOB_EFFECTS = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, ArsMagicaAPI.MOD_ID); - DeferredRegister ATTRIBUTES = DeferredRegister.create(ForgeRegistries.ATTRIBUTES, ArsMagicaAPI.MOD_ID); - DeferredRegister SOUND_EVENTS = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, ArsMagicaAPI.MOD_ID); - DeferredRegister POTIONS = DeferredRegister.create(ForgeRegistries.POTIONS, ArsMagicaAPI.MOD_ID); - DeferredRegister ENCHANTMENTS = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, ArsMagicaAPI.MOD_ID); - DeferredRegister> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, ArsMagicaAPI.MOD_ID); - DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ArsMagicaAPI.MOD_ID); - DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, ArsMagicaAPI.MOD_ID); - DeferredRegister> MENU_TYPES = DeferredRegister.create(ForgeRegistries.MENU_TYPES, ArsMagicaAPI.MOD_ID); - DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, ArsMagicaAPI.MOD_ID); - DeferredRegister> STAT_TYPES = DeferredRegister.create(ForgeRegistries.STAT_TYPES, ArsMagicaAPI.MOD_ID); - DeferredRegister> DATA_SERIALIZERS = DeferredRegister.create(ForgeRegistries.Keys.ENTITY_DATA_SERIALIZERS, ArsMagicaAPI.MOD_ID); - DeferredRegister> CONFIGURED_FEATURES = DeferredRegister.create(Registry.CONFIGURED_FEATURE_REGISTRY, ArsMagicaAPI.MOD_ID); - DeferredRegister PLACED_FEATURES = DeferredRegister.create(Registry.PLACED_FEATURE_REGISTRY, ArsMagicaAPI.MOD_ID); - DeferredRegister> BIOME_MODIFIER_SERIALIZERS = DeferredRegister.create(ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, ArsMagicaAPI.MOD_ID); - DeferredRegister BIOME_MODIFIERS = DeferredRegister.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ArsMagicaAPI.MOD_ID); - DeferredRegister SKILL_POINTS = DeferredRegister.create(new ResourceLocation(ArsMagicaAPI.MOD_ID, "skill_point"), ArsMagicaAPI.MOD_ID); - DeferredRegister AFFINITIES = DeferredRegister.create(new ResourceLocation(ArsMagicaAPI.MOD_ID, "affinity"), ArsMagicaAPI.MOD_ID); - DeferredRegister SPELL_PARTS = DeferredRegister.create(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spell_part"), ArsMagicaAPI.MOD_ID); - DeferredRegister ABILITIES = DeferredRegister.create(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ability"), ArsMagicaAPI.MOD_ID); - DeferredRegister CONTINGENCY_TYPE = DeferredRegister.create(new ResourceLocation(ArsMagicaAPI.MOD_ID, "contingency_type"), ArsMagicaAPI.MOD_ID); + // Deferred Registers for vanilla registries + DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ArsMagicaAPI.MOD_ID); + DeferredRegister FLUIDS = DeferredRegister.create(ForgeRegistries.FLUIDS, ArsMagicaAPI.MOD_ID); + DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ArsMagicaAPI.MOD_ID); + DeferredRegister MOB_EFFECTS = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, ArsMagicaAPI.MOD_ID); + DeferredRegister ATTRIBUTES = DeferredRegister.create(ForgeRegistries.ATTRIBUTES, ArsMagicaAPI.MOD_ID); + DeferredRegister SOUND_EVENTS = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, ArsMagicaAPI.MOD_ID); + DeferredRegister POTIONS = DeferredRegister.create(ForgeRegistries.POTIONS, ArsMagicaAPI.MOD_ID); + DeferredRegister ENCHANTMENTS = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, ArsMagicaAPI.MOD_ID); + DeferredRegister> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, ArsMagicaAPI.MOD_ID); + DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ArsMagicaAPI.MOD_ID); + DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, ArsMagicaAPI.MOD_ID); + DeferredRegister> MENU_TYPES = DeferredRegister.create(ForgeRegistries.MENU_TYPES, ArsMagicaAPI.MOD_ID); + DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, ArsMagicaAPI.MOD_ID); + DeferredRegister> STAT_TYPES = DeferredRegister.create(ForgeRegistries.STAT_TYPES, ArsMagicaAPI.MOD_ID); + DeferredRegister CUSTOM_STATS = DeferredRegister.create(Registry.CUSTOM_STAT_REGISTRY, ArsMagicaAPI.MOD_ID); - Supplier> SKILL_POINT_REGISTRY = SKILL_POINTS.makeRegistry(() -> new RegistryBuilder().setDefaultKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "none"))); - Supplier> AFFINITY_REGISTRY = AFFINITIES.makeRegistry(() -> new RegistryBuilder().setDefaultKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "none"))); - Supplier> SPELL_PART_REGISTRY = SPELL_PARTS.makeRegistry(RegistryBuilder::new); - Supplier> ABILITY_REGISTRY = ABILITIES.makeRegistry(RegistryBuilder::new); - Supplier> CONTINGENCY_TYPE_REGISTRY = CONTINGENCY_TYPE.makeRegistry(() -> new RegistryBuilder().setDefaultKey(ContingencyType.NONE)); + // Deferred Registers for forge registries + DeferredRegister FLUID_TYPES = DeferredRegister.create(ForgeRegistries.Keys.FLUID_TYPES, ArsMagicaAPI.MOD_ID); + DeferredRegister> ENTITY_DATA_SERIALIZERS = DeferredRegister.create(ForgeRegistries.Keys.ENTITY_DATA_SERIALIZERS, ArsMagicaAPI.MOD_ID); + + // Deferred Registers for custom registries + DeferredRegister SKILL_POINTS = DeferredRegister.create(SkillPoint.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister AFFINITIES = DeferredRegister.create(Affinity.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister SPELL_PARTS = DeferredRegister.create(ISpellPart.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister CONTINGENCY_TYPE = DeferredRegister.create(ContingencyType.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister> RITUAL_TRIGGER_TYPES = DeferredRegister.create(RitualTrigger.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister> RITUAL_REQUIREMENT_TYPES = DeferredRegister.create(RitualRequirement.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister> RITUAL_EFFECT_TYPES = DeferredRegister.create(RitualEffect.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + + // region Custom registries get via ArsMagicaAPI.get().getXYZRegistry() + Supplier> SKILL_POINT_REGISTRY = SKILL_POINTS.makeRegistry(() -> new RegistryBuilder().setDefaultKey(new ResourceLocation(ArsMagicaAPI.MOD_ID, "none"))); + Supplier> AFFINITY_REGISTRY = AFFINITIES.makeRegistry(() -> new RegistryBuilder().setDefaultKey(Affinity.NONE)); + Supplier> SPELL_PART_REGISTRY = SPELL_PARTS.makeRegistry(RegistryBuilder::new); + Supplier> CONTINGENCY_TYPE_REGISTRY = CONTINGENCY_TYPE.makeRegistry(() -> new RegistryBuilder().setDefaultKey(ContingencyType.NONE)); + Supplier>> RITUAL_TRIGGER_TYPE_REGISTRY = RITUAL_TRIGGER_TYPES.makeRegistry(RegistryBuilder::new); + Supplier>> RITUAL_REQUIREMENT_TYPE_REGISTRY = RITUAL_REQUIREMENT_TYPES.makeRegistry(RegistryBuilder::new); + Supplier>> RITUAL_EFFECT_TYPE_REGISTRY = RITUAL_EFFECT_TYPES.makeRegistry(RegistryBuilder::new); + // endregion /** * Registers the registries to the given event bus. @@ -78,6 +95,7 @@ public interface AMRegistries { @Internal static void init(IEventBus bus) { AMBlocks.register(); + AMFluids.register(); AMItems.register(); AMMobEffects.register(); AMAttributes.register(); @@ -91,28 +109,63 @@ static void init(IEventBus bus) { AMSkillPoints.register(); AMAffinities.register(); AMSpellParts.register(); - AMAbilities.register(); AMContingencyTypes.register(); + AMRituals.register(); + BLOCKS.register(bus); FLUIDS.register(bus); ITEMS.register(bus); MOB_EFFECTS.register(bus); + ATTRIBUTES.register(bus); SOUND_EVENTS.register(bus); POTIONS.register(bus); ENCHANTMENTS.register(bus); - ENTITIES.register(bus); - BLOCK_ENTITIES.register(bus); + ENTITY_TYPES.register(bus); + BLOCK_ENTITY_TYPES.register(bus); PARTICLE_TYPES.register(bus); MENU_TYPES.register(bus); RECIPE_SERIALIZERS.register(bus); STAT_TYPES.register(bus); - ATTRIBUTES.register(bus); - DATA_SERIALIZERS.register(bus); - CONFIGURED_FEATURES.register(bus); + CUSTOM_STATS.register(bus); + FLUID_TYPES.register(bus); + ENTITY_DATA_SERIALIZERS.register(bus); SKILL_POINTS.register(bus); AFFINITIES.register(bus); SPELL_PARTS.register(bus); - ABILITIES.register(bus); CONTINGENCY_TYPE.register(bus); + RITUAL_TRIGGER_TYPES.register(bus); + RITUAL_REQUIREMENT_TYPES.register(bus); + RITUAL_EFFECT_TYPES.register(bus); + + // region Deferred Registries for custom datapack registries (do not use to register, use a data generator instead) + DeferredRegister ABILITIES = DeferredRegister.create(Ability.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister SKILLS = DeferredRegister.create(Skill.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister RITUALS = DeferredRegister.create(Ritual.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister OCCULUS_TABS = DeferredRegister.create(OcculusTab.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister SPELL_TRANSFORMATIONS = DeferredRegister.create(SpellTransformation.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister ALTAR_STRUCTURE_MATERIALS = DeferredRegister.create(AltarStructureMaterial.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister ALTAR_CAP_MATERIALS = DeferredRegister.create(AltarCapMaterial.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + DeferredRegister PREFAB_SPELLS = DeferredRegister.create(PrefabSpell.REGISTRY_KEY, ArsMagicaAPI.MOD_ID); + // endregion + + // region Custom datapack registries get via RegistryAccess + ABILITIES.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(Ability.DIRECT_CODEC, Ability.DIRECT_CODEC)); + SKILLS.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(Skill.DIRECT_CODEC, Skill.DIRECT_CODEC)); + RITUALS.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(Ritual.DIRECT_CODEC)); + OCCULUS_TABS.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(OcculusTab.CODEC, OcculusTab.CODEC)); + SPELL_TRANSFORMATIONS.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(SpellTransformation.DIRECT_CODEC)); + ALTAR_STRUCTURE_MATERIALS.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(AltarStructureMaterial.CODEC, AltarStructureMaterial.CODEC)); + ALTAR_CAP_MATERIALS.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(AltarCapMaterial.CODEC, AltarCapMaterial.CODEC)); + PREFAB_SPELLS.makeRegistry(() -> new RegistryBuilder().dataPackRegistry(PrefabSpell.DIRECT_CODEC, PrefabSpell.DIRECT_CODEC)); + // endregion + + ABILITIES.register(bus); + SKILLS.register(bus); + RITUALS.register(bus); + OCCULUS_TABS.register(bus); + SPELL_TRANSFORMATIONS.register(bus); + ALTAR_STRUCTURE_MATERIALS.register(bus); + ALTAR_CAP_MATERIALS.register(bus); + PREFAB_SPELLS.register(bus); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRituals.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRituals.java new file mode 100644 index 000000000..447232a7a --- /dev/null +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMRituals.java @@ -0,0 +1,48 @@ +package com.github.minecraftschurlimods.arsmagicalegacy.common.init; + +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.effect.EntitySpawnRitualEffect; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.BiomeRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.DimensionRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.DimensionTypeRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.HeightRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.MagicLevelRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.MoonPhaseRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.RitualStructureRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.UltrawarmDimensionRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.EntityDeathTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.EntitySummonTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.GameEventRitualTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.ItemDropRitualTrigger; +import com.mojang.serialization.Codec; +import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.ApiStatus.NonExtendable; + +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.RITUAL_EFFECT_TYPES; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.RITUAL_REQUIREMENT_TYPES; +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.RITUAL_TRIGGER_TYPES; + +@NonExtendable +public interface AMRituals { + RegistryObject> ENTITY_DEATH_TRIGGER = RITUAL_TRIGGER_TYPES.register("entity_death", () -> EntityDeathTrigger.CODEC); + RegistryObject> ENTITY_SUMMON_TRIGGER = RITUAL_TRIGGER_TYPES.register("entity_summon", () -> EntitySummonTrigger.CODEC); + RegistryObject> ITEM_DROP_TRIGGER = RITUAL_TRIGGER_TYPES.register("item_drop", () -> ItemDropRitualTrigger.CODEC); + RegistryObject> GAME_EVENT_TRIGGER = RITUAL_TRIGGER_TYPES.register("game_event", () -> GameEventRitualTrigger.CODEC); + + RegistryObject> SPAWN_ENTITY_EFFECT = RITUAL_EFFECT_TYPES.register("spawn_entity", () -> EntitySpawnRitualEffect.CODEC); + + RegistryObject> BIOME_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("biome", () -> BiomeRequirement.CODEC); + RegistryObject> DIMENSION_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("dimension", () -> DimensionRequirement.CODEC); + RegistryObject> DIMENSION_TYPE_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("dimension_type", () -> DimensionTypeRequirement.CODEC); + RegistryObject> HEIGHT_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("height", () -> HeightRequirement.CODEC); + RegistryObject> MAGIC_LEVEL_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("magic_level", () -> MagicLevelRequirement.CODEC); + RegistryObject> MOON_PHASE_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("moon_phase", () -> MoonPhaseRequirement.CODEC); + RegistryObject> RITUAL_STRUCTURE_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("structure", () -> RitualStructureRequirement.CODEC); + RegistryObject> ULTRAWARM_DIMENSION_REQUIREMENT = RITUAL_REQUIREMENT_TYPES.register("ultrawarm_dimension", () -> UltrawarmDimensionRequirement.CODEC); + + /** + * Empty method that is required for classloading + */ + @ApiStatus.Internal + static void register() {} +} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMSkillPoints.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMSkillPoints.java index ab210d6d5..b77883f9e 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMSkillPoints.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMSkillPoints.java @@ -1,16 +1,16 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.init; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.ApiStatus.NonExtendable; @NonExtendable public interface AMSkillPoints { - RegistryObject BLUE = AMRegistries.SKILL_POINTS.register("blue", () -> new SkillPoint(0x0000ff, 0, 1)); - RegistryObject GREEN = AMRegistries.SKILL_POINTS.register("green", () -> new SkillPoint(0x00ff00, 10, 2)); - RegistryObject RED = AMRegistries.SKILL_POINTS.register("red", () -> new SkillPoint(0xff0000, 20, 3)); + RegistryObject BLUE = AMRegistries.SKILL_POINTS.register("blue", () -> new SkillPoint(0x0000ff, 0, 1)); + RegistryObject GREEN = AMRegistries.SKILL_POINTS.register("green", () -> new SkillPoint(0x00ff00, 10, 2)); + RegistryObject RED = AMRegistries.SKILL_POINTS.register("red", () -> new SkillPoint(0xff0000, 20, 3)); /** * Empty method that is required for classloading diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMStats.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMStats.java index 219cf57a4..b79e7765f 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMStats.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/init/AMStats.java @@ -1,37 +1,39 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.init; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.stats.StatFormatter; import net.minecraft.stats.Stats; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.ApiStatus.NonExtendable; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +import static com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMRegistries.CUSTOM_STATS; @NonExtendable public interface AMStats { - Map STAT_REGISTER = new HashMap<>(); + Map FORMATTERS = new HashMap<>(); - ResourceLocation INTERACT_WITH_OBELISK = register(new ResourceLocation(ArsMagicaAPI.MOD_ID, "interact_with_obelisk"), StatFormatter.DEFAULT); - ResourceLocation INTERACT_WITH_OCCULUS = register(new ResourceLocation(ArsMagicaAPI.MOD_ID, "interact_with_occulus"), StatFormatter.DEFAULT); - ResourceLocation INTERACT_WITH_INSCRIPTION_TABLE = register(new ResourceLocation(ArsMagicaAPI.MOD_ID, "interact_with_inscription_table"), StatFormatter.DEFAULT); - ResourceLocation SPELL_CAST = register(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spell_cast"), StatFormatter.DEFAULT); - ResourceLocation RITUALS_TRIGGERED = register(new ResourceLocation(ArsMagicaAPI.MOD_ID, "rituals_triggered"), StatFormatter.DEFAULT); + RegistryObject INTERACT_WITH_OBELISK = register("interact_with_obelisk", StatFormatter.DEFAULT); + RegistryObject INTERACT_WITH_OCCULUS = register("interact_with_occulus", StatFormatter.DEFAULT); + RegistryObject INTERACT_WITH_INSCRIPTION_TABLE = register("interact_with_inscription_table", StatFormatter.DEFAULT); + RegistryObject SPELL_CAST = register("spell_cast", StatFormatter.DEFAULT); + RegistryObject RITUALS_TRIGGERED = register("rituals_triggered", StatFormatter.DEFAULT); - private static ResourceLocation register(ResourceLocation location, StatFormatter formatter) { - STAT_REGISTER.put(location, formatter); - return location; + private static RegistryObject register(String name, StatFormatter formatter) { + AtomicReference> ref = new AtomicReference<>(); + var reg = CUSTOM_STATS.register(name, () -> ref.get().getId()); + FORMATTERS.put(reg.getId(), formatter); + ref.set(reg); + return reg; } static void onRegister(FMLCommonSetupEvent event) { - STAT_REGISTER.forEach((location, formatter) -> { - Registry.register(Registry.CUSTOM_STAT, location, location); - Stats.CUSTOM.get(location, formatter); - }); + CUSTOM_STATS.getEntries().forEach((reg) -> Stats.CUSTOM.get(reg.get(), FORMATTERS.get(reg.getId()))); } /** diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityEssenceItem.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityEssenceItem.java index fdd71f362..0023586b0 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityEssenceItem.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityEssenceItem.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.item; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityItem; import net.minecraft.Util; import net.minecraft.core.NonNullList; @@ -19,8 +19,8 @@ public AffinityEssenceItem(Properties properties) { public void fillItemCategory(CreativeModeTab pCategory, NonNullList pItems) { if (allowedIn(pCategory)) { var api = ArsMagicaAPI.get(); - for (IAffinity affinity : api.getAffinityRegistry()) { - if (IAffinity.NONE.equals(affinity.getId())) continue; + for (Affinity affinity : api.getAffinityRegistry()) { + if (Affinity.NONE.equals(affinity.getId())) continue; pItems.add(api.getAffinityHelper().getStackForAffinity(this, affinity.getId())); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityTomeItem.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityTomeItem.java index 5d4cd3359..6914879e3 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityTomeItem.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/AffinityTomeItem.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.item; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityItem; import net.minecraft.Util; import net.minecraft.core.NonNullList; @@ -19,8 +19,8 @@ public AffinityTomeItem(Properties properties) { public void fillItemCategory(CreativeModeTab pCategory, NonNullList pItems) { if (allowedIn(pCategory)) { var api = ArsMagicaAPI.get(); - for (IAffinity affinity : api.getAffinityRegistry()) { - if (IAffinity.NONE.equals(affinity.getId())) continue; + for (Affinity affinity : api.getAffinityRegistry()) { + if (Affinity.NONE.equals(affinity.getId())) continue; pItems.add(api.getAffinityHelper().getStackForAffinity(this, affinity.getId())); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/InfinityOrbItem.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/InfinityOrbItem.java index 63be90f4d..05ccc959b 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/InfinityOrbItem.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/InfinityOrbItem.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.item; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPointItem; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMSounds; @@ -28,7 +28,7 @@ public InfinityOrbItem() { @Override public void fillItemCategory(CreativeModeTab tab, NonNullList list) { if (allowedIn(tab)) { - for (ISkillPoint point : ArsMagicaAPI.get().getSkillPointRegistry().getValues()) { + for (SkillPoint point : ArsMagicaAPI.get().getSkillPointRegistry().getValues()) { list.add(setSkillPoint(new ItemStack(this), point)); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/SpellItem.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/SpellItem.java index d3f082f3c..c232cd7ea 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/SpellItem.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/item/SpellItem.java @@ -4,20 +4,17 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.IPrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellCastResult; import com.github.minecraftschurlimods.arsmagicalegacy.client.ClientHelper; import com.github.minecraftschurlimods.arsmagicalegacy.client.renderer.SpellItemRenderProperties; +import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMStats; import com.github.minecraftschurlimods.arsmagicalegacy.common.item.spellbook.SpellBookItem; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; import com.github.minecraftschurlimods.arsmagicalegacy.common.util.AMUtil; import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; import com.mojang.datafixers.util.Either; -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.DataResult; import net.minecraft.core.NonNullList; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; @@ -46,70 +43,18 @@ import java.util.function.Consumer; public class SpellItem extends Item implements ISpellItem { - public static final String SPELL_KEY = ArsMagicaAPI.MOD_ID + ":spell"; - private static final String SPELL_ICON_KEY = ArsMagicaAPI.MOD_ID + ":spell_icon"; - private static final String SPELL_NAME_KEY = ArsMagicaAPI.MOD_ID + ":spell_name"; private static final Logger LOGGER = LogManager.getLogger(); + public static final CreativeModeTab PREFAB_SPELLS_TAB = new CreativeModeTab(ArsMagicaAPI.MOD_ID + ".prefab_spells") { + @Override + public ItemStack makeIcon() { + return AMItems.SPELL_PARCHMENT.map(ItemStack::new).orElse(ItemStack.EMPTY); + } + }; public SpellItem() { super(new Item.Properties().stacksTo(1)); } - /** - * @param stack The stack to get the spell icon for. - * @return An optional containing the spell icon id, or an empty optional if the given stack does not have a spell icon. - */ - public static Optional getSpellIcon(ItemStack stack) { - return Optional.of(stack.getOrCreateTag().getString(SPELL_ICON_KEY)).filter(s -> !s.isEmpty()).map(ResourceLocation::tryParse); - } - - /** - * Sets the given icon to the given stack. - * - * @param stack The stack to set the icon on. - * @param icon The icon to set. - */ - public static void setSpellIcon(ItemStack stack, ResourceLocation icon) { - stack.getOrCreateTag().putString(SPELL_ICON_KEY, icon.toString()); - } - - /** - * @param stack The stack to get the spell name for. - * @return An optional containing the spell name, or an empty optional if the given stack does not have a spell name. - */ - public static Optional getSpellName(ItemStack stack) { - return Optional.of(stack.getOrCreateTag().getString(SPELL_NAME_KEY)).filter(s -> !s.isEmpty()); - } - - /** - * Sets the given name to the given stack. - * - * @param stack The stack to set the name on. - * @param name The name to set. - */ - public static void setSpellName(ItemStack stack, String name) { - stack.getOrCreateTag().putString(SPELL_NAME_KEY, name); - } - - /** - * Sets the given spell to the given stack. - * - * @param stack The stack to set the spell on. - * @param spell The spell to set. - */ - public static void saveSpell(ItemStack stack, ISpell spell) { - stack.getOrCreateTag().put(SPELL_KEY, ISpell.CODEC.encodeStart(NbtOps.INSTANCE, spell).get().mapRight(DataResult.PartialResult::message).ifRight(LOGGER::warn).left().orElse(new CompoundTag())); - } - - /** - * @param stack The stack to get the spell for. - * @return An optional containing the spell, or an empty optional if the given stack does not have a spell. - */ - public static ISpell getSpell(ItemStack stack) { - if (stack.isEmpty()) return ISpell.EMPTY; - return ISpell.CODEC.decode(NbtOps.INSTANCE, stack.getOrCreateTagElement(SPELL_KEY)).map(Pair::getFirst).get().mapRight(DataResult.PartialResult::message).ifRight(SpellItem.LOGGER::warn).left().orElse(ISpell.EMPTY); - } - @Override public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, TooltipFlag pIsAdvanced) { Player player = null; @@ -121,7 +66,7 @@ public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, Listmap(Component::literal).orElseGet(() -> pStack.hasCustomHoverName() ? pStack.getHoverName() : Component.translatable(TranslationConstants.SPELL_UNNAMED)); + return ISpellItem.getSpellName(pStack).map(Component::literal).orElseGet(() -> pStack.hasCustomHoverName() ? pStack.getHoverName() : Component.translatable(TranslationConstants.SPELL_UNNAMED)); } @Override @@ -167,22 +112,22 @@ public void initializeClient(Consumer consumer) { @Override public void onUsingTick(ItemStack stack, LivingEntity entity, int count) { if (entity.level.isClientSide()) return; - ISpell spell = getSpell(stack); + ISpell spell = ISpellItem.getSpell(stack); if (!spell.isContinuous()) return; SpellCastResult result = spell.cast(entity, entity.level, count - 1, true, true); - SoundEvent sound = getSpell(stack).primaryAffinity().getLoopSound(); + SoundEvent sound = ISpellItem.getSpell(stack).primaryAffinity().getLoopSound(); if (sound != null) { entity.getLevel().playSound(null, entity.getX(), entity.getY(), entity.getZ(), sound, SoundSource.PLAYERS, 0.1f, 1f); } if (entity instanceof Player player) { if (result.isConsume()) { - player.awardStat(AMStats.SPELL_CAST); + player.awardStat(AMStats.SPELL_CAST.get()); } if (result.isFail()) { player.displayClientMessage(Component.translatable(TranslationConstants.SPELL_CAST + result.name().toLowerCase(), stack.getDisplayName()), true); } } - saveSpell(stack, spell); + ISpellItem.saveSpell(stack, spell); } @Override @@ -190,7 +135,7 @@ public void releaseUsing(ItemStack pStack, Level pLevel, LivingEntity pLivingEnt var api = ArsMagicaAPI.get(); if (pLivingEntity instanceof Player player) { if (!api.getMagicHelper().knowsMagic(player)) return; - Optional spellIcon = getSpellIcon(pStack); + Optional spellIcon = ISpellItem.getSpellIcon(pStack); if (spellIcon.isPresent()) { castSpell(pLevel, player, player.getUsedItemHand(), pStack); } else { @@ -234,7 +179,7 @@ public InteractionResult useOn(UseOnContext context) { if (item.getItem() instanceof SpellBookItem) { item = SpellBookItem.getSelectedSpell(item); } - Optional spellIcon = getSpellIcon(item); + Optional spellIcon = ISpellItem.getSpellIcon(item); if (spellIcon.isPresent()) { castSpell(context.getLevel(), context.getPlayer(), context.getHand(), item); } else { @@ -245,34 +190,34 @@ public InteractionResult useOn(UseOnContext context) { @Override public void fillItemCategory(CreativeModeTab category, NonNullList items) { - if (category == PrefabSpellManager.ITEM_CATEGORY) { - PrefabSpellManager.instance().values().stream().map(IPrefabSpell::makeSpell).forEach(items::add); + if (category == PREFAB_SPELLS_TAB) { + ClientHelper.getRegistryAccess().registryOrThrow(PrefabSpell.REGISTRY_KEY).stream().map(IPrefabSpell::makeSpell).forEach(items::add); } } private void castSpell(Level level, LivingEntity entity, InteractionHand hand, ItemStack stack) { if (level.isClientSide()) return; - ISpell spell = getSpell(stack); + ISpell spell = ISpellItem.getSpell(stack); if (spell.isContinuous()) { - LOGGER.trace("{} starts casting continuous spell {}", entity, getSpellName(stack)); + LOGGER.trace("{} starts casting continuous spell {}", entity, ISpellItem.getSpellName(stack)); entity.startUsingItem(hand); } else { - LOGGER.trace("{} is casting instantaneous spell {}", entity, getSpellName(stack)); + LOGGER.trace("{} is casting instantaneous spell {}", entity, ISpellItem.getSpellName(stack)); SpellCastResult result = spell.cast(entity, level, 0, true, true); - LOGGER.trace("{} casted instantaneous spell {} with result {}", entity, getSpellName(stack), result); - SoundEvent sound = getSpell(stack).primaryAffinity().getCastSound(); + LOGGER.trace("{} casted instantaneous spell {} with result {}", entity, ISpellItem.getSpellName(stack), result); + SoundEvent sound = ISpellItem.getSpell(stack).primaryAffinity().getCastSound(); if (sound != null) { entity.getLevel().playSound(null, entity.getX(), entity.getY(), entity.getZ(), sound, SoundSource.PLAYERS, 0.1f, 1f); } if (entity instanceof Player player) { if (result.isConsume()) { - player.awardStat(AMStats.SPELL_CAST); + player.awardStat(AMStats.SPELL_CAST.get()); } if (result.isFail()) { player.displayClientMessage(Component.translatable(TranslationConstants.SPELL_CAST + result.name().toLowerCase(), stack.getDisplayName()), true); } } } - saveSpell(stack, spell); + ISpellItem.saveSpell(stack, spell); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/level/WitchwoodTreeGrower.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/level/WitchwoodTreeGrower.java index 33f9c8175..8968e9189 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/level/WitchwoodTreeGrower.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/level/WitchwoodTreeGrower.java @@ -1,10 +1,14 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.level; -import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMFeatures; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.grower.AbstractMegaTreeGrower; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraftforge.server.ServerLifecycleHooks; import org.jetbrains.annotations.Nullable; public class WitchwoodTreeGrower extends AbstractMegaTreeGrower { @@ -17,6 +21,6 @@ public class WitchwoodTreeGrower extends AbstractMegaTreeGrower { @Nullable @Override protected Holder> getConfiguredMegaFeature(RandomSource pRandom) { - return AMFeatures.WITCHWOOD_TREE_FEATURE.getHolder().get(); + return ServerLifecycleHooks.getCurrentServer().registryAccess().registryOrThrow(Registry.CONFIGURED_FEATURE_REGISTRY).getOrCreateHolderOrThrow(ResourceKey.create(Registry.CONFIGURED_FEATURE_REGISTRY, new ResourceLocation(ArsMagicaAPI.MOD_ID, "witchwood_tree"))); // TODO: Change when MinecraftForge/MinecraftForge#8956 gets merged } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualEffect.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualEffect.java deleted file mode 100644 index 361f761f1..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualEffect.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual; - -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.player.Player; - -public interface RitualEffect { - Codec CODEC = ResourceLocation.CODEC.dispatch("type", RitualManager::getRitualEffectType, RitualManager::getRitualEffectCodec); - - boolean performEffect(Player player, ServerLevel level, BlockPos pos); - - Codec codec(); -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualManager.java deleted file mode 100644 index 877afa7cf..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualManager.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.effect.EntitySpawnRitualEffect; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.BiomeRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.DimensionRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.DimensionTypeRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.HeightRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.MagicLevelRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.MoonPhaseRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.RitualStructureRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement.UltrawarmDimensionRequirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.EntityDeathTrigger; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.EntitySummonTrigger; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.GameEventRitualTrigger; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger.ItemDropRitualTrigger; -import com.github.minecraftschurlimods.codeclib.CodecDataManager; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import com.mojang.serialization.Codec; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.common.util.Lazy; -import org.slf4j.LoggerFactory; - -public final class RitualManager extends CodecDataManager { - private static final Lazy INSTANCE = Lazy.concurrentOf(RitualManager::new); - - private static final BiMap> ritualTriggerCodecs = HashBiMap.create(); - private static final BiMap> ritualRequirementCodecs = HashBiMap.create(); - private static final BiMap> ritualEffectCodecs = HashBiMap.create(); - - private RitualManager() { - super(ArsMagicaAPI.MOD_ID, "am_rituals", Ritual.CODEC, LoggerFactory.getLogger(RitualManager.class)); - useRegistryOps(); - init(); - } - - public static RitualManager instance() { - return INSTANCE.get(); - } - - public static void registerRitualRequirement(ResourceLocation id, Codec codec) { - ritualRequirementCodecs.put(id, codec); - } - - public static void registerRitualEffect(ResourceLocation id, Codec codec) { - ritualEffectCodecs.put(id, codec); - } - - public static void registerRitualTrigger(ResourceLocation id, Codec codec) { - ritualTriggerCodecs.put(id, codec); - } - - public static ResourceLocation getRitualRequirementType(RitualRequirement ritualRequirement) { - return ritualRequirementCodecs.inverse().get(ritualRequirement.codec()); - } - - public static Codec getRitualRequirementCodec(ResourceLocation resourceLocation) { - return ritualRequirementCodecs.get(resourceLocation); - } - - public static ResourceLocation getRitualTriggerType(RitualTrigger ritualTrigger) { - return ritualTriggerCodecs.inverse().get(ritualTrigger.codec()); - } - - public static Codec getRitualTriggerCodec(ResourceLocation resourceLocation) { - return ritualTriggerCodecs.get(resourceLocation); - } - - public static ResourceLocation getRitualEffectType(RitualEffect ritualEffect) { - return ritualEffectCodecs.inverse().get(ritualEffect.codec()); - } - - public static Codec getRitualEffectCodec(ResourceLocation resourceLocation) { - return ritualEffectCodecs.get(resourceLocation); - } - - private static void init() { - registerRitualTrigger(new ResourceLocation(ArsMagicaAPI.MOD_ID, "entity_death"), EntityDeathTrigger.CODEC); - registerRitualTrigger(new ResourceLocation(ArsMagicaAPI.MOD_ID, "entity_summon"), EntitySummonTrigger.CODEC); - registerRitualTrigger(new ResourceLocation(ArsMagicaAPI.MOD_ID, "item_drop"), ItemDropRitualTrigger.CODEC); - registerRitualTrigger(new ResourceLocation(ArsMagicaAPI.MOD_ID, "game_event"), GameEventRitualTrigger.CODEC); - - registerRitualEffect(new ResourceLocation(ArsMagicaAPI.MOD_ID, "spawn_entity"), EntitySpawnRitualEffect.CODEC); - - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "biome"), BiomeRequirement.CODEC); - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "dimension"), DimensionRequirement.CODEC); - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "dimension_type"), DimensionTypeRequirement.CODEC); - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "height"), HeightRequirement.CODEC); - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "magic_level"), MagicLevelRequirement.CODEC); - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "moon_phase"), MoonPhaseRequirement.CODEC); - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "structure"), RitualStructureRequirement.CODEC); - registerRitualRequirement(new ResourceLocation(ArsMagicaAPI.MOD_ID, "ultrawarm_dimension"), UltrawarmDimensionRequirement.CODEC); - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualRequirement.java deleted file mode 100644 index c0e88164d..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualRequirement.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual; - -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.util.TriPredicate; - -public interface RitualRequirement extends TriPredicate { - Codec CODEC = ResourceLocation.CODEC.dispatch("type", RitualManager::getRitualRequirementType, RitualManager::getRitualRequirementCodec); - - @Override - boolean test(Player player, ServerLevel serverLevel, BlockPos pos); - - Codec codec(); -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualTrigger.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualTrigger.java deleted file mode 100644 index 064d41e8f..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/RitualTrigger.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual; - -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.player.Player; - -public interface RitualTrigger { - Codec CODEC = ResourceLocation.CODEC.dispatch("type", RitualManager::getRitualTriggerType, RitualManager::getRitualTriggerCodec); - - void register(Ritual ritual); - - boolean trigger(Player player, ServerLevel level, BlockPos pos, Context ctx); - - Codec codec(); -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/effect/EntitySpawnRitualEffect.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/effect/EntitySpawnRitualEffect.java index da0500350..d489d8fb5 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/effect/EntitySpawnRitualEffect.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/effect/EntitySpawnRitualEffect.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.effect; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualEffect; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualEffect; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/BiomeRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/BiomeRequirement.java index 394b15739..dbef00916 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/BiomeRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/BiomeRequirement.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionRequirement.java index 283c702c9..0c662418d 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionRequirement.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionTypeRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionTypeRequirement.java index 21053689f..4d345d02c 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionTypeRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/DimensionTypeRequirement.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/HeightRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/HeightRequirement.java index 71a30d1bd..8deafa396 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/HeightRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/HeightRequirement.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MagicLevelRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MagicLevelRequirement.java index a8ecf4029..2a6aec26b 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MagicLevelRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MagicLevelRequirement.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MoonPhaseRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MoonPhaseRequirement.java index e2a374b47..4dcb59a53 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MoonPhaseRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/MoonPhaseRequirement.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/RitualStructureRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/RitualStructureRequirement.java index 7a9afa391..e4fa4854b 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/RitualStructureRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/RitualStructureRequirement.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.github.minecraftschurlimods.arsmagicalegacy.compat.patchouli.PatchouliCompat; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -15,7 +15,7 @@ public record RitualStructureRequirement(ResourceLocation structure) implements ).apply(inst, RitualStructureRequirement::new)); @Override - public boolean test(final Player player, final ServerLevel level, final BlockPos pos) { + public boolean test(Player player, ServerLevel level, BlockPos pos) { return PatchouliCompat.getMultiblockMatcher(structure).test(level, pos); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/UltrawarmDimensionRequirement.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/UltrawarmDimensionRequirement.java index 5214e4687..e29a96b81 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/UltrawarmDimensionRequirement.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/requirement/UltrawarmDimensionRequirement.java @@ -1,6 +1,6 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.requirement; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualRequirement; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualRequirement; import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntityDeathTrigger.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntityDeathTrigger.java index 637b199be..30becf8ec 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntityDeathTrigger.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntityDeathTrigger.java @@ -1,8 +1,8 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Context; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Ritual; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Context; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Ritual; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntitySummonTrigger.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntitySummonTrigger.java index ed4b3253b..9df29cbb5 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntitySummonTrigger.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/EntitySummonTrigger.java @@ -1,8 +1,8 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Context; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Ritual; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Context; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Ritual; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/GameEventRitualTrigger.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/GameEventRitualTrigger.java index 1b366531f..36735b9aa 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/GameEventRitualTrigger.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/GameEventRitualTrigger.java @@ -1,8 +1,8 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Context; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Ritual; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Context; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Ritual; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/ItemDropRitualTrigger.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/ItemDropRitualTrigger.java index 14439ded8..6f34a322b 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/ItemDropRitualTrigger.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/ritual/trigger/ItemDropRitualTrigger.java @@ -1,8 +1,8 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.trigger; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Context; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.Ritual; -import com.github.minecraftschurlimods.arsmagicalegacy.common.ritual.RitualTrigger; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Context; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.Ritual; +import com.github.minecraftschurlimods.arsmagicalegacy.api.ritual.RitualTrigger; import com.github.minecraftschurlimods.codeclib.CodecHelper; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTab.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTab.java deleted file mode 100644 index 4a30355de..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTab.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.skill; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.common.util.Lazy; - -import java.util.Optional; -import java.util.function.Supplier; - -public final class OcculusTab implements IOcculusTab { - private static final String DEFAULT_RENDERER = "com.github.minecraftschurlimods.arsmagicalegacy.client.gui.occulus.OcculusSkillTreeTabRenderer"; - //@formatter:off - public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - Codec.STRING.fieldOf("renderer").orElse(DEFAULT_RENDERER).forGetter(IOcculusTab::getRenderer), - ResourceLocation.CODEC.optionalFieldOf("background_texture").forGetter((IOcculusTab occulusTab) -> ((OcculusTab) occulusTab).getBackgroundOpt()), - ResourceLocation.CODEC.optionalFieldOf("icon_texture").forGetter((IOcculusTab occulusTab) -> ((OcculusTab) occulusTab).getIconOpt()), - Codec.INT.fieldOf("texture_width").orElse(IOcculusTab.TEXTURE_WIDTH).forGetter(IOcculusTab::getWidth), - Codec.INT.fieldOf("texture_height").orElse(IOcculusTab.TEXTURE_HEIGHT).forGetter(IOcculusTab::getHeight), - Codec.INT.fieldOf("start_x").orElse(0).forGetter(IOcculusTab::getStartX), - Codec.INT.fieldOf("start_y").orElse(0).forGetter(IOcculusTab::getStartY), - Codec.BYTE.fieldOf("index").xmap(Number::intValue, Number::byteValue).forGetter(IOcculusTab::getOcculusIndex) - ).apply(inst, OcculusTab::new)); - public static final Codec NETWORK_CODEC = RecordCodecBuilder.create(inst -> inst.group( - ResourceLocation.CODEC.fieldOf("id").forGetter(IOcculusTab::getId), - Codec.STRING.fieldOf("renderer").orElse(DEFAULT_RENDERER).forGetter(IOcculusTab::getRenderer), - ResourceLocation.CODEC.fieldOf("background_texture").forGetter(IOcculusTab::getBackground), - ResourceLocation.CODEC.fieldOf("icon_texture").forGetter(IOcculusTab::getIcon), - Codec.INT.fieldOf("texture_width").orElse(IOcculusTab.TEXTURE_WIDTH).forGetter(IOcculusTab::getWidth), - Codec.INT.fieldOf("texture_height").orElse(IOcculusTab.TEXTURE_HEIGHT).forGetter(IOcculusTab::getHeight), - Codec.INT.fieldOf("start_x").orElse(0).forGetter(IOcculusTab::getStartX), - Codec.INT.fieldOf("start_y").orElse(0).forGetter(IOcculusTab::getStartY), - Codec.BYTE.fieldOf("index").xmap(Number::intValue, Number::byteValue).forGetter(IOcculusTab::getOcculusIndex) - ).apply(inst, OcculusTab::new)); - //@formatter:on - private final Lazy rendererFactory; - private final String rendererClass; - private final ResourceLocation background; - private final ResourceLocation icon; - private final int width; - private final int height; - private final int startX; - private final int startY; - private final int index; - private ResourceLocation id; - - public OcculusTab(String rendererClass, ResourceLocation background, ResourceLocation icon, int width, int height, int startX, int startY, int index) { - this.rendererClass = rendererClass; - this.background = background; - this.icon = icon; - this.width = width; - this.height = height; - this.startX = startX; - this.startY = startY; - this.index = index; - rendererFactory = Lazy.concurrentOf(OcculusTabRendererFactory.of(getRenderer())); - } - - @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - private OcculusTab(String rendererClass, Optional background, Optional icon, int width, int height, int startX, int startY, int index) { - this(rendererClass, background.orElse(null), icon.orElse(null), width, height, startX, startY, index); - } - - public OcculusTab(ResourceLocation id, String rendererClass, ResourceLocation background, ResourceLocation icon, int width, int height, int startX, int startY, int index) { - this(rendererClass, background, icon, width, height, startX, startY, index); - setId(id); - } - - private Optional getIconOpt() { - return Optional.of(getIcon()); - } - - private Optional getBackgroundOpt() { - return Optional.of(getBackground()); - } - - @Override - public ResourceLocation getBackground() { - if (background != null) return background; - return new ResourceLocation(getId().getNamespace(), "textures/gui/occulus/" + getId().getPath() + ".png"); - } - - @Override - public ResourceLocation getIcon() { - if (icon != null) return icon; - return new ResourceLocation(getId().getNamespace(), "textures/icon/" + getId().getPath() + ".png"); - } - - @Override - public int getWidth() { - return width; - } - - @Override - public int getHeight() { - return height; - } - - @Override - public int getStartX() { - return startX; - } - - @Override - public int getStartY() { - return startY; - } - - @Override - public int getOcculusIndex() { - return index; - } - - @Override - public ResourceLocation getId() { - return id; - } - - void setId(ResourceLocation id) { - this.id = id; - } - - /** - * @return The name of this occulus tab's renderer class. - */ - public String getRenderer() { - return rendererClass; - } - - @Override - public Supplier getRendererFactory() { - return rendererFactory; - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTabManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTabManager.java deleted file mode 100644 index ada8b66b2..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/OcculusTabManager.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.skill; - -import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTabManager; -import com.github.minecraftschurlimods.codeclib.CodecDataManager; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.common.util.Lazy; -import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Collection; -import java.util.Comparator; -import java.util.Map; -import java.util.Optional; -import java.util.function.Supplier; - -public final class OcculusTabManager extends CodecDataManager implements IOcculusTabManager { - private static final Supplier INSTANCE = Lazy.concurrentOf(OcculusTabManager::new); - - private OcculusTabManager() { - super(ArsMagicaAPI.MOD_ID, "occulus_tabs", OcculusTab.CODEC, OcculusTab.NETWORK_CODEC, OcculusTabManager::validate, LoggerFactory.getLogger(OcculusTabManager.class)); - subscribeAsSyncable(ArsMagicaLegacy.NETWORK_HANDLER); - } - - /** - * @return The only instance of this class. - */ - public static OcculusTabManager instance() { - return INSTANCE.get(); - } - - @Override - public IOcculusTab getOrThrow(@Nullable ResourceLocation id) { - return super.getOrThrow(id); - } - - @Override - public Optional getOptional(@Nullable ResourceLocation id) { - return super.getOptional(id); - } - - private static void validate(Map data, Logger logger) { - data.forEach((id, tab) -> ((OcculusTab) tab).setId(id)); - } - - @Override - public Collection getTabs() { - return values(); - } - - @Override - public IOcculusTab getByIndex(int index) { - return values().stream().sorted(Comparator.comparing(IOcculusTab::getOcculusIndex)).toArray(IOcculusTab[]::new)[index]; - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/Skill.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/Skill.java deleted file mode 100644 index ba233921e..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/Skill.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.skill; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkill; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.ApiStatus.Internal; - -import java.util.Collections; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -public final class Skill implements ISkill { - //@formatter:off - @Internal - public static final Codec NETWORK_CODEC = RecordCodecBuilder.create(inst -> inst.group( - ResourceLocation.CODEC.fieldOf("id").forGetter(ISkill::getId), - ResourceLocation.CODEC.listOf().>xmap(Sets::newHashSet, Lists::newArrayList).fieldOf("parents").orElseGet(Sets::newHashSet).forGetter(ISkill::getParents), - Codec.unboundedMap(ResourceLocation.CODEC, Codec.INT).fieldOf("cost").orElseGet(Maps::newHashMap).forGetter(ISkill::getCost), - ResourceLocation.CODEC.fieldOf("occulus_tab").forGetter(ISkill::getOcculusTab), - Codec.INT.fieldOf("x").forGetter(ISkill::getX), - Codec.INT.fieldOf("y").forGetter(ISkill::getY), - Codec.BOOL.fieldOf("hidden").orElse(false).forGetter(ISkill::isHidden) - ).apply(inst, Skill::new)); - @Internal - public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - ResourceLocation.CODEC.listOf().>xmap(Sets::newHashSet, Lists::newArrayList).fieldOf("parents").orElseGet(Sets::newHashSet).forGetter(ISkill::getParents), - Codec.unboundedMap(ResourceLocation.CODEC, Codec.INT).fieldOf("cost").orElseGet(Maps::newHashMap).forGetter(ISkill::getCost), - ResourceLocation.CODEC.fieldOf("occulus_tab").forGetter(ISkill::getOcculusTab), - Codec.INT.fieldOf("x").forGetter(ISkill::getX), - Codec.INT.fieldOf("y").forGetter(ISkill::getY), - Codec.BOOL.fieldOf("hidden").orElse(false).forGetter(ISkill::isHidden) - ).apply(inst, Skill::new)); - //@formatter:on - private final int x; - private final int y; - private final ResourceLocation occulusTab; - private final Set parents; - private final Map cost; - private final boolean hidden; - private ResourceLocation id; - - public Skill(Set parents, Map cost, ResourceLocation occulusTab, int x, int y, boolean hidden) { - this.occulusTab = occulusTab; - this.parents = parents; - this.x = x; - this.y = y; - this.cost = cost; - this.hidden = hidden; - } - - public Skill(ResourceLocation id, Set parents, Map cost, ResourceLocation occulusTab, Integer x, Integer y, Boolean hidden) { - this(parents, cost, occulusTab, x, y, hidden); - setId(id); - } - - @Override - public int getX() { - return x; - } - - @Override - public int getY() { - return y; - } - - @Override - public ResourceLocation getId() { - return id; - } - - void setId(ResourceLocation id) { - this.id = id; - } - - @Override - public ResourceLocation getOcculusTab() { - return occulusTab; - } - - @Override - public Set getParents() { - return Collections.unmodifiableSet(parents); - } - - @Override - public Map getCost() { - return Collections.unmodifiableMap(cost); - } - - @Override - public boolean isHidden() { - return hidden; - } - - @Override - public boolean equals(Object obj) { - if (obj == this) return true; - if (obj == null || obj.getClass() != getClass()) return false; - Skill that = (Skill) obj; - return Objects.equals(id, that.id) && Objects.equals(occulusTab, that.occulusTab) && Objects.equals(parents, that.parents) && x == that.x && y == that.y && Objects.equals(cost, that.cost) && hidden == that.hidden; - } - - @Override - public int hashCode() { - return Objects.hash(id, occulusTab, parents, x, y, cost, hidden); - } - - @Override - public String toString() { - return "Skill[id=" + id + ", occulusTab=" + occulusTab + ", parents=" + parents + ", x=" + x + ", y=" + y + ", cost=" + cost + ", hidden=" + hidden + ']'; - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillHelper.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillHelper.java index 9610bc67f..4e510ea0b 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillHelper.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillHelper.java @@ -2,10 +2,10 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkill; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillHelper; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPointItem; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMCriteriaTriggers; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import com.github.minecraftschurlimods.codeclib.CodecHelper; @@ -13,6 +13,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.client.Minecraft; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -64,8 +65,8 @@ public boolean knows(Player player, ResourceLocation skill) { } @Override - public boolean knows(Player player, ISkill skill) { - return getKnowledgeHolder(player).knows(skill); + public boolean knows(Player player, Skill skill, RegistryAccess registryAccess) { + return getKnowledgeHolder(player).knows(skill, registryAccess); } @Override @@ -74,8 +75,8 @@ public boolean canLearn(Player player, ResourceLocation skill) { } @Override - public boolean canLearn(Player player, ISkill skill) { - return getKnowledgeHolder(player).canLearn(skill); + public boolean canLearn(Player player, Skill skill, RegistryAccess registryAccess) { + return getKnowledgeHolder(player).canLearn(skill, registryAccess); } @Override @@ -86,9 +87,9 @@ public void learn(Player player, ResourceLocation skill) { } @Override - public void learn(Player player, ISkill skill) { - getKnowledgeHolder(player).learn(skill); - AMCriteriaTriggers.PLAYER_LEARNED_SKILL.trigger((ServerPlayer) player, skill.getId()); + public void learn(Player player, Skill skill, RegistryAccess registryAccess) { + getKnowledgeHolder(player).learn(skill, registryAccess); + AMCriteriaTriggers.PLAYER_LEARNED_SKILL.trigger((ServerPlayer) player, skill.getId(registryAccess)); syncToPlayer(player); } @@ -99,14 +100,14 @@ public void forget(Player player, ResourceLocation skill) { } @Override - public void forget(Player player, ISkill skill) { - getKnowledgeHolder(player).forget(skill); + public void forget(Player player, Skill skill, RegistryAccess registryAccess) { + getKnowledgeHolder(player).forget(skill, registryAccess); syncToPlayer(player); } @Override - public void learnAll(Player player) { - getKnowledgeHolder(player).learnAll(); + public void learnAll(Player player, RegistryAccess registryAccess) { + getKnowledgeHolder(player).learnAll(registryAccess); syncToPlayer(player); } @@ -122,7 +123,7 @@ public int getSkillPoint(Player player, ResourceLocation point) { } @Override - public int getSkillPoint(Player player, ISkillPoint point) { + public int getSkillPoint(Player player, SkillPoint point) { return getKnowledgeHolder(player).getSkillPoint(point); } @@ -133,7 +134,7 @@ public void addSkillPoint(Player player, ResourceLocation skillPoint, int amount } @Override - public void addSkillPoint(Player player, ISkillPoint skillPoint, int amount) { + public void addSkillPoint(Player player, SkillPoint skillPoint, int amount) { getKnowledgeHolder(player).addSkillPoint(skillPoint, amount); syncToPlayer(player); } @@ -145,7 +146,7 @@ public void addSkillPoint(Player player, ResourceLocation skillPoint) { } @Override - public void addSkillPoint(Player player, ISkillPoint skillPoint) { + public void addSkillPoint(Player player, SkillPoint skillPoint) { getKnowledgeHolder(player).addSkillPoint(skillPoint); syncToPlayer(player); } @@ -158,7 +159,7 @@ public boolean consumeSkillPoint(Player player, ResourceLocation skillPoint, int } @Override - public boolean consumeSkillPoint(Player player, ISkillPoint skillPoint, int amount) { + public boolean consumeSkillPoint(Player player, SkillPoint skillPoint, int amount) { boolean success = getKnowledgeHolder(player).consumeSkillPoint(skillPoint, amount); syncToPlayer(player); return success; @@ -172,7 +173,7 @@ public boolean consumeSkillPoint(Player player, ResourceLocation skillPoint) { } @Override - public boolean consumeSkillPoint(Player player, ISkillPoint skillPoint) { + public boolean consumeSkillPoint(Player player, SkillPoint skillPoint) { boolean success = getKnowledgeHolder(player).consumeSkillPoint(skillPoint); syncToPlayer(player); return success; @@ -184,7 +185,7 @@ public ItemStack getOrbForSkillPoint(ResourceLocation skillPoint) { } @Override - public ItemStack getOrbForSkillPoint(ISkillPoint skillPoint) { + public ItemStack getOrbForSkillPoint(SkillPoint skillPoint) { return getStackForSkillPoint(AMItems.INFINITY_ORB.get(), skillPoint); } @@ -196,13 +197,13 @@ public ItemStack getStackForSkillPoint(T item } @Override - public ItemStack getStackForSkillPoint(T item, ISkillPoint skillPoint) { + public ItemStack getStackForSkillPoint(T item, SkillPoint skillPoint) { return getStackForSkillPoint(item, skillPoint.getId()); } @Nullable @Override - public ISkillPoint getSkillPointForStack(ItemStack stack) { + public SkillPoint getSkillPointForStack(ItemStack stack) { if (stack.getItem() instanceof ISkillPointItem item) { return item.getSkillPoint(stack); } @@ -296,15 +297,15 @@ public synchronized void learn(ResourceLocation skill) { * * @param skill The skill to add. */ - public void learn(ISkill skill) { - learn(skill.getId()); + public void learn(Skill skill, RegistryAccess registryAccess) { + learn(skill.getId(registryAccess)); } /** * Adds all skills in the registry to the known skills list. */ - public synchronized void learnAll() { - for (ISkill skill : ArsMagicaAPI.get().getSkillManager().getSkills()) { + public synchronized void learnAll(RegistryAccess registryAccess) { + for (Skill skill : registryAccess.registryOrThrow(Skill.REGISTRY_KEY)) { skills.add(skill.getId()); } } @@ -323,8 +324,8 @@ public synchronized void forget(ResourceLocation skill) { * * @param skill The skill to remove. */ - public void forget(ISkill skill) { - forget(skill.getId()); + public void forget(Skill skill, RegistryAccess registryAccess) { + forget(skill.getId(registryAccess)); } /** @@ -335,27 +336,28 @@ public synchronized void forgetAll() { } /** - * @param skill The id of the skill to check. + * @param skillId The id of the skill to check. * @return Whether the given skill can be learned or not. */ - public synchronized boolean canLearn(ResourceLocation skill) { - var skillManager = ArsMagicaAPI.get().getSkillManager(); - ISkill iSkill = skillManager.get(skill); + public synchronized boolean canLearn(ResourceLocation skillId) { + var skillRegistry = RegistryAccess.BUILTIN.get().registryOrThrow(Skill.REGISTRY_KEY); + Skill skill = skillRegistry.get(skillId); + if (skill == null) return false; boolean canLearn = true; - for (ResourceLocation rl : iSkill.getCost().keySet()) { - if (skillPoints.getOrDefault(rl, 0) < iSkill.getCost().get(rl)) { + for (ResourceLocation rl : skill.cost().keySet()) { + if (skillPoints.getOrDefault(rl, 0) < skill.cost().get(rl)) { canLearn = false; } } - return canLearn && skills.containsAll(skillManager.get(skill).getParents()); + return canLearn && skills.containsAll(skill.parents()); } /** * @param skill The skill to check. * @return Whether the given skill can be learned or not. */ - public boolean canLearn(ISkill skill) { - return canLearn(skill.getId()); + public boolean canLearn(Skill skill, RegistryAccess registryAccess) { + return canLearn(skill.getId(registryAccess)); } /** @@ -370,8 +372,8 @@ public synchronized boolean knows(ResourceLocation skill) { * @param skill The skill to check. * @return Whether the given skill is in the known skills list or not. */ - public boolean knows(ISkill skill) { - return knows(skill.getId()); + public boolean knows(Skill skill, RegistryAccess registryAccess) { + return knows(skill.getId(registryAccess)); } /** @@ -392,7 +394,7 @@ public synchronized void addSkillPoint(ResourceLocation skillPoint, int amount) * @param skillPoint The skill point to add. * @param amount The amount to add. */ - public void addSkillPoint(ISkillPoint skillPoint, int amount) { + public void addSkillPoint(SkillPoint skillPoint, int amount) { addSkillPoint(skillPoint.getId(), amount); } @@ -410,7 +412,7 @@ public void addSkillPoint(ResourceLocation skillPoint) { * * @param skillPoint The skill point to add. */ - public void addSkillPoint(ISkillPoint skillPoint) { + public void addSkillPoint(SkillPoint skillPoint) { addSkillPoint(skillPoint, 1); } @@ -436,7 +438,7 @@ public synchronized boolean consumeSkillPoint(ResourceLocation skillPoint, int a * @param amount The amount to remove. * @return True if the operation succeeded, false otherwise. */ - public boolean consumeSkillPoint(ISkillPoint skillPoint, int amount) { + public boolean consumeSkillPoint(SkillPoint skillPoint, int amount) { return consumeSkillPoint(skillPoint.getId(), amount); } @@ -456,7 +458,7 @@ public boolean consumeSkillPoint(ResourceLocation skillPoint) { * @param skillPoint The skill point to remove. * @return True if the operation succeeded, false otherwise. */ - public boolean consumeSkillPoint(ISkillPoint skillPoint) { + public boolean consumeSkillPoint(SkillPoint skillPoint) { return consumeSkillPoint(skillPoint, 1); } @@ -472,7 +474,7 @@ public int getSkillPoint(ResourceLocation skillPoint) { * @param skillPoint The skill point type to check. * @return The amount of skill points of the given type that are present in this holder. */ - public int getSkillPoint(ISkillPoint skillPoint) { + public int getSkillPoint(SkillPoint skillPoint) { return getSkillPoint(skillPoint.getId()); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillManager.java index 94bf4a93a..3cd2ce869 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillManager.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillManager.java @@ -1,89 +1,33 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.skill; -import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.occulus.IOcculusTab; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkill; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillManager; -import com.github.minecraftschurlimods.codeclib.CodecDataManager; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.OcculusTab; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.common.util.Lazy; -import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.util.Collection; import java.util.HashSet; import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -public final class SkillManager extends CodecDataManager implements ISkillManager { - private static final Lazy INSTANCE = Lazy.concurrentOf(SkillManager::new); +public final class SkillManager { - private SkillManager() { - super(ArsMagicaAPI.MOD_ID, "am_skills", Skill.CODEC, Skill.NETWORK_CODEC, SkillManager::validateSkills, LoggerFactory.getLogger(SkillManager.class)); - subscribeAsSyncable(ArsMagicaLegacy.NETWORK_HANDLER); - } - - /** - * @return The only instance of this class. - */ - public static SkillManager instance() { - return INSTANCE.get(); - } - - private static void validateSkills(Map data, Logger logger) { - data.forEach((id, skill) -> ((Skill) skill).setId(id)); + private static void validateSkills(Map data, Logger logger) { data.values().removeIf(skill -> { boolean err = false; - if (!data.keySet().containsAll(skill.getParents())) { - logger.warn("Skill {} is missing parents {}. It will be removed!", skill.getId(), new HashSet<>(skill.getParents()).removeAll(data.keySet())); + if (!data.keySet().containsAll(skill.parents())) { + logger.warn("Skill {} is missing parents {}. It will be removed!", skill.getId(), new HashSet<>(skill.parents()).removeAll(data.keySet())); err = true; } - Optional tabOpt = ArsMagicaAPI.get().getOcculusTabManager().getOptional(skill.getOcculusTab()); - if (tabOpt.isEmpty()) { - logger.warn("The occulus tab {} for skill {} is not available. The skill will be removed!", skill.getOcculusTab(), skill.getId()); + OcculusTab tab = RegistryAccess.BUILTIN.get().registryOrThrow(OcculusTab.REGISTRY_KEY).get(skill.occulusTab()); + if (tab == null) { + logger.warn("The occulus tab {} for skill {} is not available. The skill will be removed!", skill.occulusTab(), skill.getId()); return true; } - IOcculusTab tab = tabOpt.get(); - if (skill.getY() < 0 || skill.getY() > (tab.getHeight() - 32) || skill.getX() < 0 || skill.getX() > (tab.getWidth() - 32)) { + if (skill.y() < 0 || skill.y() > (tab.height() - 32) || skill.x() < 0 || skill.x() > (tab.width() - 32)) { logger.warn("Skill {} is outside the bounds of the skill tree. It will be removed!", skill.getId()); err = true; } return err; }); } - - @Override - public Set getSkillsForOcculusTab(ResourceLocation id) { - return values().stream().filter(skill -> id.equals(skill.getOcculusTab())).collect(Collectors.toSet()); - } - - @Override - public Set getSkillsForOcculusTab(IOcculusTab tab) { - return getSkillsForOcculusTab(tab.getId()); - } - - @Override - public Optional getOptional(@Nullable ResourceLocation id) { - return super.getOptional(id); - } - - @Nullable - @Override - public ISkill get(@Nullable ResourceLocation id) { - return super.get(id); - } - - @Override - public ISkill getOrThrow(@Nullable ResourceLocation id) { - return super.getOrThrow(id); - } - - @Override - public Collection getSkills() { - return values(); - } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillPoint.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillPoint.java deleted file mode 100644 index 538a663e1..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/skill/SkillPoint.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.skill; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; - -public record SkillPoint(int color, int minEarnLevel, int levelsForPoint) implements ISkillPoint {} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/PrefabSpellManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/PrefabSpellManager.java deleted file mode 100644 index 1539f84a5..000000000 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/PrefabSpellManager.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.github.minecraftschurlimods.arsmagicalegacy.common.spell; - -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.IPrefabSpell; -import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.IPrefabSpellManager; -import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; -import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; -import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; -import com.github.minecraftschurlimods.codeclib.CodecDataManager; -import com.github.minecraftschurlimods.codeclib.CodecHelper; -import com.google.gson.JsonElement; -import com.mojang.datafixers.util.Either; -import com.mojang.serialization.Codec; -import com.mojang.serialization.DataResult; -import com.mojang.serialization.JsonOps; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.util.Lazy; -import org.jetbrains.annotations.Nullable; -import org.slf4j.LoggerFactory; - -import java.util.Optional; -import java.util.function.Function; -import java.util.function.Supplier; - -public final class PrefabSpellManager extends CodecDataManager implements IPrefabSpellManager { - public static final CreativeModeTab ITEM_CATEGORY = new CreativeModeTab(ArsMagicaAPI.MOD_ID + ".prefab_spells") { - @Override - public ItemStack makeIcon() { - return AMItems.SPELL_PARCHMENT.map(ItemStack::new).orElse(ItemStack.EMPTY); - } - }; - - private static final Lazy INSTANCE = Lazy.concurrentOf(PrefabSpellManager::new); - - private PrefabSpellManager() { - super(ArsMagicaAPI.MOD_ID, "prefab_spells", PrefabSpell.CODEC, LoggerFactory.getLogger(PrefabSpellManager.class)); - } - - /** - * @return The only instance of this class. - */ - public static PrefabSpellManager instance() { - return INSTANCE.get(); - } - - @Override - public IPrefabSpell getOrDefault(@Nullable final ResourceLocation id, final Supplier defaultSupplier) { - return getOrDefault((Object) id, defaultSupplier); - } - - @Override - public Optional getOptional(@Nullable final ResourceLocation id) { - return getOptional((Object) id); - } - - public record PrefabSpell(Component name, ISpell spell, ResourceLocation icon) implements IPrefabSpell { - public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( - Codec.either(Codec.STRING, CodecHelper.COMPONENT).xmap(stringComponentEither -> stringComponentEither.mapLeft(Component::literal).map(Function.identity(), Function.identity()), Either::right).optionalFieldOf("name", Component.translatable(TranslationConstants.SPELL_PREFAB_NAME)).forGetter(IPrefabSpell::name), - ISpell.CODEC.fieldOf("spell").forGetter(IPrefabSpell::spell), - ResourceLocation.CODEC.fieldOf("icon").forGetter(IPrefabSpell::icon) - ).apply(inst, PrefabSpell::new)); - - @Override - public DataResult getEncodedSpell() { - return CODEC.encodeStart(JsonOps.INSTANCE, this); - } - - @Override - public ItemStack makeSpell() { - ItemStack stack = new ItemStack(AMItems.SPELL.get()); - SpellItem.saveSpell(stack, spell()); - stack.setHoverName(name()); - SpellItem.setSpellIcon(stack, icon()); - return stack; - } - } -} diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/Spell.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/Spell.java index 68d2aaadf..653d910f7 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/Spell.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/Spell.java @@ -1,9 +1,10 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.spell; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.event.AffinityChangingEvent; import com.github.minecraftschurlimods.arsmagicalegacy.api.event.SpellEvent; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellDataManager; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellIngredient; @@ -17,7 +18,6 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMAffinities; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMItems; import com.github.minecraftschurlimods.arsmagicalegacy.common.init.AMMobEffects; -import com.github.minecraftschurlimods.arsmagicalegacy.common.skill.SkillManager; import com.github.minecraftschurlimods.arsmagicalegacy.server.AMPermissions; import com.mojang.datafixers.util.Either; import com.mojang.datafixers.util.Pair; @@ -147,11 +147,11 @@ public SpellCastResult cast(LivingEntity caster, Level level, int castingTicks, } MinecraftForge.EVENT_BUS.post(new SpellEvent.Cast.Post(caster, this)); if (awardXp && result.isSuccess() && caster instanceof Player player) { - boolean affinityGains = api.getSkillHelper().knows(player, AFFINITY_GAINS) && SkillManager.instance().containsKey(AFFINITY_GAINS); + boolean affinityGains = api.getSkillHelper().knows(player, AFFINITY_GAINS) && level.registryAccess().registryOrThrow(Skill.REGISTRY_KEY).containsKey(AFFINITY_GAINS); boolean continuous = isContinuous(); - Map affinityShifts = affinityShifts(); - for (Map.Entry entry : affinityShifts.entrySet()) { - IAffinity affinity = entry.getKey(); + Map affinityShifts = affinityShifts(); + for (Map.Entry entry : affinityShifts.entrySet()) { + Affinity affinity = entry.getKey(); Double shift = entry.getValue(); if (continuous) { shift /= 4; @@ -274,7 +274,7 @@ public List recipe() { } @Override - public Map affinityShifts() { + public Map affinityShifts() { return partsWithModifiers() .stream() .map(Pair::getFirst) @@ -287,7 +287,7 @@ public Map affinityShifts() { } @Override - public Set affinities() { + public Set affinities() { return partsWithModifiers().stream() .map(Pair::getFirst) .map(ArsMagicaAPI.get().getSpellDataManager()::getDataForPart) @@ -299,7 +299,7 @@ public Set affinities() { } @Override - public IAffinity primaryAffinity() { + public Affinity primaryAffinity() { return affinityShifts().entrySet() .stream() .max(Map.Entry.comparingByValue()) diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellDataManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellDataManager.java index 9688cc6ad..c9323ed90 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellDataManager.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellDataManager.java @@ -3,7 +3,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.ArsMagicaLegacy; import com.github.minecraftschurlimods.arsmagicalegacy.Config; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.client.ISpellIngredientRenderer; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellDataManager; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellIngredient; @@ -79,7 +79,7 @@ public Codec getSpellIngredientNetworkCodec(ResourceLocation t return NETWORK_CODECS.containsKey(type) ? (Codec) NETWORK_CODECS.get(type) : getSpellIngredientCodec(type); } - private record SpellPartData(List recipe, Map affinityShifts, List> reagents, float manaCost, Supplier burnout) implements ISpellPartData { + private record SpellPartData(List recipe, Map affinityShifts, List> reagents, float manaCost, Supplier burnout) implements ISpellPartData { public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( ISpellIngredient.CODEC.listOf().fieldOf("recipe").forGetter(ISpellPartData::recipe), Codec.unboundedMap(CodecHelper.forRegistry(ArsMagicaAPI.get()::getAffinityRegistry), Codec.FLOAT).fieldOf("affinities").forGetter(ISpellPartData::affinityShifts), @@ -96,7 +96,7 @@ private record SpellPartData(List recipe, Map new SpellPartData(recipe, affinities, reagents, manaCost, burnout.>map(v -> (() -> v)).orElse(() -> (float) (manaCost * Config.SERVER.BURNOUT_RATIO.get()))))); @Override - public Set affinities() { + public Set affinities() { return affinityShifts().keySet(); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellHelper.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellHelper.java index 956fd2073..cfc3bd719 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellHelper.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellHelper.java @@ -3,13 +3,13 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellComponent; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellHelper; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellModifier; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPart; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPartStat; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellPartStatModifier; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellShape; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellCastResult; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; import com.mojang.datafixers.util.Either; import com.mojang.datafixers.util.Pair; import net.minecraft.util.Mth; @@ -186,8 +186,8 @@ public SpellCastResult invoke(ISpell spell, LivingEntity caster, Level level, @N @Override public void nextShapeGroup(ItemStack stack) { - ISpell spell = SpellItem.getSpell(stack); + ISpell spell = ISpellItem.getSpell(stack); spell.currentShapeGroupIndex((byte) ((spell.currentShapeGroupIndex() + 1) % spell.shapeGroups().size())); - SpellItem.saveSpell(stack, spell); + ISpellItem.saveSpell(stack, spell); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellTransformationManager.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellTransformationManager.java index a43027aa3..a2b8b4aac 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellTransformationManager.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/SpellTransformationManager.java @@ -1,25 +1,18 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.spell; -import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellTransformationManager; -import com.github.minecraftschurlimods.codeclib.CodecDataManager; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellTransformation; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; import net.minecraftforge.common.util.Lazy; -import org.slf4j.LoggerFactory; import java.util.Optional; -public final class SpellTransformationManager extends CodecDataManager implements ISpellTransformationManager { +public final class SpellTransformationManager implements ISpellTransformationManager { private static final Lazy INSTANCE = Lazy.concurrentOf(SpellTransformationManager::new); - private SpellTransformationManager() { - super(ArsMagicaAPI.MOD_ID, "spell_transformations", SpellTransformation.CODEC, LoggerFactory.getLogger(SpellDataManager.class)); - } + private SpellTransformationManager() {} /** * @return The only instance of this class. @@ -31,14 +24,6 @@ public static SpellTransformationManager instance() { @Override public Optional getTransformationFor(BlockState block, Level level, ResourceLocation spellPart) { if (level.isClientSide()) return Optional.empty(); - return values().stream().filter(spellTransformation -> spellTransformation.spellPart.equals(spellPart) && spellTransformation.from().test(block, level.random)).findFirst().map(SpellTransformation::to); - } - - public record SpellTransformation(RuleTest from, BlockState to, ResourceLocation spellPart) { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - RuleTest.CODEC.fieldOf("from").forGetter(SpellTransformation::from), - BlockState.CODEC.fieldOf("to").forGetter(SpellTransformation::to), - ResourceLocation.CODEC.fieldOf("spell_part").forGetter(SpellTransformation::spellPart) - ).apply(instance, SpellTransformation::new)); + return level.registryAccess().registryOrThrow(SpellTransformation.REGISTRY_KEY).stream().filter(spellTransformation -> spellTransformation.spellPart().equals(spellPart) && spellTransformation.from().test(block, level.random)).findFirst().map(SpellTransformation::to); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/component/Drought.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/component/Drought.java index fb60e1f56..e8c5001d1 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/component/Drought.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/component/Drought.java @@ -4,9 +4,7 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellModifier; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellCastResult; -import net.minecraft.Util; import net.minecraft.core.BlockPos; -import net.minecraft.tags.BlockTags; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -15,9 +13,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; public class Drought extends AbstractComponent { diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/shape/Projectile.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/shape/Projectile.java index cf8fdcdf2..b41b23a07 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/shape/Projectile.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/spell/shape/Projectile.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.spell.shape; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellModifier; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.SpellCastResult; @@ -39,7 +39,7 @@ public SpellCastResult invoke(ISpell spell, LivingEntity caster, Level level, Li projectile.setPierces((int) helper.getModifiedStat(0, SpellPartStats.PIERCING, modifiers, spell, caster, hit)); projectile.setGravity(helper.getModifiedStat(0, SpellPartStats.GRAVITY, modifiers, spell, caster, hit) * 0.025f); projectile.setSpeed(helper.getModifiedStat(0.2f, SpellPartStats.SPEED, modifiers, spell, caster, hit)); - IAffinity affinity = spell.primaryAffinity(); + Affinity affinity = spell.primaryAffinity(); projectile.setIcon(affinity == AMAffinities.NONE.get() ? new ItemStack(AMItems.BLANK_RUNE.get()) : api.getAffinityHelper().getEssenceForAffinity(affinity)); projectile.setSpell(spell); level.addFreshEntity(projectile); diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/AMUtil.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/AMUtil.java index 7e126d108..b009acd66 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/AMUtil.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/AMUtil.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.common.util; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpell; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ComponentContents; @@ -119,9 +119,9 @@ public static HitResult getHitResult(Vec3 from, Vec3 to, Entity entity, ClipCont */ public static ItemStack getSpellStack(LivingEntity entity) { ItemStack stack = entity.getMainHandItem(); - if (SpellItem.getSpell(stack) != ISpell.EMPTY) return stack; + if (ISpellItem.getSpell(stack) != ISpell.EMPTY) return stack; stack = entity.getOffhandItem(); - return SpellItem.getSpell(stack) != ISpell.EMPTY ? stack : ItemStack.EMPTY; + return ISpellItem.getSpell(stack) != ISpell.EMPTY ? stack : ItemStack.EMPTY; } /** diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/TranslationConstants.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/TranslationConstants.java index d55afd4e9..4214332e0 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/TranslationConstants.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/common/util/TranslationConstants.java @@ -11,7 +11,6 @@ public interface TranslationConstants { String SPELL_INVALID = "item." + ArsMagicaAPI.MOD_ID + ".spell.invalid"; String SPELL_INVALID_DESCRIPTION = "item." + ArsMagicaAPI.MOD_ID + ".spell.invalid.description"; String SPELL_MANA_COST = "item." + ArsMagicaAPI.MOD_ID + ".spell.mana_cost"; - String SPELL_PREFAB_NAME = "item." + ArsMagicaAPI.MOD_ID + ".spell.prefab.name"; String SPELL_REAGENTS = "item." + ArsMagicaAPI.MOD_ID + ".spell.reagents"; String SPELL_RECIPE_TITLE = "item." + ArsMagicaAPI.MOD_ID + ".spell_recipe.title"; String SPELL_UNKNOWN = "item." + ArsMagicaAPI.MOD_ID + ".spell.unknown"; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/jei/JEICompat.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/jei/JEICompat.java index b1555720f..95845d6e4 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/jei/JEICompat.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/jei/JEICompat.java @@ -4,7 +4,8 @@ import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinityItem; import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPointItem; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.IPrefabSpell; -import com.github.minecraftschurlimods.arsmagicalegacy.common.spell.PrefabSpellManager; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.PrefabSpell; +import com.github.minecraftschurlimods.arsmagicalegacy.client.ClientHelper; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.constants.VanillaTypes; @@ -38,10 +39,13 @@ public void registerItemSubtypes(ISubtypeRegistration registration) { @Override public void onRuntimeAvailable(IJeiRuntime jeiRuntime) { - jeiRuntime.getIngredientManager().addIngredientsAtRuntime(VanillaTypes.ITEM_STACK, PrefabSpellManager.instance().values() - .stream() - .map(IPrefabSpell::makeSpell) - .toList()); + jeiRuntime.getIngredientManager().addIngredientsAtRuntime( + VanillaTypes.ITEM_STACK, + ClientHelper.getRegistryAccess() + .registryOrThrow(PrefabSpell.REGISTRY_KEY) + .stream() + .map(IPrefabSpell::makeSpell) + .toList()); } public static class AffinitySubtypeInterpreter implements IIngredientSubtypeInterpreter { diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/CapStateMatcher.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/CapStateMatcher.java index 897000b76..01569bfd1 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/CapStateMatcher.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/CapStateMatcher.java @@ -1,8 +1,9 @@ package com.github.minecraftschurlimods.arsmagicalegacy.compat.patchouli; import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarCapMaterial; -import com.github.minecraftschurlimods.arsmagicalegacy.common.block.altar.AltarMaterialManager; import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -13,12 +14,13 @@ class CapStateMatcher implements IStateMatcher { private final TriPredicate predicate; CapStateMatcher() { - this.predicate = (blockGetter, blockPos, state) -> AltarMaterialManager.instance().getCapMaterial(state.getBlock()).map(AltarCapMaterial::cap).filter(state::is).isPresent(); + this.predicate = (blockGetter, blockPos, state) -> RegistryAccess.BUILTIN.get().registryOrThrow(AltarCapMaterial.REGISTRY_KEY).stream().anyMatch(mat -> state.is(mat.cap())); } @Override public BlockState getDisplayedState(long ticks) { - AltarCapMaterial mat = AltarMaterialManager.instance().getRandomCapMaterial(Math.toIntExact(ticks / 20)); + Registry registry = RegistryAccess.BUILTIN.get().registryOrThrow(AltarCapMaterial.REGISTRY_KEY); + AltarCapMaterial mat = registry.stream().toArray(AltarCapMaterial[]::new)[Math.toIntExact(ticks / 20) % registry.size()]; if (mat == null) return Blocks.AIR.defaultBlockState(); return mat.cap().defaultBlockState(); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/MainBlockStateMatcher.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/MainBlockStateMatcher.java index 405e9134a..df33fd4e7 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/MainBlockStateMatcher.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/MainBlockStateMatcher.java @@ -1,8 +1,9 @@ package com.github.minecraftschurlimods.arsmagicalegacy.compat.patchouli; import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarStructureMaterial; -import com.github.minecraftschurlimods.arsmagicalegacy.common.block.altar.AltarMaterialManager; import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -13,12 +14,13 @@ class MainBlockStateMatcher implements IStateMatcher { private final TriPredicate predicate; MainBlockStateMatcher() { - this.predicate = (blockGetter, blockPos, state) -> AltarMaterialManager.instance().getStructureMaterial(state.getBlock()).map(AltarStructureMaterial::block).filter(state::is).isPresent(); + this.predicate = (blockGetter, blockPos, state) -> RegistryAccess.BUILTIN.get().registryOrThrow(AltarStructureMaterial.REGISTRY_KEY).stream().anyMatch(mat -> state.is(mat.block())); } @Override public BlockState getDisplayedState(long ticks) { - AltarStructureMaterial mat = AltarMaterialManager.instance().getRandomStructureMaterial(Math.toIntExact(ticks / 20)); + Registry registry = RegistryAccess.BUILTIN.get().registryOrThrow(AltarStructureMaterial.REGISTRY_KEY); + AltarStructureMaterial mat = registry.stream().toArray(AltarStructureMaterial[]::new)[Math.toIntExact(ticks / 20) % registry.size()]; if (mat == null) return Blocks.AIR.defaultBlockState(); return mat.block().defaultBlockState(); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/SpellPartPage.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/SpellPartPage.java index 619f139d5..ed4910c9e 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/SpellPartPage.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/SpellPartPage.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.compat.patchouli; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkill; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellComponent; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellIngredient; import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellModifier; @@ -14,10 +14,13 @@ import com.github.minecraftschurlimods.arsmagicalegacy.common.util.TranslationConstants; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import vazkii.patchouli.api.IComponentRenderContext; @@ -54,7 +57,7 @@ public void render(PoseStack poseStack, IComponentRenderContext context, float p renderRecipe(poseStack, context, cx, cy, mouseX, mouseY); RenderSystem.enableBlend(); ResourceLocation registryName = this._part.getId(); - ISkill skill = ArsMagicaAPI.get().getSkillManager().get(registryName); + Skill skill = Minecraft.getInstance().level.registryAccess().registryOrThrow(Skill.REGISTRY_KEY).get(registryName); TextureAtlasSprite sprite = SkillIconAtlas.instance().getSprite(skill.getId()); RenderSystem.setShaderTexture(0, SkillIconAtlas.SKILL_ICON_ATLAS); RenderSystem.setShaderFogColor(1, 1, 1, 1); @@ -127,10 +130,12 @@ private void renderModifiers(PoseStack stack, IComponentRenderContext context, i int startX = 0; int yOffset = -6; RenderSystem.setShaderTexture(0, SkillIconAtlas.SKILL_ICON_ATLAS); + Registry skillRegistry = RegistryAccess.BUILTIN.get().registryOrThrow(Skill.REGISTRY_KEY); for (int i = 0; i < modifiers.size(); i++) { ISpellModifier modifier = modifiers.get(i); ResourceLocation registryName = modifier.getId(); - ISkill skill = ArsMagicaAPI.get().getSkillManager().get(registryName); + Skill skill = skillRegistry.get(registryName); + if (skill == null) continue; if (i % 7 == 0) { startX = (114 / 2) - ((Math.min(7, modifiers.size() - i) * 16) / 2); yOffset += 16; diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/StairBlockStateMatcher.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/StairBlockStateMatcher.java index 32ba7dba5..314839bae 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/StairBlockStateMatcher.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/compat/patchouli/StairBlockStateMatcher.java @@ -1,9 +1,10 @@ package com.github.minecraftschurlimods.arsmagicalegacy.compat.patchouli; import com.github.minecraftschurlimods.arsmagicalegacy.api.altar.AltarStructureMaterial; -import com.github.minecraftschurlimods.arsmagicalegacy.common.block.altar.AltarMaterialManager; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.StairBlock; @@ -20,12 +21,13 @@ class StairBlockStateMatcher implements IStateMatcher { public StairBlockStateMatcher(Direction direction, Half half) { this.direction = direction; this.half = half; - this.predicate = (blockGetter, blockPos, state) -> AltarMaterialManager.instance().getStructureMaterial(state.getBlock()).map(AltarStructureMaterial::stair).filter(state::is).isPresent() && state.getValue(StairBlock.FACING) == direction && state.getValue(StairBlock.HALF) == half; + this.predicate = (blockGetter, blockPos, state) -> RegistryAccess.BUILTIN.get().registryOrThrow(AltarStructureMaterial.REGISTRY_KEY).stream().anyMatch(mat -> state.is(mat.stair())) && state.getValue(StairBlock.FACING) == direction && state.getValue(StairBlock.HALF) == half; } @Override public BlockState getDisplayedState(long ticks) { - AltarStructureMaterial mat = AltarMaterialManager.instance().getRandomStructureMaterial(Math.toIntExact(ticks / 20)); + Registry registry = RegistryAccess.BUILTIN.get().registryOrThrow(AltarStructureMaterial.REGISTRY_KEY); + AltarStructureMaterial mat = registry.stream().toArray(AltarStructureMaterial[]::new)[Math.toIntExact(ticks / 20) % registry.size()]; if (mat == null) return Blocks.AIR.defaultBlockState(); return mat.stair().defaultBlockState().setValue(StairBlock.FACING, direction).setValue(StairBlock.HALF, half); } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/LearnSkillPacket.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/LearnSkillPacket.java index 7a18f2eff..ebba6f049 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/LearnSkillPacket.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/LearnSkillPacket.java @@ -1,6 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.network; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; import com.github.minecraftschurlimods.simplenetlib.IPacket; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; @@ -29,7 +30,7 @@ public void handle(NetworkEvent.Context ctx) { var api = ArsMagicaAPI.get(); var skillHelper = api.getSkillHelper(); ServerPlayer sender = ctx.getSender(); - api.getSkillManager().get(skill()).getCost().forEach((resourceLocation, integer) -> skillHelper.consumeSkillPoint(sender, resourceLocation, integer)); + sender.getLevel().registryAccess().registryOrThrow(Skill.REGISTRY_KEY).get(skill()).cost().forEach((resourceLocation, integer) -> skillHelper.consumeSkillPoint(sender, resourceLocation, integer)); skillHelper.learn(sender, skill()); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/SpellIconSelectPacket.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/SpellIconSelectPacket.java index e8be0b970..0ae1fa5a5 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/SpellIconSelectPacket.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/network/SpellIconSelectPacket.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.network; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.common.item.SpellItem; +import com.github.minecraftschurlimods.arsmagicalegacy.api.spell.ISpellItem; import com.github.minecraftschurlimods.simplenetlib.IPacket; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; @@ -36,8 +36,8 @@ public void handle(NetworkEvent.Context context) { if (item.isEmpty()) { item = sender.getOffhandItem(); } - SpellItem.setSpellIcon(item, icon()); - SpellItem.setSpellName(item, name()); + ISpellItem.setSpellIcon(item, icon()); + ISpellItem.setSpellName(item, name()); }); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/AffinityCommand.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/AffinityCommand.java index 02ed329bb..2a418cfe9 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/AffinityCommand.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/AffinityCommand.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.server.commands; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.IAffinity; +import com.github.minecraftschurlimods.arsmagicalegacy.api.affinity.Affinity; import com.github.minecraftschurlimods.arsmagicalegacy.api.event.AffinityChangingEvent; import com.github.minecraftschurlimods.arsmagicalegacy.server.AMPermissions; import com.mojang.brigadier.Command; @@ -84,7 +84,7 @@ private static int addAffinity(CommandContext context) throw return addAffinity(EntityArgument.getPlayers(context, "target"), getAffinityFromRegistry(context), context); } - private static int addAffinity(Collection players, IAffinity affinity, CommandContext context) { + private static int addAffinity(Collection players, Affinity affinity, CommandContext context) { double amount = DoubleArgumentType.getDouble(context, "amount"); var helper = ArsMagicaAPI.get().getAffinityHelper(); for (ServerPlayer player : players) { @@ -110,7 +110,7 @@ private static int setAffinity(CommandContext context) throw return setAffinity(EntityArgument.getPlayers(context, "target"), getAffinityFromRegistry(context), context); } - private static int setAffinity(Collection players, IAffinity affinity, CommandContext context) { + private static int setAffinity(Collection players, Affinity affinity, CommandContext context) { double amount = DoubleArgumentType.getDouble(context, "amount"); var helper = ArsMagicaAPI.get().getAffinityHelper(); for (ServerPlayer player : players) { @@ -139,7 +139,7 @@ private static int resetAffinities(CommandContext context) t private static int resetAffinities(Collection players, CommandContext context) { var api = ArsMagicaAPI.get(); for (ServerPlayer player : players) { - for (IAffinity affinity : api.getAffinityRegistry()) { + for (Affinity affinity : api.getAffinityRegistry()) { api.getAffinityHelper().setAffinityDepth(player, affinity, 0f); } } @@ -159,14 +159,14 @@ private static int getAffinity(CommandContext context) throw return getAffinity(EntityArgument.getPlayer(context, "target"), getAffinityFromRegistry(context), context); } - private static int getAffinity(ServerPlayer player, IAffinity affinity, CommandContext context) { + private static int getAffinity(ServerPlayer player, Affinity affinity, CommandContext context) { context.getSource().sendSuccess(Component.translatable(AFFINITY_GET, affinity.getDisplayName(), player.getDisplayName(), ArsMagicaAPI.get().getAffinityHelper().getAffinityDepth(player, affinity)), true); return Command.SINGLE_SUCCESS; } - private static IAffinity getAffinityFromRegistry(CommandContext context) throws CommandSyntaxException { + private static Affinity getAffinityFromRegistry(CommandContext context) throws CommandSyntaxException { ResourceLocation rl = ResourceLocationArgument.getId(context, "affinity"); - IAffinity affinity = ArsMagicaAPI.get().getAffinityRegistry().getValue(rl); + Affinity affinity = ArsMagicaAPI.get().getAffinityRegistry().getValue(rl); if (affinity == null) throw ERROR_UNKNOWN_AFFINITY.create(rl); return affinity; } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillCommand.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillCommand.java index f6d0a3028..eef155d2f 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillCommand.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillCommand.java @@ -1,8 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.server.commands; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkill; -import com.github.minecraftschurlimods.arsmagicalegacy.api.util.ITranslatable; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.Skill; import com.github.minecraftschurlimods.arsmagicalegacy.server.AMPermissions; import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; @@ -17,6 +16,7 @@ import net.minecraft.commands.SharedSuggestionProvider; import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.commands.arguments.ResourceLocationArgument; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -83,7 +83,7 @@ public static void register(LiteralArgumentBuilder builder) } private static int listAllSkills(CommandContext context) { - context.getSource().sendSuccess(createSkillListComponent(ArsMagicaAPI.get().getSkillManager().getSkills().stream()), true); + context.getSource().sendSuccess(createSkillListComponent(context.getSource().registryAccess().registryOrThrow(Skill.REGISTRY_KEY).stream(), context.getSource().registryAccess()), true); return Command.SINGLE_SUCCESS; } @@ -106,16 +106,18 @@ private static int listKnownSkills(CommandContext context) t private static int listUnknownSkills(ServerPlayer player, CommandContext context) { var api = ArsMagicaAPI.get(); var knowledgeHelper = api.getSkillHelper(); - var skillManager = api.getSkillManager(); - context.getSource().sendSuccess(createSkillListComponent(skillManager.getSkills().stream().filter(skill -> knowledgeHelper.knows(player, skill))), true); + var registryAccess = context.getSource().registryAccess(); + var skillRegistry = registryAccess.registryOrThrow(Skill.REGISTRY_KEY); + context.getSource().sendSuccess(createSkillListComponent(skillRegistry.stream().filter(skill -> knowledgeHelper.knows(player, skill, registryAccess)), registryAccess), true); return Command.SINGLE_SUCCESS; } private static int listKnownSkills(ServerPlayer player, CommandContext context) { var api = ArsMagicaAPI.get(); - var skillManager = api.getSkillManager(); + var registryAccess = context.getSource().registryAccess(); + var skillRegistry = registryAccess.registryOrThrow(Skill.REGISTRY_KEY); var knowledgeHelper = api.getSkillHelper(); - context.getSource().sendSuccess(createSkillListComponent(knowledgeHelper.getKnownSkills(player).stream().flatMap(skill -> skillManager.getOptional(skill).stream())), true); + context.getSource().sendSuccess(createSkillListComponent(knowledgeHelper.getKnownSkills(player).stream().flatMap(skill -> Optional.ofNullable(skillRegistry.get(skill)).stream()), registryAccess), true); return Command.SINGLE_SUCCESS; } @@ -149,16 +151,17 @@ private static int forgetSkill(CommandContext context) throw private static int forgetSkill(Collection players, CommandContext context) throws CommandSyntaxException { var helper = ArsMagicaAPI.get().getSkillHelper(); - ISkill skill = getSkillFromRegistry(context); + Skill skill = getSkillFromRegistry(context); + var registryAccess = context.getSource().registryAccess(); if (players.size() == 1) { ServerPlayer player = players.iterator().next(); - if (!helper.knows(player, skill)) { + if (!helper.knows(player, skill, registryAccess)) { context.getSource().sendFailure(Component.translatable(SKILL_NOT_YET_KNOWN, skill.getDisplayName(), player.getDisplayName())); return 0; } } for (ServerPlayer player : players) { - helper.forget(player, skill); + helper.forget(player, skill, registryAccess); } if (players.size() == 1) { context.getSource().sendSuccess(Component.translatable(SKILL_FORGET_SINGLE, skill.getDisplayName(), players.iterator().next().getDisplayName()), true); @@ -178,7 +181,7 @@ private static int learnAllSkills(CommandContext context) th private static int learnAllSkills(Collection players, CommandContext context) { for (ServerPlayer player : players) { - ArsMagicaAPI.get().getSkillHelper().learnAll(player); + ArsMagicaAPI.get().getSkillHelper().learnAll(player, context.getSource().registryAccess()); } if (players.size() == 1) { context.getSource().sendSuccess(Component.translatable(SKILL_LEARN_ALL_SINGLE, players.iterator().next().getDisplayName()), true); @@ -198,16 +201,17 @@ private static int learnSkill(CommandContext context) throws private static int learnSkill(Collection players, CommandContext context) throws CommandSyntaxException { var helper = ArsMagicaAPI.get().getSkillHelper(); - ISkill skill = getSkillFromRegistry(context); + Skill skill = getSkillFromRegistry(context); + var registryAccess = context.getSource().registryAccess(); if (players.size() == 1) { ServerPlayer player = players.iterator().next(); - if (helper.knows(player, skill)) { + if (helper.knows(player, skill, registryAccess)) { context.getSource().sendFailure(Component.translatable(SKILL_ALREADY_KNOWN, skill.getDisplayName(), player.getDisplayName())); return 0; } } for (ServerPlayer player : players) { - helper.learn(player, skill); + helper.learn(player, skill, registryAccess); } if (players.size() == 1) { context.getSource().sendSuccess(Component.translatable(SKILL_LEARN_SINGLE, skill.getDisplayName(), players.iterator().next().getDisplayName()), true); @@ -217,18 +221,18 @@ private static int learnSkill(Collection players, CommandContext context) throws CommandSyntaxException { + private static Skill getSkillFromRegistry(CommandContext context) throws CommandSyntaxException { ResourceLocation rl = ResourceLocationArgument.getId(context, "skill"); - Optional skill = ArsMagicaAPI.get().getSkillManager().getOptional(rl); + Optional skill = Optional.ofNullable(context.getSource().registryAccess().registryOrThrow(Skill.REGISTRY_KEY).get(rl)); if (skill.isEmpty()) throw ERROR_UNKNOWN_SKILL.create(rl); return skill.get(); } private static CompletableFuture suggestSkills(CommandContext context, SuggestionsBuilder builder) { - return SharedSuggestionProvider.suggestResource(ArsMagicaAPI.get().getSkillManager().getSkills().stream().map(ISkill::getId), builder); + return SharedSuggestionProvider.suggestResource(context.getSource().registryAccess().registryOrThrow(Skill.REGISTRY_KEY).stream().map(Skill::getId), builder); } - private static Component createSkillListComponent(Stream stream) { - return stream.map(ITranslatable::getDisplayName).reduce((component, component2) -> component.copy().append("\n").append(component2)).orElse(Component.translatable("")); + private static Component createSkillListComponent(Stream stream, RegistryAccess registryAccess) { + return stream.map(skill -> skill.getDisplayName(registryAccess)).reduce((component, component2) -> component.copy().append("\n").append(component2)).orElse(Component.translatable("")); } } diff --git a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillPointCommand.java b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillPointCommand.java index 0806b6ff5..13502e58d 100644 --- a/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillPointCommand.java +++ b/src/main/java/com/github/minecraftschurlimods/arsmagicalegacy/server/commands/SkillPointCommand.java @@ -1,7 +1,7 @@ package com.github.minecraftschurlimods.arsmagicalegacy.server.commands; import com.github.minecraftschurlimods.arsmagicalegacy.api.ArsMagicaAPI; -import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.ISkillPoint; +import com.github.minecraftschurlimods.arsmagicalegacy.api.skill.SkillPoint; import com.github.minecraftschurlimods.arsmagicalegacy.server.AMPermissions; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; @@ -103,7 +103,7 @@ private static int addSkillPoint(CommandContext context) thr return addSkillPoint(EntityArgument.getPlayers(context, "target"), getSkillPointFromRegistry(context), context, IntegerArgumentType.getInteger(context, "amount")); } - private static int addSkillPoint(Collection players, ISkillPoint skillPoint, CommandContext context, int amount) { + private static int addSkillPoint(Collection players, SkillPoint skillPoint, CommandContext context, int amount) { for (ServerPlayer player : players) { ArsMagicaAPI.get().getSkillHelper().addSkillPoint(player, skillPoint, amount); } @@ -131,7 +131,7 @@ private static int consumeSkillPoint(CommandContext context) return consumeSkillPoint(EntityArgument.getPlayers(context, "target"), getSkillPointFromRegistry(context), context, IntegerArgumentType.getInteger(context, "amount")); } - private static int consumeSkillPoint(Collection players, ISkillPoint skillPoint, CommandContext context, int amount) { + private static int consumeSkillPoint(Collection players, SkillPoint skillPoint, CommandContext context, int amount) { var helper = ArsMagicaAPI.get().getSkillHelper(); for (ServerPlayer player : players) { helper.consumeSkillPoint(player, skillPoint, Math.min(amount, helper.getSkillPoint(player, skillPoint))); @@ -152,7 +152,7 @@ private static int setSkillPoint(CommandContext context) thr return setSkillPoint(EntityArgument.getPlayers(context, "target"), getSkillPointFromRegistry(context), context); } - private static int setSkillPoint(Collection players, ISkillPoint skillPoint, CommandContext context) { + private static int setSkillPoint(Collection players, SkillPoint skillPoint, CommandContext context) { var helper = ArsMagicaAPI.get().getSkillHelper(); int amount = IntegerArgumentType.getInteger(context, "amount"); for (ServerPlayer player : players) { @@ -183,7 +183,7 @@ private static int clearSkillPoints(Collection players, CommandCon var helper = api.getSkillHelper(); var registry = api.getSkillPointRegistry(); for (ServerPlayer player : players) { - for (ISkillPoint skillPoint : registry) { + for (SkillPoint skillPoint : registry) { helper.consumeSkillPoint(player, skillPoint, helper.getSkillPoint(player, skillPoint)); } } @@ -203,16 +203,16 @@ private static int getSkillPoint(CommandContext context) thr return getSkillPoint(EntityArgument.getPlayers(context, "target"), getSkillPointFromRegistry(context), context); } - private static int getSkillPoint(Collection players, ISkillPoint skillPoint, CommandContext context) { + private static int getSkillPoint(Collection players, SkillPoint skillPoint, CommandContext context) { for (ServerPlayer player : players) { context.getSource().sendSuccess(Component.translatable(SKILL_POINT_GET, player.getDisplayName(), ArsMagicaAPI.get().getSkillHelper().getSkillPoint(player, skillPoint), skillPoint.getDisplayName()), true); } return players.size(); } - private static ISkillPoint getSkillPointFromRegistry(CommandContext context) throws CommandSyntaxException { + private static SkillPoint getSkillPointFromRegistry(CommandContext context) throws CommandSyntaxException { ResourceLocation rl = ResourceLocationArgument.getId(context, "skill_point"); - ISkillPoint skillPoint = ArsMagicaAPI.get().getSkillPointRegistry().getValue(rl); + SkillPoint skillPoint = ArsMagicaAPI.get().getSkillPointRegistry().getValue(rl); if (skillPoint == null) throw ERROR_UNKNOWN_SKILL_POINT.create(rl); return skillPoint; } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 0050e2500..6d251737c 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,2 +1 @@ protected net.minecraft.world.entity.monster.Creeper m_32315_()V # explodeCreeper -protected net.minecraft.data.recipes.RecipeProvider m_206406_(Lnet/minecraft/tags/TagKey;)Lnet/minecraft/advancements/critereon/InventoryChangeTrigger$TriggerInstance; # has diff --git a/src/main/resources/assets/arsmagicalegacy/blockstates/inscription_table.json b/src/main/resources/assets/arsmagicalegacy/blockstates/inscription_table.json deleted file mode 100644 index 1772a44f5..000000000 --- a/src/main/resources/assets/arsmagicalegacy/blockstates/inscription_table.json +++ /dev/null @@ -1,601 +0,0 @@ -{ - "multipart": [ - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "facing": "west" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left", - "y": 90 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "facing": "west" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right", - "y": 90 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 1 - }, - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "west" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right1", - "y": 90 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "west" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left2", - "y": 90 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "west" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right2", - "y": 90 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "tier": 3 - }, - { - "facing": "west" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left3", - "y": 90 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "tier": 3 - }, - { - "facing": "west" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right3", - "y": 90 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "facing": "east" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left", - "y": 270 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "facing": "east" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right", - "y": 270 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 1 - }, - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "east" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right1", - "y": 270 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "east" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left2", - "y": 270 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "east" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right2", - "y": 270 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "tier": 3 - }, - { - "facing": "east" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left3", - "y": 270 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "tier": 3 - }, - { - "facing": "east" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right3", - "y": 270 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "facing": "south" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left" - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "facing": "south" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right" - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 1 - }, - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "south" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right1" - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "south" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left2" - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "south" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right2" - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "tier": 3 - }, - { - "facing": "south" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left3" - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "tier": 3 - }, - { - "facing": "south" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right3" - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "facing": "north" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left", - "y": 180 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "facing": "north" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right", - "y": 180 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 1 - }, - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "north" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right1", - "y": 180 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "north" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left2", - "y": 180 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "OR": [ - { - "tier": 2 - }, - { - "tier": 3 - } - ] - }, - { - "facing": "north" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right2", - "y": 180 - } - }, - { - "when": { - "AND": [ - { - "half": "left" - }, - { - "tier": 3 - }, - { - "facing": "north" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_left3", - "y": 180 - } - }, - { - "when": { - "AND": [ - { - "half": "right" - }, - { - "tier": 3 - }, - { - "facing": "north" - } - ] - }, - "apply": { - "model": "arsmagicalegacy:block/inscription_table_right3", - "y": 180 - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_left2.json b/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_left2.json index 4a5a15009..ea020f0ee 100644 --- a/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_left2.json +++ b/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_left2.json @@ -1,5 +1,6 @@ { "parent": "block/block", + "render_type": "minecraft:cutout", "textures": { "book_3": "arsmagicalegacy:block/inscription_table_book_3", "book_4": "arsmagicalegacy:block/inscription_table_book_4", @@ -289,4 +290,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_right2.json b/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_right2.json index 37c40675a..c1f5e095f 100644 --- a/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_right2.json +++ b/src/main/resources/assets/arsmagicalegacy/models/block/inscription_table_right2.json @@ -1,5 +1,6 @@ { "parent": "block/block", + "render_type": "minecraft:cutout", "textures": { "cloth": "arsmagicalegacy:block/inscription_table_cloth" }, @@ -141,4 +142,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_flowing.png b/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_flowing.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ebd33118347a6ad53e5934c032c1a6fc57027c GIT binary patch literal 11915 zcmZ9ybzIZ$-#rcv89k8E4Wm0ma=@g!1f;v9LnhKGAu&3nq&o!#r5uQWNC+Z5VjvCD z^_}m}`*Yv-@At=E*Y$YSW833g=Q_`Go^iU`D#Qe|1Xx&D#A>RF`k0X!3kwGe4;M2F z%P||r3^aa9CVmE zeCX5=4$LCh_izMR%St@_^^DJ^zWJSLj{V$8svDh?*`cbP4cWT={AoXXbaKaU#!#&c zp?G-j-j|VA^Ae1EIoPjCRRh&@pWGke(w8q#bTpsWffsl&T`xV_z4Peu4!szkIv(h# zo5=3VwS7u+CU@tYlqj5rUd+EO3>6(TV>5^v+dMh#>$p2nIlky-%(El@gmZq;RP|Aq zgsF7}L{8$`FL*m?!ME!4ZLn}{y%lcuV_<}GpzRu)q-W{evtQ+nRd&4GcG9zcZo$N= zHu%fNX9P}{ywBFuINcXP3jjJdDQZ@|x$z$Lde*>Y5iLh7gNyy)Y33um9-0rQ6! zB8xe=$%I}Vm*8xY^meCm+9*0dB3Jv?=$Wn(xhHTs)4{irniGCU0q3=rF-iH_i6`## z<`P4D5{${vA1MA9bk^CZ#7Eb8J(`W9ds@>2JHx5Kr2W{nxKE$QqDylQauab8oV3KO4Vmp#Z^sW9XJ^{G0Gyc-p+H zGgf%p;8&;l+Cr}9>f?S|_e`e;?ta*brjAw3_Eoy}DV)6<(M@RAxW$?T+?Y^$7rFTp zyZ+jpNOX0Y@2RKFcS;^v!-e}YEMA_+XaMy(Ovk!M(PyLfgltmRA0It@97L8&3JjuL z{D2)2#9&F3T4PRMCj#^C1759s&4Z8oJFAZ!Q_IQhtC)8Ae>+b*cyVB2iJM5Bv7|Zj z2de$x_7ffnaPV6{6@Rdk_iIYeLdNXFV{%atE&y2Dsd@Iog``@@mX`_moi%7Wlm zOjbLA6MBFW3*-tBEr2xDN=TMd=hk;bft(L04c6VJr72h_oCm7g(G0WBL3fh4-ISgI zkyJGZN4q8MM=ZD3QTR%Y7s?(alYF{$Ih1!KOexq=w+}*-u%GA1-Gz=VtpnPT-TlC6 z%k~Y-%n5qHaxUNL0u}lav|O+-1XIOl(|DM~MGMJ!Z#$UgnMapv5e=4Z2&T<&M-d>UFY z0s6?())tPR&ow5$K0BoJeGqkTRMf<*-#GQhj)gLpItSQPCg;ok;_2~^&oyPID^>!v z9u~ck@s~|oBXyG~{zW2^w;s76fv?QgxniX=upUpwTAg>OC$wA12$2us!lus}^{F8$ z14NOsXPyEm3QwI?r}LN8xKjz=Kbm$C2a9dgl!5yE)Qr#5jt_3#w4);Sc+O9n;LUgE zi-x8$FCM3;c~{9uNzX8zGbSd!^bx#=++0r5p(>w7@n6D71z5lnrNiY3Uhk{bUU5Qe zP@cq${L2CDOJxS)v=4w9${gwV_myRH$*r12f2{Hg@QkdlT;dP(_dK_;-HzHG>~&Cf zxQ6BGt9QwQx^}iX9go(E6iwEU zxULSwJsz48Z8FE*F_4S(My77#yC}k(B0z)l7 z0++f#p5cVIA1vd}`aL;s&F>L4E*#01XnCB{UM~m3ul@*K9`D7)Zc}B)$#KGj3u-Tq zv%+m$4jGtIKv)8S(}8tzcW3*f<_Tj#%*Wv)z!1uyq6IOg>>yoeqxVhE0KOWD?i!X7 zi7p1Q_-Y)Ge?fd04gl{XLpQOahp^-6i@yAQ*ouLPdOjEAM$xq8hC&L-zT+(aS*Yw8 z6KSKVyb{l1h}W$K2I^hWe)`D2ctkPoOhL|LM7aHN2`aW~tv~3DQhDjPW=oz1ztK4x z#r%QI-5lFdRg)Y85DD;zU6W<&BA~^F2A7P0zaV#QUa^XOoSQ@>Odbnoo$wy1#0q{c zk-?*{La%h44=F3D=&e=na~)moe##LjNn?YB)7*#kiZE0lBM~o1%NgT_}uBOq-(F+ew8AB z+%yG@C4pq5-WZKp0(IF-Vj2YDrJx38@E?brJ27~|qj9EZbSe5UY{nTf0-7P}o6i1& zPY-lrdwD71rbxOg%u1=sEc8+87M`wzZqCPiGgHg_)6UYpQMP0`t}tx)(;Ow9@iakr zU@~RiRI+JT^zWO)NbO9gHG-l1n6$??(-38x;-_I*Zsx79_nMcIdzWMqsj-#nky$c!MTPVG6OqsOM7k+)ACWD=wXwv!(^R5H5z#-Z% z8hZOmF7yTCjbwi8AJ4Bqv2zOO_xsd~t7F1t0;_<4UMFbEMGwctU%p;`Gz65o-Z%l! zu|hb=5g1(l1I{SO-}z6!uoBFN^*H>$=l_HFKqyv5zfv~OaL7kxCKTiVT^gieFXiMP z%2^B|NZn9|rW-t&@tx8UW&w z2Zxw@d%RVy^tjm~U21l2KZ!0L^?5rS;?=4251<+fbGMv0NQCC&zMOft-+9?Hx*k&M z53_SNkt&q%iJ_r9#ZnQy`+`?Lc1;ol6-ZL12)?Q|&+xUmz?R;`_C_a4QjJ%!96xZ- z2|riFi>6#6N1QI;8Fi4y&I=>_xY)tz<`8yBz-Kc8AspB^TT!sq_26pODR`QFkc}Y_`(Bs^awUJmpk=-3}w2sUY2OL9$8m2_WtB6xFs)+gBG{4k#VT zqwf7~7hB-n*izHHPq*L0eke3wvj7!Y|qDD6F~DP`rWP%$~~{rW>D)vH3Hij;sK`j^%!36p~N$Jl>HrCC>h z_gj&Mq)8=WyI^oBQ;?lK!&!4{uIWfEPa*Sb-tWc0rXt#=iRIQjVUV2sZg+dJaCjzLBX>7Fvw5oe1@6XQ(vpvWa z`=}C0c5(S-XT)w4Ki2#Kz)|dA)rl&&N}jktzxO(1N#>PCyJbmocyqE8XSgo?0^x|` zI5~0Y&2rV+-YX`;#c3G}q1Rddg(^6|3S;v4QWEgBNw%XQ928635(^B6fL^oH(I>2f zzF*j2>RAU%-NBCKu{K@0Uk6`$|N3G601pG7_6nzg(Z+9{C6I*Y%!;8}PIYOvdN8iv zi@#sD!XYA6-x`xZ?`UwN)q8OQE*w4RC%WW0AyKx_Wb^$X?JEN3sU@r>^H?4HxXwh~ zo|KUsa|BlgL$a!fXV}@y%1c7)DL4vNLW45ZyL132 z6z8V3Wcw2qQ}E!YVF1LaAv)ZSnzQ!~=M8;s&0#Vd6iTb)axPN*)Jj&!4s*jIt`2)t zM9O1IPPP>J=y=?fI{}}Y=`%^y_IIqs-%)kj)EOhD=2Mt8pEO{t|T-;`0Lh|xwr@mDZ{>NYve`7j6M77x-C9|dY|0JxdFDzx^; zBzs8P?Y*KNUrXMG$${#17$qe53m&{J#6~|5M-*nuH4@p1lgnZT zkU&B$&u-~`e>HJ2++IgNBILhShhmAu>$wRYqoJ3_o>rElK#%ybAnW5G>($F}O;r(= zp{TVP(ju=s65WpfGBbAk2ypr!QtLQe{Qn|dCjlfD*R0?c+^=52lr$Rjb66zB$u@k< zi+-LTn%3+cfXq@Ujth|xK9MR8vx?>AU+pzYCxtUjbV-%J^fv7Zb{hpd$VV+Shi{e! zs@h^(b-Nk)ep?B?o<>EdbWBCCH^A^zkb}#w?~bMt$I@t@)5=(2P4Pif=T@R^A1%oU zO9wGmQsfw17hUw(zJ2zbnDHcWo{7X(zs9=vm$=Ko#{)^eh1JKR;WwFr*9+k}MomJ9 zr~P?zDEEbgJk7@Ksdyn;5a0!tll)O`e;iG3*p7C8D_ttIG7Vj~vfzIBd>}sPsmnXP zY7N}@&FL&h0&gB-2@Wt}rswTK_=_Us-0HH(Shh--?kkHh(zX{_x{40=nqjJbW(nrnYJvC$PImc7(YXh+F^ z_q1@-VmeD?&KaH0xms*NN^ie#WQ#$ zeuB;#3BYJW5cMG%@ieVIP|Y{9E9?B&fz>ir&Po|t)You;UESf#=Br?BLr<^udrY`u zyc;zZ>SlD&V{wpmggrQ(=pU*Lcs857aTnym^B44ul_Lj+P2H#UkRTe5m5Tr1FNy7(betDCKMQuBay0lv@-f6T+JOi?GL6V{A%u--*^*ZP>tMLtBx-jm+uMs085Zq~8k(@> z`X1NBA+{c5kMUeIOIW!R+kL3A^_!QmQu!o??w5ZbQW|;u7P)$lzS^y=UdKL)j9`m{ z=Oj$EC-ZUU>ofT_uXRtyg{-Ord*yq@KgkJ|x!**LDO-{m{#HQbd6f*=E-uYJ>J%P& zjhBTHQJ=ba;giawTIYw9H`i~{Q2)A?YJHL7YFR`bReaxaS%>Ncb&PY6e^Zm2> z?srgosi5a|w;t?ca@7^F#;B4rBI{F{^<;?gx&^ zdpS+XPg{aaR9OoRXUwgog`~KWPI-a`qEnSkyC`4^hJiJY$|UsExw6$$Lqmn4-#o>L zDP%wtj$~Qa_OOBi{Ficct+bu`{lN#h)V0&zG3*t{tjc$|z@}%bM{4Ed=xkQl;qwgL z?;p|-^U>XH=goO41-yL1#U@h&B$2XmHIakToDbBZ`fz?fiJiPzHQvDbyWM5eqQ>az zzhbtK9SNPP;B;L3hY*XdYbnUzecq1@z$Zrv#*3`{un`brUK8 zdE2#OTjj;7&!v|j*zZ@A4Gl}%tv6smo-zowrHQ=j=;xm_>*hTOA>ME3Q-OMY_&pYx zL(lv!vUctOZA0)d-=9q5nFQStI^!Tb;LwqHzrN4x+*cxL+Mfj+zr>PaIJng6U@*ev zu5T9#O;DP8a;|ZKwZVnR@ApZS^L#6(l0s8XX@wPf`EK3 zN{<_5?$NG@IL*<}h+RGRosL!Z&5Iv1RquH}jeT7o3YKc(JNS_x75JXx_hS~MP>Xdx zmG@rfUUG##R%jyUt_Ezqk7yEO0 z6lwSuW155`g#2aGVl?U0FIpX9hTFs#1vWCgO=U<5&lj^AN^!_C`vJA&HMci2j+Yy? z(nitkYL59_A01)gcl$A9-*{q7BJ>B9qbmrpn$|KBs4&H2_prJuxc^>p znA{-MwWBRbW16~vd}MM0!KtZ)DjqTl8CRsomBJB>_u304pGaw?pQOM9#Bul<=VESM zlE8U3igO&;Lnx)TJD4l4+KkaQpL(Mo1uKcK>|4o}7+N->{ftrF6?$EJrC}u)NCeJy)o0g8+xoMOEtmxFucdl z^*`cYgz0?tINWD4sOU!RyeCMT1yf$8;dF1k#;bpx4pFnnUR-uQTn1$9ym}D2IAECM zH*vymDslLHmV5g(B?uaJZ|j5^Uqb!MDCKye-F^`f^;hXHw_OfQ4ZWexH$BV2z;tFX z-c#K#rF-In6ZKU+WdylU(bFq)DI+{3@;uY%v41prN|b%d@|+eaLcBK_O3C6Pjsbp7 z%72OfUzg?D4FHbR0&vB65v#~zH}(J zT^}GQ23baFg&VQ#5OoQOC57bd%t#w+NLKdQbgtBGrL#fQgV0IuS*a{!>rU8eSg52M zu3TEIS01#&N)fs!cb@l^3+m-y-$1gKP3DuV^w$xO9#`CLRn2C-dWD;uFWmGF@2&_W z?36kH1njVK_gQ!hvQoK9}zRhp-npm7w5rkV92VlpKfw&e^3&;=6qBkeus^O@@ebjDX>+7TH0M%M z#G`XvB3!>hW^mC|2e$o!DaYtb@E+|whg(;QMfC{QubBXB*V=~$*7Cc;vr%MZAGx~G z*%6Zb1$b)xOzNV=TMJ(C3V*JlO1e{7g-8jF^mH?c)r?Vnv0-)YLMyahUzA{$5% zTjxHo)M=T%+z{z+HvxD<76;6b+Y>$y!vl{WuZlbsxOADHz>Z2@MayLsMdDh;aI_Rq zB{jcW_3uj4j~K0O_|=-o_7m}3LRrD^FHxhU@yhanq0q;s4eYUoxh8yC*YAZ`h;Q|w zVPt{L_MuR8tLM&`g2?B>F}PJY?wuvH@uBGnT5#-TD9LaI(h~t{Exh+vY}xIA^wAPd)Sd08RGdQW;Ohe1Ah37Q1|ca<^Q>74d8BWYb+B$IFx;S%IEr6H`2QI z1{f*2B4f}P_EzX;EBp$b<+%76aqJ;xI#g-*VV;$lMvn>hfUzG3>#b!%d&5R=$dpAN z;#(r~N5W|1UzU}dxt1MK(tQlhhh;?h;>u!1`#t1!eda#yOlQS~%kY@3o=)CHST>}S zZGwz|gDu7(Gc$6_1F~35=_xztZvJ50^@7BaqHL#l(uYALaviEX?^*bV^&QT>XF_`c z;Tvz^+VHjAh$n!zsT`Rzd6NEBPQBIt2!AyXwKXC0B`aBRgJIW7q2TL$gO{q&lvAu1 zds^0#1qMU!^olBb&A^{|N+6T;T9=os=!EP(-j9Jnv)iIA@-EcWh|nNc63kCtD$I_o zh}GLNX9ou0uo~HIrRzA0r^kf5tI#s@7vz%-dCI!W|E5UApIhKrQoFieXYvqHYegU< zupFK^!ISgFVb-i^@1qU4>?XNkB$!C(RyEpc7NyrB$K)%ADusNsV~c=BVfPxsUUUr9 zs!Q!hvT|{*Vt>gu5cjc*O#V;b z%^O9Jaj!6J5eXKs&pk|?E=m%XztJ>T628NYGF6J`2jIs_4OL?dYj7L>AD7K*>FM~( z`Z#^9A=xc>p7Kpz?D)0oA$!l_3EMQJcAybo)+{%D3`Vw9DvzM_4EC$|wEL)1S1v+m zTKFRnpL~7IDMq|4JJN!2S6#+Wv0y!0dn);yj>M7DqFT+D=#5zVH*S&QOx!{OPX}Z0 z#{N>M`>FagZl6(qk2Oym2a*1K_q8<-o>ANwu}OJZ&)mzo)Hk+kwKWY%ik@l?dH8!4 z8Q@ND9}O|oU-pgw=yztM*Vaq>)tIaKC>hhwS1Wy}2)*c&$v=BBXbATi{E{6_#zWSY zuG^7q)9_OEH7{+f!t{Wk;mX_c^oA>UhYu*LFYGf9X`V%MI%FBR0;6C)j0@Ou6kY3X zmSXzJOUeo*t4Mav9+8)Gju2$?=K|y4huxjaAD8#P0&}&FvG39j!}l$7C68Wtn+j5c zd@{Z#0$<7!OvfWECM?4p&|_OTs#_SomuXbJxw!rF8%Tm06FzE#YjDr$Vl_Se5#<{$ z_Eg_r+Sy^Q91{+GnlDhyn&-IfS|5GYFJ}9NHrj|PGkvjzb!KbQo&Eql z${w^_f9^9{NF~IcZuelA@7p6D|K$gv9`(zB_JO}vIVNk&Ljk0@nSR!WSU-;X?DBtW zP!7mnI3J}wK!A|IUl{x46x|E_ukrZTM-^cr4J8RyaSsfL7b9srgcs`)tasL2x$-|T z?8P`r^G)e@@R!rP-Z(oYh6$JC?8Q;K);Y)rBovF~tZ$7gZt(R_-kQ{Lq^>=T)6|I^ zygy<_SyedV!l{HFPwBxWP#tQu3)#OP5v~tJj>-daS(@+uh$tyS409` z*eU3>o8LgBkguXqO;5`V(kJ55mU~(*o*nFQz|(KGx-wNo6nJzCjUc9H0TRI)=R2_m zEm*_h^2AeDv|Zi!i;Ot1aBQ428i^}I^Q|scskT0}YU6X|w%?l!hJPkdaVawIod&k` zwsX($^l;xazT=hXoDji;Hx%^NLs5#6`(OK5`Yp4jrjf1MPbSOYyXDkVEnJDQA@2bqvpx*gx>st=5IINikewwN2&^+mqTP}#G9u1(wuymAe>tA=}U&A~do1kS2OX;MBNcS8gsm=c@K%oB>9^LVO z4VP{rsJstvwiZ`@d>=Sv0jx)E(i63(`7-A@ry*g~u~_w%A)FPGZxF-SR%S^QS*E5q zM6JjL1i<+fu zC@FDIV;5Icd5f(tj+EpTgovPmY!%x)!kEls1$CST-X49ul*zym?`KsPMfPBUuU{}E z;y-PrTOQs%5Yy8A!{N^18TgT@#;WsqfBNOh&yj8!F*`Tw?WAYU&Ii-VE8bKq2eQ2fHjGq?eA)UoZ3f4C__k8t?>{>~D35;W$itM~@R! zw@>uVH@lV2%z*A!aw__r%VR@97*O6L5=_>L{$)>lodM!gq#=f;K)t-Yld&$2w;4_5 z!8(&TF*Y~hkJW`TpWO9e8xeu%Kdq&QnFb94f3;x&Kqah1bftkinImC=idh_#;@<_=IBiw73gXQfZ&_ z8+iPwqXfb9mqD!H;U`u14{z8{7Vb_W*}W)iIJ!W}%5dCg-~oXaomXV3p0T zs4CEe7HS*jLY9k#aWPRiPQ7Zi9sg2#{`(!Aklk(cv+Z>D^Y5JXTk4@WFfw4$wu%tc zEK1s}|7s33Y(PHqOw4K<{-eqw*3dI+I0O$^s=#=Ab5xw;e0X}I)<~1uPqmF0Nm8!+ z9qN4a_Kq>bu@*U(Rne53tGKIpg)0$ErGHWCv;cBDgCz3)d8ps*e8`S75W;)(a0X4h zEwRuaENXfhsK<2K6b1oBl_Wh2rTC;6`b2HLZ2F8osUlSaKm=Zqct}A%hDe)tK46y= zS?U}QXm%HGP2$W0O{iTA2CZSY@E|mZ7d>=Xois9X57wgh@*HPUv0VmBHceNPlivC(zHuSZU}oWEu%b9-<Vx$Upzd#llK>!-qxOQa*AxoF z+ZzO-Nt@^iq;22)^LsA3I!s27meNdf)``*8)LSP!?5UK>Q^N z@;^Bz%4zJc0>S>*_x!IZUIzdtgWgi4k;$lDUtltnU7c0>@@B!z`rI!1&!2^QpPiq+ zJJ${|fY6fW5oM?4RPF6%lR=(xABy$8%7F74#}+OHISxq7g^fP>Av$YPS7-d~L+dgE z*Hg`L(Ac=COM7ESq&&c@)6R#HmxEGJwXGGd+bp1>n)YR(r%A{?GcF@dGCA-`>zCzu za@wv1{7JmH1Z!#`3w@Y3l&xVs%|~7}#Nl>}utm^PD}ht%+=IHVvb8rLEEm%HSqlG_ zfl<4QVKEYN9C5#jn9$@Q{5#k2PLF2SmnJPaQx{7p!J#RtgpHN zHd}D~(iPv3rn@YZF!GD@VS2sGP~_XB>0zP=$uXZ~xkm9gm2x?W@^kT#k90;pQR+|$ zS&3+@~f#kmGv})Vz z<=~ty>l*<$RV=Qj64mbq&oY|nvJKqEQ#4;TTH71-bB~o-QNR=2UNpN}R2U}j$8Her zKaNt3vi+6!#LZ1XM23GcLM(pjLt{<4D`!_UcBH?|R?O4V9f{9JDEAI5c1t8sJ0oaW z>_6HQQ%)JI0KPFyLQ_4etu11`On;A=6=+Lbb(E%i9yk*6Gv=jT*Ooi}$$GMoQ! zqePU#^pij499wsLVNBnZD{8JKwg3F#y7V>l)w+>9aX3K3my3{pZEkW{IG3tA*ILfl z@Npg)V*3DN)!`56sHuL{B1edjBmQr2kEsR!hMNBjg=YWhL~*oDwZ%0*jjZLu1u6e= zigi5dsh#HP?E)Uy+R#tP&0{Z>!(Xq8uV`ut8x$3%2E zWa7LbZ?xDoYeRhpBx9yabFSxH4oi0<$5TxGc)8zX>-JRjjH})X*Q+VA8u1q>3sHUe zjaTOUkvYutl)jrT?2Fuw^Lpnb0?*WHV(vg8i8Y+ZmR4^H^qL^7;7t{&7w2aIDowV8 z3uO;#jlu-5Nqr26^=2|Zo#8zv!fh1`Bu(?o-?#pvigoO=8^xRT zzqj9lm>`b54O!Z8Ii$=Lm@0BH)i#y*eMM+buC+M}gwM>d+g0tUCI}Y0N#h$Q&&zx8 zznL5lr+Gc-ZH9$QJi_Tnf-|hP$U?Em8cY{emGA=Ofp~v47bmG2op9cFEDtL;6YeWU zW;M=?C3AbNOj9LKBy$&=7-&iH7x1yNF-=9F|wGaONsfS`fsT?2_(T&WWMFaG^ubxN!@(j#LUjH zGVIxYGn3BiumXbUf4&Li4_Up$RyT^YwtZUfF`Mz8R-lOu+?rMb>i$j+;twImCdm57 tf&1Im_y04Z|NTw?a3Lmqxg!+95>*e9tmW}r#dMcrsVQkI*2AnL{vV?Tpz#0z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_flowing.png.mcmeta b/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_flowing.png.mcmeta new file mode 100644 index 000000000..dd1bedb12 --- /dev/null +++ b/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_still.png b/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_still.png new file mode 100644 index 0000000000000000000000000000000000000000..2210e3f83bd97bac2f2a09ce97eecaacf7686f39 GIT binary patch literal 15689 zcmV-PJ+{J$P)q$gGRCwBSo$GTP=XK@}x_f3Y7!Ga( z!J8!NwyN0P#Bny+O=Ul&QrW+BKkT|HAGRu6No`Wrx?GOq*pVz-lw_F_MNuF@5ck1g zFf-jfdw%CVr>8+_S)xDy(=%_s?>WzT&b3#5f4+GC$+1ipmB_4=`Q=PX{=JfmbTi4; zR;9vp2Rgvk7I@0N_N~fx&(!X+fl`fvn zWqLN2>48Z8`Exne*FG!t_r;CA6uDkF70L92>+w|P`rxfW8S>Tr7jlw551_=3o0(qH|)K8TZW^Fl;>A6(+|(|=UKleMZYU6+-^}wXRQ#i zH<{H^a=!yz`ig#%z9|1}PtI5kOV?jzdO`N`OvbS{y+R6o)6V5criI^oE_xefDdlA? zb+0Sg?R6QRPtyuA{oVGO44<9I<#eXEsINOXPOC27+LiS)U9RplZD=2qU=mch#l zxyp5IRb{6!mGpvlr1ht+{p0jf_Q>v+y%Lj^OgGDT)o9>~)@J%vhzs@PnU z-u*2Z99-Br*RSjOzdMjk{{64d>|CzSE@l6CEE8Q(jhyJpRfkpl6%T%@3WA*1 zNTZ5st@l{RJr4%bE9X+9-d&Zz^;PNK-je=XeOuA0$-%1L&y~JNH?RT^0Fl4}@e@%M zuaSkg-9|Q$16`7=rl04$P&a21nzz<9yvP*~x{3$2;z0%;m_V7Ps&0=bNzS=oRfPpT z(9Ny6f7AJn2~@qYCSBc+ORmW?Ux{Mi)bF?82Wz@HUmnQF@gUP*)%i>XCkfm*R<)tP zb8x2M5?ELzv8~TXQtHw56c1KUr*g%uppomUXfMuHAa#>jG5BaJxVIxW^apb=U}cF1 zbHxKTFYk0)~Q=s?Ec0h0IDEm_z5o#;** z%ya&_AN5C%EvkzE>Qg2 zmL5Oj-?>|_vPvIlc(9?zgh7o9fdow1nrf-;`drT)X%&@=zCwKQhvy2m`X=B3r&5G9 z4oIlP7C z-c0e}2z^kAEPt&+b8;y&EE6DeOE*#RVYc#zi^Wf$s=?G_Djg5XGMz>TK|vDv-DH;V z0A*9q=_}}L>4&VZ{Ey!({*GNO(`{57l^WQN;{nnqX8zseJ9;+=SoD&rHh-=#_2m+k zu*7`w{cRb}D=GD~3hbuJ0@_;^+|NkuUH}M7WXJh*z2~xW3!!^dZtE$iy_~V4yhtl4 zMs74?CEx*w;|3?VlD+QmG<^?iVdM36qauzF0pXw3$QVfRmM&RWaOH?3cRJEPys%T4 zsyJUBkIdXlv7_AQLbVQi2e3FE)Ow$zHXi7kP5Ao94`f^I;;J4&hodbp(R%J%pO54S zc*kHWWaaNDPvU!y&`^1nPUMrPa_YurfW)p`EEfNEt|H6s>si+-X&9ANlQGc1oRl1>#6?VXA z-cc2)r&O=Qe(^p0K;f?{LN(i1q^~eGa^*iqZLbtO6p2eV+WA3gh{Ow6qWCe!**hNC z&z(2q@pGiK!2^~ux>PxLU2sUt;LE=I^FmSh^_w#66v|Xz%DL)E9fDWrQl_mvGbEZ; zW*?{Q!BEv*E%NH!n+hli4|Wv~o`VO-OQC{Ns95$!$vTVMi5vQ^)rTr5iU*|{)$+-{ zj9e1u3Njt^1$5BVZ^ICvjJ$S66bA1sWc3KcI6M zPF|#tJ#|eqc#n;1^GDl*!f3W`S||MgjO5bSk&9b+04M64>B+dkX^xeZ9iJvHp-11} zQJbnd(cnQfb2(HzsIks!eFq>iD`4}69qFkUPoV+&MiccHE^H6Bbw@7~9vFQyJk*nL zK9DJV_olUBE)hRRDkfFE>NAsrdCE&q8)z)vZ-rZ1{&=bJf_)76WS2$In z8x-$Rr{cE-O{HuDM|HD>8SKvz_h z*;sT0<6}#V6@`VA#a{ILhysr((%BIN#0neET9YZ4zvQPifs8IS9AZj z%1!}QIn{e{JV1QyhSWl3YSKDwJm5|C)OU2dnK+bMn@K2&&-`1!t^pTZlIV5|4C_~qwvpc{IC`MZV( zFHY3%DOkWzXSJ;Y_a|FdDO3?ICi?xkQ(G>EPyX1s<$rCKI4jtw(>pf9#m3icz4dz?0)a>HNU_1C9${N#PAQK;FA8n>!nZ z2Lq*n2ZieO`a2sk{NzB+^*%4TAJjVVfa5j&aDUG$$?SYn$|-`Sh%XQ^gI|a|k8_T*#wGar zO2$g6uobnQTt_#0j_*{26WQ|EG2fla{RECSj<8)@vux5%D62?M;Bu*YfXVyY2l7@656WVYf^q!q5HsUw z@M0Far+ey09#3S3O;pTS`Q2A?`0u405O4b~Jh0$GaAfvIZ*QO%L+NU@1Ewuyy;p#pT&Q%!#UO02Z+NgV zQQEt+F1@c_rg);^0p=X=#CRIHOfs0EWH8d)4K6_!jO-UL(#5Ws4NHTeL_D#hv~PMf zO-3a!VX9)QqI-#qus0ajFZIoeSSH72ArMt(K3Q4(&b~U?vvSE+Lr3)J&z~Kp$X5ZW zVu>7MkqikWqEsF@B6iZk19N}gyDRJX3%69h6c1h$Se$z*WnVm#bIuhsB1VKC0UmIC zi?m^8yngpYPF1)v#fwdGu3Ud}AQ#)JqN?vb4?^XSCvpNFbQ9?1N=Eyy?aE-NtNiqt zoF1q}(-Y|zkMM9_*?1`D$tfo*u40w^c;+)&p^QMDE&g#qb>#ZYv<6 zz2uyxsIGtd@?+frYvY0Y4knF6!e{PlS_H%1pk5+Se8t4^sbM36fJ6)u`&lS?>SG6k z<_BlwP4a|J5X%k`znQKG?d1L|m)h*9GA^Yq#t-=G(Tj>t4Qj7TE{N!;qILcz;lThh zYWx6S**2_5JOL`N;%pLkeks*hL1puXbb$ZQ)FwQvWu%0oXz<|aeDSmAhcd-eHRI8W z>~ec>L(s^bjVhS?k9Ot0#S`HNtir`vxTvp7hDf&~zCnTN`npePkk;#|5>53*%21x4 z$b>U)0?)c9i1!=YvVo%A*3Cr3VKJu8q&?0@Mzq4Hp#O6Z4<uNJu(KQ;00W9GuDPShpJHz?1v|H;ui!EYJTRZh-5kS%cW=pt=M$>%nY8JhU?6?^W6>LHW21 zNO}b@p!zrEe0V%qK=3p=2|IgtpzFNS7EMpjG>c^5d1* zFJ|K5k2=v{bqyidYZC%Bm6Uq_^U$44rRh}hpot-PrlTr76pS_2H!Ve5%{r7TJSRc~D3-azG3rFUvrACV$Z0qd!X=a#5aJea^t z`9zPU7{!5!km;Jk56)yZnVD1Cxuv(GcmO}>8$Te1826;_JQ$|f=~R*Wep z2(#wtu$o{D#6qDeSevOgTB`TG!AU6|^i;&hl^Y|{ewnj06Cwlut0XYFYaqvrB%*AG z9#2F84G)fSZCnz24yMFa-FIq&RF*<;Spg4r@5=D;Vd4jDms))cwoX5ct8vV9}#u}Tt$A7O??#)b`%e`gCD5b?)KJYO)buqN*W{@jOYQLxcQ!- zZQx$<;E)dj54arzPT1GF$BW+^$~t2C*^!(eNSr`V*$cMdf%1cORh19-<>dLXO!4{) z-PO|WQ{QO1C-Yw}@j%>SStt-YvF~_5-c8YK#_9`C5#fztzB((P$E1G6@f9*+zs3U%ee6d4Y2#L@p%SJOoO3p9*narSw_0Xu7p=q9fOOC9v1 z9pubOvDqoGBy;%_R}}Y3jE&;vC@1P{_od5b!&b*Bo@8Mo!-EUohghyDPn9GOvrcvg zzZq7hcM~)RI|7duiJdwCi z;DId#Tzu=cY>=?m&03IWCZdahRnX}=Kj=2`1J5I557Z(lGG$7nN1i@u_`!GJL5i)b zgHe#tg8v~f?h}Uhp7#l>f3PkO7P zi0;^lsg*I;1}1`GB{fu*jSm^o9mr*!d%9#p_W(Q~H)F@r>9y%Co?XyT%pxPFYnAE|O){uOZ7aRjPfS zyiESWEa5@QzqaBBrj3L|!2lu{?o?0V2!EKRKqT-@9hUQhZ{tChlG7cyGO$e$Lh)b~ zGWFu5;Rg~)T*re#@nGBR1|gquiklV0jPC4MR(}SV5XIy~ES{)uswZ&6{DlMM2kL9; z8yK9|7pa7ze5Skgu^v&tev2QhVamzD@^b=F3O2L*ddmf608w|q{pjg*91o&GsKEoQ zG}!q}Hx*}Z}8x2 zHRV)$ag@%JtP<)6uP27i#rT%oD*4BOIvk1zJ8eA3+-u47B8yPr;-8F`Wku!&)!z|6 zpd^MUmf~WC*Ak^NBxc)q@Vy7J4ej~a;R79vfONxNLRjjdZDKf7hADfm4t)j3|T;;myyUt8-pJl zp324kv0NA)L`{t@uSeV%i6pA=$=FmoCyk_bp|5yAX_2tWN;>-+u=WEvENb@|IXcVU zIUeZ7<|<(3gdNu@WR9eN@P!*UibyYCy1>KG|?>JRebUp|xl+yhQnoIibAc1V}vwIX$K#F1xEYh}0l zf%=!+*2-@V7e8T{3LY~xren(;d5pb^(ptp_wTYV;TK(iLy^SM+v)rn^!Q&TlR@KXL zvDnbIcM`P;mRfW?fShMs9Ap}3g9mUD9_fzEk6pZy{+iFA{uF8CtO%Q5dVvZTqT*DG zk_wr4eR6m-tOPjc=nW4xhbhn=TmTP7zn^@P%8tcSLLI{ciyt^1^b`+z>_tH^WhE6d zS&+@EVl9$G-8NCKkyr}VR-h*n@x+a8xW2GgFYcyh87eqvP4)emf*l8O>LqHmDvN>ZXK@PPZlCjO@fO6yBYUX3{>PvT}yzUTXn z-i`_U(0LC?6j$-hcd3 z&da26R<|zKjZ5Al8Wg!A-d6NZPL9y$X$ucJg$Ln1s@=3^==T=9wbkhf5l$xRQG|05 zc_ySzE%QJroux+M2gFi5l5K7=CQd=NH0P7(q*Zw6kq~rOm7c;8oVjKMp$NXU@L-2( z>1}82NLU$GDDVI=#$r*A#__VT9uBM8cwpw8T1&TyRnbX(D&T?Mr-lBA+UdUq_JW_Z zF_6`RlO_k986L31>gJU5k@cxubFx=wsX`nS=2rC$Cooy8It?)v#c79t+Sb=Ae}eL* ziecSAJQBr&?B|~-9*ibUCO_hd9dkUANv|9aNMuYo(i8B*H`p{+@n9Q=TaRqy91+|v zc8BTQ{WL7jgl4+R+r=oNaisGz!-I0Z%xG|7g9ltVjYM`gW&WHWNTCkoB&rz}EprBh zp+v;pEg0z)<5*?IgXeH*jBphHo6Cy|v*X|aE8|Gt+ZAPgcGTU^NAg@1=}6VN3)v>N z@U8lT085rmDBx6ifx3M;+)*{Q9Hhpe?A@DIK`q6vlmmbVP<&k9zkDD&C#6hrETM6c z#Er!6Ge_~?ekI4o52%=ab0C9bJw_^AqE96}wW!-xbb@%4WWpX#bC{la(qBo}*MnEYt8!cU)g+RrJxbf+PYe@jc2$5T95IwVM_{a8Cuq zGAo4Q02tpK$+%Za=W=G+SVw+=RT4T1elYO3aseK&2P#DKGmo(WUzq#A1GtiEB>fBd zC;M_<=)Fw6zMuvVpfP|*gnxK*0u

amySr^~@YEK_^Q3`4|8$b76iqc&J)Bd9$cn|4VM$}0P;+mQJWt`wiiEQ zCAI8jD{d!@BYWEpUieHmv35LYTphpAngcD7L*ky)av$kH zhLWk7UnSqDUkmlxw+I95&rRI29^i+xVl^-0T z&d37zVajxPCUZhOtrjFJ@KfhWi^VSc662^yFJpzSp&J7x0fDPgkc5g^;Pie3Mi1CA~RBAGBug<6;@I*MrBK*m7HzVqJ zU=@?(m5wfyQ`b^ZkE9r~x}v}Q;+c%VgE~^@>WEvKj5GE`ZV4BJu1tdseJZ}SMZ?r3aD!dilBTPC#L-* z^)+3?gH7)1aS8#?ogZXY@uRq~cbZ&XRXEE(U9~8H;Q>Zf|4QW5B5Dy4Yy`*m1U@YT zcR;;DrY^!j5F43R4K6}>%xed=VK8hqF?h`VM|*OJ2{6onrg%dfl}~GY8d)8p_@M8P z?wA>eAM_OuzEPL&ls7`bR32)x&PpUH?!WX3`oM#ZYT(wM!Z+a_;t15H-bkqgF{1*c zsiirL3+R&i;eFXYn8*a|(QPd$+(o{-jNm}5m|krK_%aebpf0**jH-aE1f z^uQ3+9XxT@hKq4FXn3Pj$o)rdF{cR(jzG*2e0;DgH}nOI0{GHhB{)01sw}U5>hWW< z)OsQyG26J z=zHpWYv#Ha0~epBYCkA#2WFypu(LOk5ybgtjt8=rELM>3Yj^-dQJcT1uP=XpB4-qJ zpO2PB;DHB!u6V!^?WV~K7oVKTxoT#yvREuWRNiw!rvOQ-`TSbflts4DR01*t?qY9P zjp{;P{N2a$rH40~^QA$WPleh+|4hwSC4=f>E6GXlTK$?Tq9cY7wFmSwVo3GpGtYRM z&2&7FYlSRUk6Bv5inXHG2@A86d1{6to=Dk<vEj+Ly&$*WsoO_EFV;x>7-LWFxR)=-N z5u%UL@t^~|tDZpZg1t~7Y59e9g78#d=6x$3=w2j-d5qYwnc>XzwjnI$~no-vl>pLOGg(cboiost(A7 zUOb|BVWO|SpB%L{8qm?QTj4rWXUUd5UuM?ONJyo zD41(t1)x9vSpE>{fp&lUx=-4$N)KNJQpiP5mN{xEusT)U^u2=zMN-K0zo?w1x35gz zeDlWwQH6DGr{;JVdB}5}z7W;7-9EZV@dL#JdRQn!t&T70`Rd~51L^f5-G zB!=d4Srlw30>cCKf!C}7RxMK8cjVd7P-?R*tx8$pxJgv78cVNH_&$fBwu@T%H1(+u zddc~es3tB7&vdo%Ad+!7UTT4tc#vBye^a*(u`<+FL8D#QLuYji53qOM-In!mYkhRd z>R;Y7<>Ajw$Ab}AVOXHADIV;|kc88S){1$;1FPXz67i#ZviWE%=XaGmDmmVxZb|u6 zZ#+*mC~(Gt(y$m`ggyMz@5|0JFT4Mz&t(su{DE9A`gV;q9@*f5e!}c41rlW{SKe(r zk9zj?)XQ~Sjqz+d@q;T}*{RWD#e+|o143AoYL{0SNbmzAVNv*to9Gc=!-G#kP}=?i zRYDLhGM`MxL3zAFmiY)150REelonnM?6K8O1Q*<>+VAOc_Dt8*B{eyotwuO5&bxlB zS<1E77+(Dln}BkjbtYZ$R z0;(xWS$oZ9Z5;#yxWS}Mx22d+Q1Fd`)ekD0VImyKtqoP%$#Rqtc?RVNyPTrq!IQ6F zq*4nu5)dMGI=~iC(CBzzJxlx&Fd>r9UMQOGkup$n*_)K6-7w`xzGe!2N}vDITo7)Sm++YVT(3cDvJ(rpdo~AotExJvN*lfCqqz z;ep=UF>s|qb$0a~{2*e>(OrRYZBk{92NE+dkhUH48EuNAu6kR|Lb^=iX0p4 z_k?xrwxPiTwIT9dcwj^VhysndkXm(E8yzD)ABpK@J;j4HD#>B@?3a}f5lkTPa(Zc^ zJY`k0ga`94FH>!%%Sx$uF!jb^t5b-^r}1#j3*hs#e9DWW9XIOvdud`7HQT*6Zp)Al zE^sF4rc*pPk0BbZOi$oJ(|ryePzX&|4P2p6QaPr{>(!#QfOW@%O7Xy|e-sazWX-vx zacAE}EG&v=tME7yC*WkGipoi=QP>#B8m0CTc$HQp`)($yaOHEaK?v_A@StZg)zkpn zp2|Y0@$_e($g_5Lo#TPEZ3V^Q1G6BQR8F@btn$hiQR}@y?75qu-g;efzb)LM1`i+% z`X&P(Q&0pR{Akyd2Rzt@9~gRr7y`#Qie`sQMOT;HKS@c-&fh0~F#oqoUc}(3zym%=*}W8h`argC4`pyX zkqM|oMI5_6Jxo*FP%x!FH~#u{c}-VwHAr}H0UnG=+$tV?ruX&|Jm8pc!lEj=jR$}( zLljt<*Ql&?2!SXbJZ#}X_5Z^I#myeAI2&GB9Vt}9gVd{Tjzz~culC+{2|PGFO>|g& z?Z#?#y_-nlNUTK41pyD8u}*i^EgiB@9WaLjJcx`Ro}MKsNqrJ{X~sEtT9i*d_0)MZ z!l{=RVF8OF6nD3!4<3NL9=))#IqxWpwu`13#AC`d*bj*E8XnLHrTTs9^*GflRUlG% zDKZud1f!vx{thefi3YFlYJ!b8dtIiQBu+?$XX*-;+7Ditw$pUhdptRH(JY;hh96LW z5&h0RFJzA%$BxI!t(>63FB&N$hiG3OrVFtuH&yDu0~LU)Uh)^t zKx<;~;K4%$heHLD@li@z)h-K74tgcU3VL+Vs2Q*@q1~$c3!h~vKw}>JsG>?$^%aXG4TeUI6Wa0@%$zw+fCtu+6%M4~0qU6T2v=qA6j4vNU1Iv$v!@To*I2?^RD1=1m6$6V3-Ze`cq)aF~z9Rm{MnPsWX zrg1)^DJ&9pgJhK~NOiL>U1E#H^HcK|`j1}7`DF@3RV~KeiQ%NVCv9=MC}?;#Rep)R z^oEWYWzxojC@ZQI4MW2@2| ziC^220sNmNb?gBML|o-ZcVz2nDd$v#s+TgNPJ!wuUN*d8W6?5$b(Z_~UD+Vq7425I z!2kO*`Q|D`Zt^<8eieAIAN|hsFObos@(GcqL5vH$1_3|QsQmF^6Tvan{`6_WgSC_i$%>o0 zF)!gh!&I9K8X-)Vv*nCwz@$jLsUPBwi)ang?EaPt2dMlC9(>DlLmSaTiacLV4Y{l~ z@BCTn5}LQ`kf6Fzw`(=aI3IP&H+q>7(@HNQ^#N4tTu(UVS?We4Y@>$f?>aWru1&SLt@fV0CC;>T9F`g2bhth3r zs-Z=hp1hP($|sZ`3~;VVi&YeME86_iC$iUS2s07aQ?Q(i9{q)B>-`;Br}~AACm}JV zFJ>@EWJiJuDQ)4w=CS%3U+kNuE?35j#jhXkt7|t+^#@f7N=du^AkqW0U+5+lDnPSx zk!C0rfB&&OY38bDc4US72)6T)5Vx5j7c$vgNN zvATdOKlys`k6c97uk;-cGyY0jo@qfVA89yJZ0NC_F^z7+%vPU*Hf|@zd0CpUPT~w1 z(GSZe$>pUMAze&;5dqhz*L{`tTc#)V{LkI(wb?0pVjaVSR-snoGkChp#uy+#{0AN^ zss<0N{IUp3lV#TkMlQ?jpJ9P9x2ZQr)M=_?4kmVW`Q3b3+1jOmEw!l*zP}+`%1AAV zmHA|*$-JEtO?hWK|8^ag;(_(4eB3cSusU86Gq#W8*tA%LJRm z1|F2|C!0I7nx3;jwZl;H;2f#b4>%-}P3T9#*hYn7p}>PtOgKMOEgO2l63X-QRQP8? zQzxU-@B^q}Gyed?!o^WWhYV1Yz3>>@Mw$h4j~v86-D(dPjEU^694r>Uph%C~ICDIx z(^StK^vTj-&dl+^$}71QVholdd0*YT@B`U>Hj*&tA~!6EXpKzL1W(%d&3?j{@gv)K zfNUcZ@IyQMs$7mpou5P5E^~VXv9`JL;gH;u(tFK=sJoujD z0q6RMJvm$X`8SFOxfC(YJ*Y0yMoH1EUXFT-0V5tFW%7AOYaRorXPZPX2C1voCpyot z5nXW~xv(-5Ycgl|>*V%Wzq9#8u#+|(L^jXoE9aGN>{-?nLgrEMSsZ#-A$yp~@*;c# z_y6mt2&7NMgHh&mLr98AZTx$*Qz4~W3k%d*`E20Gla=L; z2OIP)5<8lEOcg6N>`9M0q%Y27q{q8Zs{4GN_>uY1^!DAv)1^fd_`2`2#j(KUB5nMK zU&z6{#Tw`3at6YaeL1%i+aAgqA%FY?Hia4+N@?|;r+B6+47K|Uch6KQH|XTo=h8?YT?t|>ozT=7EV;#_qU*HVfhwo3^u^^n4-0K&(p1(j-4OO zy}Xit2jY15SWNP5CNiuzQc+^pO@+@AxgNWy=g$|=O&a{UdT0y~ab5`3_+)M!$#y1lN1gL=h@^)}8Nk!@nrn~Dc_3O(V^zL66)jrs#BhQWg$j5;Pl*^L2LPbF(n-ki5>Tzuv)yovcY5yT~PJq%gToRt^6;o+^ zcuq4zG=k50-b62&>Bdu6w%IJjTrTPLZNS89QK=TrJg*QnDGghx6A@qW;oitaYH#-d z{UR9)YthC_=Xq63>H!Z3xQtu;APU9p7`csh9hUx^DzWlsAA8n^2l?omZu;Xy2;R|+ zX8gbkQ;7W!Q@+udS3JzBYZiKdFHH`bCuWfqf_QVW@q;3nG(#j`dQU06(LH`nrwIIj zM)?m8arjoAQg4aO#d%F{W{?R zL%88ZyZsb5g$u=?k+#3^Ej-|2mVLql8wf01$ygbCapnBE6+gKByq3$mnavF3(NiTc z)|d@DSxHqOsn)ej7yB*Mgn$0wk?cW4o~+3D+@%uxX)ccsM~HYC6U*l9=Pz*Hql5BR@!PKHurm=4f4l?foz3}RUDtA2iuIIE^J8LTJ z$!K%0JwTtiLmiJB>%5~oPU#&f(jZ;46h4e9hzvtw1*}(f>(kOx0H(itEQdBnOGO)> zdS}NQ%4=($N2M#n1MW|4&chw;2Psk{>RsC>aBS7bW@K+Q%8l(S1M=I z&LN&2n6^2)YE-+wekMo%`nepSH=ga7Gd$oYJa zSTs)VPh?E?^P%cM^Sna}G@?VO^5r8)UYloP%u0U#rR=kGHMG-<>9W+qJl7bO0zUu? zTX*>p-OY~p+Fk6CjwCQ-EY)_vKgRTbz$Xgo-32xUk` z-kIn${3pU3S(@H#azRg1qt-n1a6>mxDL-DWPye5T2W1qo1D;ttw@sQ#fX-Ta)S~4b z&`!8iL8tU<38-5U_wK0Vxidp^n zOvD=v>Q|S!2ON>1@dHbTbdw4X*Q8H;-8x2e^PW5H_vQ~WedPh|NPA|ns=_ah2bG|8 zJWel$kQty7TluR8a_4j;SAG3-%$w_vk?k0^Xelu+1|#Z}h_c-3g(CKEzLXP8TYavs zz})&g%sI13o@k)+0}HY-o#@*0+R`-BiK?=AeV+N2M{PXtf<>A669K6Zqh>8i$OegM z&fUYeFi^}-3_PF()23}83q<`nR;ofNp&`4$aVk5reB*j1J;j5=;;kKfZs!Iwu+aZ0 zyI!Q0qa!ss$77SaYVLt(=F4>w9`uR!SVD^UdG7NK-n=6_w-f{D8e5&FQUNv$U0~!F z%`wMbvBcV;|Ns0W-x(5OeBH*sybl523?k{!sBY{VG z@hm;e!qgqlg`QTP-#GP$Hl=<&u}*Xe{sbOS5lXBFVXSehy@9(Dc@R!eIO#3Dw68_SK{cxO6 zYLFW46F(rxSk;Z|SI1s-+;@s+y@n28RLH*&9VveEm7K8rfOgy*(gRTm5srvAf0RtG zWRB>EV*DUI&ovxun^HG3RvvleY_)6MGx-m9WrHvYVW6*H%4OL!k{9VwYIzF}m?u9; zUAOimAbNgjPa|zYJ+GA$bdwuhL?$~PC*ddINAfcQxr~i1{^y6OX*~WgD!5ff&{T?A zrTEwrY1L zIC>ZMM3~ky-ea<}#5h3uew{lvIYxipJJZcd<{4z3aj-B*IH43ZHMNOF>ix6E;vzj1 z%%&C)^)ODHUwi1Waf6u~80_Y2n=<^-u59x-GoF(6t9{wC=la>ROjoT2ca3M2n#83? vt!~EiT#51%wcsIt@qFjTUr^!xe*z2uf4di{H45hJ00000NkvXXu0mjfIrw+4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_still.png.mcmeta b/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_still.png.mcmeta new file mode 100644 index 000000000..0645f48c6 --- /dev/null +++ b/src/main/resources/assets/arsmagicalegacy/textures/block/liquid_essence_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/test/java/com/github/minecraftschurlimods/arsmagicalegacy/test/BossSpawnTest.java b/src/test/java/com/github/minecraftschurlimods/arsmagicalegacy/test/BossSpawnTest.java index 6fbcffac4..5c741c6e9 100644 --- a/src/test/java/com/github/minecraftschurlimods/arsmagicalegacy/test/BossSpawnTest.java +++ b/src/test/java/com/github/minecraftschurlimods/arsmagicalegacy/test/BossSpawnTest.java @@ -111,7 +111,8 @@ public static void testEarthGuardianSpawnRitual(GameTestHelper helper) { }); } - @GameTest(template = "ice_guardian_spawn_test", timeoutTicks = 20) + //TODO: ice guardian spawn ritual (needs snowy biome) + @GameTest(template = "ice_guardian_spawn_test", timeoutTicks = 20, required = false) public static void testIceGuardianSpawnRitual(GameTestHelper helper) { ServerLevel serverlevel = helper.getLevel(); Player player = helper.makeMockPlayer();