├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── src ├── generated │ └── resources │ │ ├── assets │ │ └── mythicbotany │ │ │ ├── models │ │ │ ├── item │ │ │ │ ├── mana_infuser.json │ │ │ │ ├── alfsteel_block.json │ │ │ │ ├── mana_collector.json │ │ │ │ ├── exoblaze_floating.json │ │ │ │ ├── hellebore_floating.json │ │ │ │ ├── aquapanthus_floating.json │ │ │ │ ├── raindeletia_floating.json │ │ │ │ ├── wither_aconite_floating.json │ │ │ │ ├── exoblaze.json │ │ │ │ ├── fire_ring.json │ │ │ │ ├── hellebore.json │ │ │ │ ├── ice_ring.json │ │ │ │ ├── alfheim_rune.json │ │ │ │ ├── aquapanthus.json │ │ │ │ ├── asgard_rune.json │ │ │ │ ├── helheim_rune.json │ │ │ │ ├── midgard_rune.json │ │ │ │ ├── raindeletia.json │ │ │ │ ├── alfsteel_boots.json │ │ │ │ ├── alfsteel_ingot.json │ │ │ │ ├── alfsteel_sword.json │ │ │ │ ├── niflheim_rune.json │ │ │ │ ├── vanaheim_rune.json │ │ │ │ ├── wither_aconite.json │ │ │ │ ├── alfsteel_helmet.json │ │ │ │ ├── alfsteel_leggings.json │ │ │ │ ├── alfsteel_nugget.json │ │ │ │ ├── joetunheim_rune.json │ │ │ │ ├── muspelheim_rune.json │ │ │ │ ├── nidavellir_rune.json │ │ │ │ ├── alfsteel_chestplate.json │ │ │ │ ├── aura_ring_greatest.json │ │ │ │ ├── mana_ring_greatest.json │ │ │ │ └── alfsteel_armor_upgrade.json │ │ │ └── block │ │ │ │ ├── exoblaze.json │ │ │ │ ├── hellebore.json │ │ │ │ ├── alfsteel_block.json │ │ │ │ ├── aquapanthus.json │ │ │ │ ├── mana_collector.json │ │ │ │ ├── raindeletia.json │ │ │ │ ├── wither_aconite.json │ │ │ │ ├── exoblaze_floating.json │ │ │ │ ├── hellebore_floating.json │ │ │ │ ├── aquapanthus_floating.json │ │ │ │ ├── raindeletia_floating.json │ │ │ │ └── wither_aconite_floating.json │ │ │ └── blockstates │ │ │ ├── exoblaze.json │ │ │ ├── aquapanthus.json │ │ │ ├── hellebore.json │ │ │ ├── raindeletia.json │ │ │ ├── mana_infuser.json │ │ │ ├── alfsteel_block.json │ │ │ ├── alfsteel_pylon.json │ │ │ ├── mana_collector.json │ │ │ ├── wither_aconite.json │ │ │ ├── exoblaze_floating.json │ │ │ ├── hellebore_floating.json │ │ │ ├── aquapanthus_floating.json │ │ │ ├── raindeletia_floating.json │ │ │ └── wither_aconite_floating.json │ │ └── data │ │ ├── minecraft │ │ └── tags │ │ │ └── blocks │ │ │ └── beacon_base_blocks.json │ │ ├── botania │ │ └── tags │ │ │ └── items │ │ │ ├── generating_special_flowers.json │ │ │ ├── terra_pick_blacklist.json │ │ │ ├── functional_special_flowers.json │ │ │ ├── special_flowers.json │ │ │ ├── floating_flowers.json │ │ │ ├── special_floating_flowers.json │ │ │ └── runes.json │ │ └── mythicbotany │ │ ├── recipes │ │ ├── alfsteel_axe_smithing.json │ │ ├── alfsteel_pick_smithing.json │ │ ├── alfsteel_sword_smithing.json │ │ ├── alfsteel_aura_ring_smithing.json │ │ ├── alfsteel_boots_smithing.json │ │ ├── alfsteel_mana_ring_smithing.json │ │ ├── alfsteel_helmet_smithing.json │ │ ├── alfsteel_leggings_smithing.json │ │ ├── alfsteel_chestplate_smithing.json │ │ ├── alfsteel_ingot_from_block.json │ │ ├── alfsteel_nugget_from_ingot.json │ │ ├── exoblaze_floating.json │ │ ├── hellebore_floating.json │ │ ├── aquapanthus_floating.json │ │ ├── raindeletia_floating.json │ │ ├── alfsteel_block_from_ingots.json │ │ ├── wither_aconite_floating.json │ │ ├── alfsteel_ingot_from_nuggets.json │ │ ├── ice_ring.json │ │ ├── fire_ring.json │ │ ├── dreamwood_twig_wand.json │ │ ├── petal_apothecary │ │ │ ├── wither_aconite.json │ │ │ ├── hellebore.json │ │ │ ├── aquapanthus.json │ │ │ ├── raindeletia.json │ │ │ └── exoblaze.json │ │ ├── alfsteel_armor_upgrade.json │ │ ├── mythicbotany_infusion │ │ │ ├── terrasteel_ingot.json │ │ │ └── alfsteel_ingot.json │ │ ├── alfsteel_pylon.json │ │ ├── runic_altar │ │ │ ├── niflheim.json │ │ │ ├── asgard.json │ │ │ ├── midgard.json │ │ │ ├── nidavellir.json │ │ │ ├── joetunheim.json │ │ │ ├── vanaheim.json │ │ │ ├── muspelheim.json │ │ │ ├── helheim.json │ │ │ └── alfheim.json │ │ ├── modified_gaia_pylon_with_alfsteel.json │ │ ├── mana_collector.json │ │ └── mana_infuser.json │ │ ├── loot_tables │ │ └── blocks │ │ │ ├── exoblaze.json │ │ │ ├── hellebore.json │ │ │ ├── aquapanthus.json │ │ │ ├── raindeletia.json │ │ │ ├── alfsteel_block.json │ │ │ ├── alfsteel_pylon.json │ │ │ ├── mana_collector.json │ │ │ ├── mana_infuser.json │ │ │ ├── wither_aconite.json │ │ │ ├── exoblaze_floating.json │ │ │ ├── hellebore_floating.json │ │ │ ├── aquapanthus_floating.json │ │ │ ├── raindeletia_floating.json │ │ │ └── wither_aconite_floating.json │ │ └── advancements │ │ └── recipes │ │ ├── mythicbotany │ │ ├── alfsteel_axe_smithing.json │ │ ├── alfsteel_pick_smithing.json │ │ ├── alfsteel_boots_smithing.json │ │ ├── alfsteel_sword_smithing.json │ │ ├── alfsteel_helmet_smithing.json │ │ ├── ice_ring.json │ │ ├── alfsteel_leggings_smithing.json │ │ ├── fire_ring.json │ │ ├── alfsteel_pylon.json │ │ ├── mana_collector.json │ │ ├── mana_infuser.json │ │ ├── alfsteel_aura_ring_smithing.json │ │ ├── alfsteel_chestplate_smithing.json │ │ ├── alfsteel_mana_ring_smithing.json │ │ ├── dreamwood_twig_wand.json │ │ ├── exoblaze_floating.json │ │ ├── hellebore_floating.json │ │ ├── aquapanthus_floating.json │ │ ├── raindeletia_floating.json │ │ ├── alfsteel_armor_upgrade.json │ │ ├── wither_aconite_floating.json │ │ ├── alfsteel_ingot_from_block.json │ │ ├── alfsteel_block_from_ingots.json │ │ ├── alfsteel_nugget_from_ingot.json │ │ └── alfsteel_ingot_from_nuggets.json │ │ └── botania │ │ └── modified_gaia_pylon_with_alfsteel.json └── main │ ├── resources │ ├── data │ │ ├── mythicbotany │ │ │ ├── loot_modifiers │ │ │ │ └── dispose.json │ │ │ └── patchouli_books │ │ │ │ └── lexicon │ │ │ │ ├── book.json │ │ │ │ └── en_us │ │ │ │ ├── categories │ │ │ │ └── mythic_botany.json │ │ │ │ ├── entries │ │ │ │ └── mythic_botany │ │ │ │ │ ├── niflheim.json │ │ │ │ │ ├── muspelheim.json │ │ │ │ │ ├── wand.json │ │ │ │ │ ├── pylon.json │ │ │ │ │ ├── manaband.json │ │ │ │ │ ├── generating.json │ │ │ │ │ ├── functional.json │ │ │ │ │ ├── infuser.json │ │ │ │ │ ├── tools.json │ │ │ │ │ └── runes.json │ │ │ │ └── templates │ │ │ │ └── infuser.json │ │ ├── forge │ │ │ └── loot_modifiers │ │ │ │ └── global_loot_modifiers.json │ │ └── curios │ │ │ └── tags │ │ │ └── items │ │ │ └── ring.json │ ├── pack.mcmeta │ ├── assets │ │ └── mythicbotany │ │ │ ├── models │ │ │ ├── block │ │ │ │ ├── alfsteel_pylon.json │ │ │ │ └── mana_infuser.json │ │ │ └── item │ │ │ │ ├── faded_nether_star.json │ │ │ │ ├── alfsteel_axe_active.json │ │ │ │ ├── alfsteel_pick_tipped.json │ │ │ │ ├── alfsteel_pick_active.json │ │ │ │ ├── alfsteel_pick_tipped_active.json │ │ │ │ ├── dreamwood_twig_wand_bind.json │ │ │ │ ├── alfsteel_axe.json │ │ │ │ ├── dreamwood_twig_wand.json │ │ │ │ ├── alfsteel_pick.json │ │ │ │ └── alfsteel_pylon.json │ │ │ ├── textures │ │ │ ├── block │ │ │ │ ├── mana_collector.png.mcmeta │ │ │ │ ├── exoblaze.png │ │ │ │ ├── aquapanthus.png │ │ │ │ ├── hellebore.png │ │ │ │ ├── raindeletia.png │ │ │ │ ├── alfsteel_block.png │ │ │ │ ├── mana_collector.png │ │ │ │ ├── mana_infuser_top.png │ │ │ │ └── wither_aconite.png │ │ │ ├── item │ │ │ │ ├── fire_ring.png │ │ │ │ ├── ice_ring.png │ │ │ │ ├── alfheim_rune.png │ │ │ │ ├── alfsteel_axe.png │ │ │ │ ├── asgard_rune.png │ │ │ │ ├── helheim_rune.png │ │ │ │ ├── midgard_rune.png │ │ │ │ ├── runic_spell.png │ │ │ │ ├── alfsteel_boots.png │ │ │ │ ├── alfsteel_ingot.png │ │ │ │ ├── alfsteel_pick.png │ │ │ │ ├── alfsteel_sword.png │ │ │ │ ├── niflheim_rune.png │ │ │ │ ├── vanaheim_rune.png │ │ │ │ ├── alfsteel_helmet.png │ │ │ │ ├── alfsteel_leggings.png │ │ │ │ ├── alfsteel_nugget.png │ │ │ │ ├── elementium_ingot.png │ │ │ │ ├── joetunheim_rune.png │ │ │ │ ├── muspelheim_rune.png │ │ │ │ ├── nidavellir_rune.png │ │ │ │ ├── alfsteel_axe_active.png │ │ │ │ ├── alfsteel_chestplate.png │ │ │ │ ├── aura_ring_greatest.png │ │ │ │ ├── dreamwood_twig_wand.png │ │ │ │ ├── mana_ring_greatest.png │ │ │ │ ├── alfsteel_armor_upgrade.png │ │ │ │ ├── alfsteel_pick_active.png │ │ │ │ ├── alfsteel_pick_tipped.png │ │ │ │ └── dreamwood_twig_wand_bind.png │ │ │ └── model │ │ │ │ ├── alfsteel_0.png │ │ │ │ ├── alfsteel_1.png │ │ │ │ ├── alfsteel_2.png │ │ │ │ ├── armor_alfsteel.png │ │ │ │ └── pylon_alfsteel.png │ │ │ └── lang │ │ │ └── de_de.json │ └── META-INF │ │ ├── accesstransformer.cfg │ │ └── mods.toml │ └── java │ └── mythicbotany │ ├── ModMisc.java │ ├── data │ ├── BlockLootProvider.java │ ├── BlockTagProvider.java │ ├── recipes │ │ ├── SmeltingProvider.java │ │ ├── InfuserProvider.java │ │ └── ElvenTradeProvider.java │ ├── ItemModelProvider.java │ ├── DataGenerators.java │ ├── custom │ │ └── FloatingFlowerModelBuilder.java │ ├── BlockStateProvider.java │ └── ItemTagProvider.java │ ├── pylon │ ├── PylonRepairable.java │ ├── TileAlfsteelPylon.java │ └── PylonRepairables.java │ ├── ModRecipes.java │ ├── alftools │ ├── GreatestManaRing.java │ ├── GreatestAuraRing.java │ └── AlfsteelAxe.java │ ├── config │ └── ClientConfig.java │ ├── network │ ├── AlfSwordLeftClickSerializer.java │ ├── AlfSwordLeftClickHandler.java │ ├── PylonHandler.java │ ├── ParticleHandler.java │ ├── PylonSerializer.java │ ├── InfusionSerializer.java │ ├── ParticleSerializer.java │ ├── InfusionHandler.java │ └── MythicNetwork.java │ ├── infuser │ ├── IInfuserRecipe.java │ └── BlockManaInfuser.java │ ├── bauble │ ├── ItemIceRing.java │ └── ItemFireRing.java │ ├── functionalflora │ ├── Raindeletia.java │ ├── Exoblaze.java │ ├── WitherAconite.java │ └── Hellebore.java │ ├── collector │ └── TileManaCollector.java │ ├── RecipeRemover.java │ ├── patchouli │ ├── InfusionProcessor.java │ ├── MultipleInputsComponent.java │ └── LargeManaComponent.java │ ├── loot │ └── AlfsteelDisposeModifier.java │ ├── base │ └── BlockTEManaHUD.java │ ├── jei │ └── MythicJei.java │ ├── ModBlocks.java │ ├── wand │ └── RecipeDreamwoodWand.java │ └── MythicBotany.java ├── gradle.properties ├── .gitattributes ├── .gitignore ├── README.md ├── Jenkinsfile └── gradlew.bat /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name= 'MythicBotany' -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/mana_infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/mana_infuser" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/alfsteel_block" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/mana_collector.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/mana_collector" 3 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/loot_modifiers/dispose.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "mythicbotany:dispose", 3 | "conditions": [] 4 | } 5 | -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/exoblaze_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/exoblaze_floating" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/hellebore_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/hellebore_floating" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/aquapanthus_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/aquapanthus_floating" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/raindeletia_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/raindeletia_floating" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/wither_aconite_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "mythicbotany:block/wither_aconite_floating" 3 | } -------------------------------------------------------------------------------- /src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "mythicbotany resources", 4 | "pack_format": 6 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/block/alfsteel_pylon.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "mythicbotany:block/alfsteel_block" 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "entries": [ 4 | "mythicbotany:dispose" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/mana_collector.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "frametime": 20, 4 | "interpolate": true 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:alfsteel_block" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/exoblaze.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/exoblaze" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/aquapanthus.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/aquapanthus" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/hellebore.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/hellebore" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/raindeletia.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/raindeletia" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/mana_infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/mana_infuser" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/alfsteel_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/alfsteel_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/alfsteel_pylon.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/alfsteel_pylon" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/mana_collector.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/mana_collector" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/wither_aconite.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/wither_aconite" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/exoblaze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/exoblaze.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/fire_ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/fire_ring.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/ice_ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/ice_ring.png -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/book.json: -------------------------------------------------------------------------------- 1 | { 2 | "extend": "botania:lexicon", 3 | "macros": { 4 | "$(item)": "$(1)", 5 | "$(thing)": "$(4)" 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/exoblaze_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/exoblaze_floating" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/hellebore_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/hellebore_floating" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/exoblaze.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "botania:block/shapes/cross", 3 | "textures": { 4 | "cross": "mythicbotany:block/exoblaze" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/exoblaze.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:block/exoblaze" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/fire_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/fire_ring" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/hellebore.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:block/hellebore" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/ice_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/ice_ring" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/aquapanthus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/aquapanthus.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/hellebore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/hellebore.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/raindeletia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/raindeletia.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfheim_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfheim_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_axe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_axe.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/asgard_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/asgard_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/helheim_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/helheim_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/midgard_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/midgard_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/runic_spell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/runic_spell.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/model/alfsteel_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/model/alfsteel_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/model/alfsteel_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/model/alfsteel_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/model/alfsteel_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/model/alfsteel_2.png -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/aquapanthus_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/aquapanthus_floating" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/raindeletia_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/raindeletia_floating" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/hellebore.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "botania:block/shapes/cross", 3 | "textures": { 4 | "cross": "mythicbotany:block/hellebore" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfheim_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfheim_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/aquapanthus.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:block/aquapanthus" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/asgard_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/asgard_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/helheim_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/helheim_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/midgard_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/midgard_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/raindeletia.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:block/raindeletia" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/faded_nether_star.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/nether_star" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_boots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_boots.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_ingot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_ingot.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_pick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_pick.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_sword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_sword.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/niflheim_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/niflheim_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/vanaheim_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/vanaheim_rune.png -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/blockstates/wither_aconite_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "mythicbotany:block/wither_aconite_floating" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/alfsteel_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "mythicbotany:block/alfsteel_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/aquapanthus.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "botania:block/shapes/cross", 3 | "textures": { 4 | "cross": "mythicbotany:block/aquapanthus" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/mana_collector.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "mythicbotany:block/mana_collector" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/raindeletia.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "botania:block/shapes/cross", 3 | "textures": { 4 | "cross": "mythicbotany:block/raindeletia" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_boots.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_boots" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_ingot.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_ingot" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_sword.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_sword" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/niflheim_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/niflheim_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/vanaheim_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/vanaheim_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/wither_aconite.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:block/wither_aconite" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/alfsteel_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/alfsteel_block.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/mana_collector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/mana_collector.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/mana_infuser_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/mana_infuser_top.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/block/wither_aconite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/block/wither_aconite.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_helmet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_helmet.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_leggings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_leggings.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_nugget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_nugget.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/elementium_ingot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/elementium_ingot.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/joetunheim_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/joetunheim_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/muspelheim_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/muspelheim_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/nidavellir_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/nidavellir_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/model/armor_alfsteel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/model/armor_alfsteel.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/model/pylon_alfsteel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/model/pylon_alfsteel.png -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/wither_aconite.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "botania:block/shapes/cross", 3 | "textures": { 4 | "cross": "mythicbotany:block/wither_aconite" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_helmet.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_helmet" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_leggings.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_leggings" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_nugget.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_nugget" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/joetunheim_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/joetunheim_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/muspelheim_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/muspelheim_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/nidavellir_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/nidavellir_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/data/botania/tags/items/generating_special_flowers.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:wither_aconite", 5 | "mythicbotany:raindeletia" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/generated/resources/data/botania/tags/items/terra_pick_blacklist.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:aura_ring_greatest", 5 | "mythicbotany:alfsteel_helmet" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/alfsteel_axe_active.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_axe_active" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/alfsteel_pick_tipped.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_pick_tipped" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_axe_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_axe_active.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_chestplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_chestplate.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/aura_ring_greatest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/aura_ring_greatest.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/dreamwood_twig_wand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/dreamwood_twig_wand.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/mana_ring_greatest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/mana_ring_greatest.png -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_chestplate.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_chestplate" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/aura_ring_greatest.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/aura_ring_greatest" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/mana_ring_greatest.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/mana_ring_greatest" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_armor_upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_armor_upgrade.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_pick_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_pick_active.png -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/alfsteel_pick_tipped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/alfsteel_pick_tipped.png -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/item/alfsteel_armor_upgrade.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_armor_upgrade" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/textures/item/dreamwood_twig_wand_bind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdommen/MythicBotany/master/src/main/resources/assets/mythicbotany/textures/item/dreamwood_twig_wand_bind.png -------------------------------------------------------------------------------- /src/generated/resources/data/botania/tags/items/functional_special_flowers.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:exoblaze", 5 | "mythicbotany:aquapanthus", 6 | "mythicbotany:hellebore" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/exoblaze_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "loader": "botania:floating_flower", 4 | "flower": { 5 | "parent": "mythicbotany:block/exoblaze" 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/hellebore_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "loader": "botania:floating_flower", 4 | "flower": { 5 | "parent": "mythicbotany:block/hellebore" 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/aquapanthus_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "loader": "botania:floating_flower", 4 | "flower": { 5 | "parent": "mythicbotany:block/aquapanthus" 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/raindeletia_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "loader": "botania:floating_flower", 4 | "flower": { 5 | "parent": "mythicbotany:block/raindeletia" 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/mythicbotany/models/block/wither_aconite_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "loader": "botania:floating_flower", 4 | "flower": { 5 | "parent": "mythicbotany:block/wither_aconite" 6 | } 7 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip 6 | -------------------------------------------------------------------------------- /src/main/resources/data/curios/tags/items/ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:mana_ring_greatest", 5 | "mythicbotany:aura_ring_greatest", 6 | "mythicbotany:fire_ring", 7 | "mythicbotany:ice_ring" 8 | ] 9 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Sets default memory used for gradle commands. Can be overridden by user or command line properties. 2 | # This is required to provide enough memory for the Minecraft decompilation process. 3 | org.gradle.jvmargs=-Xmx3G 4 | org.gradle.daemon=false -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/alfsteel_pick_active.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_pick", 5 | "layer1": "mythicbotany:item/alfsteel_pick_active" 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/categories/mythic_botany.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.title", 3 | "description": "lexicon.mythicbotany.description", 4 | "icon": "mythicbotany:alfsteel_sword", 5 | "sortnum": 7 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/alfsteel_pick_tipped_active.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_pick_tipped", 5 | "layer1": "mythicbotany:item/alfsteel_pick_active" 6 | } 7 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Disable autocrlf on generated files, they always generate with LF 2 | # Add any extra files or paths here to make git stop saying they 3 | # are changed when only line endings change. 4 | src/generated/**/.cache/cache text eol=lf 5 | src/generated/**/*.json text eol=lf 6 | -------------------------------------------------------------------------------- /src/generated/resources/data/botania/tags/items/special_flowers.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:exoblaze", 5 | "mythicbotany:wither_aconite", 6 | "mythicbotany:aquapanthus", 7 | "mythicbotany:hellebore", 8 | "mythicbotany:raindeletia" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/block/mana_infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "botania:block/shapes/three_high_bottom_top", 3 | "textures": { 4 | "bottom": "botania:block/elementium_block", 5 | "top": "mythicbotany:block/mana_infuser_top", 6 | "side": "botania:block/elementium_block" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/ModMisc.java: -------------------------------------------------------------------------------- 1 | package mythicbotany; 2 | 3 | import mythicbotany.loot.AlfsteelDisposeModifier; 4 | 5 | public class ModMisc { 6 | 7 | public static void register() { 8 | MythicBotany.getInstance().register("dispose", AlfsteelDisposeModifier.Serializer.INSTANCE); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_axe_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:terra_axe" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_ingot" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:alfsteel_axe" 11 | } 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_pick_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:terra_pick" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_ingot" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:alfsteel_pick" 11 | } 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_sword_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:terra_sword" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_ingot" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:alfsteel_sword" 11 | } 12 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea 15 | 16 | # gradle 17 | build 18 | .gradle 19 | 20 | # other 21 | eclipse 22 | /run* 23 | 24 | # Files from Forge MDK 25 | forge*changelog.txt 26 | /src/generated/resources/.cache -------------------------------------------------------------------------------- /src/generated/resources/data/botania/tags/items/floating_flowers.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:exoblaze_floating", 5 | "mythicbotany:wither_aconite_floating", 6 | "mythicbotany:aquapanthus_floating", 7 | "mythicbotany:hellebore_floating", 8 | "mythicbotany:raindeletia_floating" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_aura_ring_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:aura_ring_greater" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_ingot" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:aura_ring_greatest" 11 | } 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_boots_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:terrasteel_boots" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_armor_upgrade" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:alfsteel_boots" 11 | } 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_mana_ring_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:mana_ring_greater" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_ingot" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:mana_ring_greatest" 11 | } 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_helmet_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:terrasteel_helmet" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_armor_upgrade" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:alfsteel_helmet" 11 | } 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/botania/tags/items/special_floating_flowers.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:exoblaze_floating", 5 | "mythicbotany:wither_aconite_floating", 6 | "mythicbotany:aquapanthus_floating", 7 | "mythicbotany:hellebore_floating", 8 | "mythicbotany:raindeletia_floating" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_leggings_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:terrasteel_leggings" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_armor_upgrade" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:alfsteel_leggings" 11 | } 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_chestplate_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing", 3 | "base": { 4 | "item": "botania:terrasteel_chestplate" 5 | }, 6 | "addition": { 7 | "item": "mythicbotany:alfsteel_armor_upgrade" 8 | }, 9 | "result": { 10 | "item": "mythicbotany:alfsteel_chestplate" 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/dreamwood_twig_wand_bind.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/dreamwood_twig_wand", 5 | "layer1": "botania:item/twig_wand_top", 6 | "layer2": "botania:item/twig_wand_bottom", 7 | "layer3": "mythicbotany:item/dreamwood_twig_wand_bind" 8 | } 9 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_ingot_from_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:alfsteel_ingot_from_block", 4 | "ingredients": [ 5 | { 6 | "item": "mythicbotany:alfsteel_block" 7 | } 8 | ], 9 | "result": { 10 | "item": "mythicbotany:alfsteel_ingot", 11 | "count": 9 12 | } 13 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_nugget_from_ingot.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:alfsteel_nugget_from_ingot", 4 | "ingredients": [ 5 | { 6 | "item": "mythicbotany:alfsteel_ingot" 7 | } 8 | ], 9 | "result": { 10 | "item": "mythicbotany:alfsteel_nugget", 11 | "count": 9 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/alfsteel_axe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_axe" 5 | }, 6 | "overrides": [ 7 | { 8 | "predicate": { 9 | "mythicbotany:active": 1.0 10 | }, 11 | "model": "mythicbotany:item/alfsteel_axe_active" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/exoblaze_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:exoblaze_floating", 4 | "ingredients": [ 5 | { 6 | "tag": "botania:floating_flowers" 7 | }, 8 | { 9 | "item": "mythicbotany:exoblaze" 10 | } 11 | ], 12 | "result": { 13 | "item": "mythicbotany:exoblaze_floating" 14 | } 15 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/hellebore_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:hellebore_floating", 4 | "ingredients": [ 5 | { 6 | "tag": "botania:floating_flowers" 7 | }, 8 | { 9 | "item": "mythicbotany:hellebore" 10 | } 11 | ], 12 | "result": { 13 | "item": "mythicbotany:hellebore_floating" 14 | } 15 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/aquapanthus_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:aquapanthus_floating", 4 | "ingredients": [ 5 | { 6 | "tag": "botania:floating_flowers" 7 | }, 8 | { 9 | "item": "mythicbotany:aquapanthus" 10 | } 11 | ], 12 | "result": { 13 | "item": "mythicbotany:aquapanthus_floating" 14 | } 15 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/raindeletia_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:raindeletia_floating", 4 | "ingredients": [ 5 | { 6 | "tag": "botania:floating_flowers" 7 | }, 8 | { 9 | "item": "mythicbotany:raindeletia" 10 | } 11 | ], 12 | "result": { 13 | "item": "mythicbotany:raindeletia_floating" 14 | } 15 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_block_from_ingots.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:alfsteel_block_from_ingots", 4 | "pattern": [ 5 | "aaa", 6 | "aaa", 7 | "aaa" 8 | ], 9 | "key": { 10 | "a": { 11 | "item": "mythicbotany:alfsteel_ingot" 12 | } 13 | }, 14 | "result": { 15 | "item": "mythicbotany:alfsteel_block" 16 | } 17 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/wither_aconite_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:wither_aconite_floating", 4 | "ingredients": [ 5 | { 6 | "tag": "botania:floating_flowers" 7 | }, 8 | { 9 | "item": "mythicbotany:wither_aconite" 10 | } 11 | ], 12 | "result": { 13 | "item": "mythicbotany:wither_aconite_floating" 14 | } 15 | } -------------------------------------------------------------------------------- /src/main/resources/META-INF/accesstransformer.cfg: -------------------------------------------------------------------------------- 1 | public net.minecraft.tileentity.BrewingStandTileEntity field_184278_m #fuel 2 | public net.minecraft.entity.monster.piglin.AbstractPiglinEntity field_242334_c #timeInOverworld 3 | public net.minecraft.entity.monster.HoglinEntity field_234358_by_ #timeInOverworld 4 | public net.minecraft.item.crafting.RecipeManager func_215366_a(Lnet/minecraft/item/crafting/IRecipeType;)Ljava/util/Map; #getRecipes -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_ingot_from_nuggets.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:alfsteel_ingot_from_nuggets", 4 | "pattern": [ 5 | "aaa", 6 | "aaa", 7 | "aaa" 8 | ], 9 | "key": { 10 | "a": { 11 | "item": "mythicbotany:alfsteel_nugget" 12 | } 13 | }, 14 | "result": { 15 | "item": "mythicbotany:alfsteel_ingot" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/niflheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "item.mythicbotany.ice_ring", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:ice_ring", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "crafting", 9 | "recipe": "mythicbotany:ice_ring", 10 | "text": "lexicon.mythicbotany.niflheim.page1" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/generated/resources/data/botania/tags/items/runes.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "mythicbotany:asgard_rune", 5 | "mythicbotany:vanaheim_rune", 6 | "mythicbotany:alfheim_rune", 7 | "mythicbotany:midgard_rune", 8 | "mythicbotany:joetunheim_rune", 9 | "mythicbotany:muspelheim_rune", 10 | "mythicbotany:niflheim_rune", 11 | "mythicbotany:nidavellir_rune", 12 | "mythicbotany:helheim_rune" 13 | ] 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/muspelheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "item.mythicbotany.fire_ring", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:fire_ring", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "crafting", 9 | "recipe": "mythicbotany:fire_ring", 10 | "text": "lexicon.mythicbotany.muspelheim.page1" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/ice_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:ice_ring", 4 | "pattern": [ 5 | "gm ", 6 | "m m", 7 | " m " 8 | ], 9 | "key": { 10 | "m": { 11 | "item": "botania:elementium_ingot" 12 | }, 13 | "g": { 14 | "item": "mythicbotany:niflheim_rune" 15 | } 16 | }, 17 | "result": { 18 | "item": "mythicbotany:ice_ring" 19 | } 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/fire_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:fire_ring", 4 | "pattern": [ 5 | "gm ", 6 | "m m", 7 | " m " 8 | ], 9 | "key": { 10 | "m": { 11 | "item": "botania:elementium_ingot" 12 | }, 13 | "g": { 14 | "item": "mythicbotany:muspelheim_rune" 15 | } 16 | }, 17 | "result": { 18 | "item": "mythicbotany:fire_ring" 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/wand.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.wand.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:dreamwood_twig_wand", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "crafting", 9 | "recipe": "mythicbotany:dreamwood_twig_wand", 10 | "text": "lexicon.mythicbotany.wand.page1" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/exoblaze.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:exoblaze" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/hellebore.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:hellebore" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/dreamwood_twig_wand.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "mythicbotany:dreamwood_twig_wand", 3 | "group": "mythicbotany:dreamwood_twig_wand", 4 | "pattern": [ 5 | " pt", 6 | " tp", 7 | "t " 8 | ], 9 | "key": { 10 | "p": { 11 | "tag": "botania:petals" 12 | }, 13 | "t": { 14 | "item": "botania:dreamwood_twig" 15 | } 16 | }, 17 | "result": { 18 | "item": "mythicbotany:dreamwood_twig_wand" 19 | } 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/petal_apothecary/wither_aconite.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:petal_apothecary", 3 | "output": { 4 | "item": "mythicbotany:wither_aconite" 5 | }, 6 | "ingredients": [ 7 | { 8 | "tag": "botania:petals/black" 9 | }, 10 | { 11 | "tag": "botania:petals/black" 12 | }, 13 | { 14 | "tag": "botania:runes/pride" 15 | }, 16 | { 17 | "item": "minecraft:wither_rose" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MythicBotany 2 | 3 | [![CurseForge](http://cf.way2muchnoise.eu/full_400058_downloads.svg)](https://www.curseforge.com/minecraft/mc-mods/mythicbotany) 4 | [![Issues](https://img.shields.io/github/issues/noeppi-noeppi/MythicBotany?label=Issues)](https://github.com/noeppi-noeppi/MythicBotany/issues) 5 | 6 | MythicBotany is an addon for botania that tries to expand Botania a little bit but keep the design principle of it. 7 | 8 | https://www.curseforge.com/minecraft/mc-mods/mythicbotany 9 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/aquapanthus.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:aquapanthus" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/raindeletia.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:raindeletia" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_armor_upgrade.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "mythicbotany:alfsteel_armor_upgrade", 4 | "ingredients": [ 5 | { 6 | "item": "mythicbotany:alfsteel_ingot" 7 | }, 8 | { 9 | "item": "mythicbotany:alfsteel_ingot" 10 | }, 11 | { 12 | "tag": "forge:dusts/mana" 13 | } 14 | ], 15 | "result": { 16 | "item": "mythicbotany:alfsteel_armor_upgrade" 17 | } 18 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/alfsteel_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:alfsteel_block" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/alfsteel_pylon.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:alfsteel_pylon" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/mana_collector.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:mana_collector" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/mana_infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:mana_infuser" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/wither_aconite.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:wither_aconite" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/exoblaze_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:exoblaze_floating" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/hellebore_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:hellebore_floating" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/dreamwood_twig_wand.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/dreamwood_twig_wand", 5 | "layer1": "botania:item/twig_wand_top", 6 | "layer2": "botania:item/twig_wand_bottom" 7 | }, 8 | "overrides": [ 9 | { 10 | "predicate": { 11 | "mythicbotany:bindmode": 1.0 12 | }, 13 | "model": "mythicbotany:item/dreamwood_twig_wand_bind" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/aquapanthus_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:aquapanthus_floating" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/raindeletia_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:raindeletia_floating" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/BlockLootProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data; 2 | 3 | import io.github.noeppi_noeppi.libx.data.provider.BlockLootProviderBase; 4 | import io.github.noeppi_noeppi.libx.mod.ModX; 5 | import net.minecraft.data.DataGenerator; 6 | 7 | public class BlockLootProvider extends BlockLootProviderBase { 8 | 9 | public BlockLootProvider(ModX mod, DataGenerator generator) { 10 | super(mod, generator); 11 | } 12 | 13 | @Override 14 | protected void setup() { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/loot_tables/blocks/wither_aconite_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "name": "main", 6 | "rolls": 1, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "mythicbotany:wither_aconite_floating" 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "condition": "minecraft:survives_explosion" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/mythicbotany_infusion/terrasteel_ingot.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "mythicbotany:infusion", 3 | "group": "infuser", 4 | "output": { 5 | "item": "botania:terrasteel_ingot" 6 | }, 7 | "mana": 500000, 8 | "ingredients": [ 9 | { 10 | "tag": "forge:ingots/manasteel" 11 | }, 12 | { 13 | "item": "botania:mana_pearl" 14 | }, 15 | { 16 | "tag": "forge:gems/mana_diamond" 17 | } 18 | ], 19 | "fromColor": 255, 20 | "toColor": 65280 21 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/mythicbotany_infusion/alfsteel_ingot.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "mythicbotany:infusion", 3 | "group": "infuser", 4 | "output": { 5 | "item": "mythicbotany:alfsteel_ingot" 6 | }, 7 | "mana": 2000000, 8 | "ingredients": [ 9 | { 10 | "tag": "forge:ingots/elementium" 11 | }, 12 | { 13 | "tag": "forge:gems/dragonstone" 14 | }, 15 | { 16 | "item": "botania:pixie_dust" 17 | } 18 | ], 19 | "fromColor": 16711821, 20 | "toColor": 16750080 21 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/petal_apothecary/hellebore.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:petal_apothecary", 3 | "output": { 4 | "item": "mythicbotany:hellebore" 5 | }, 6 | "ingredients": [ 7 | { 8 | "tag": "botania:petals/red" 9 | }, 10 | { 11 | "tag": "botania:petals/red" 12 | }, 13 | { 14 | "tag": "botania:petals/purple" 15 | }, 16 | { 17 | "tag": "botania:petals/cyan" 18 | }, 19 | { 20 | "tag": "botania:runes/fire" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/petal_apothecary/aquapanthus.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:petal_apothecary", 3 | "output": { 4 | "item": "mythicbotany:aquapanthus" 5 | }, 6 | "ingredients": [ 7 | { 8 | "tag": "botania:petals/blue" 9 | }, 10 | { 11 | "tag": "botania:petals/blue" 12 | }, 13 | { 14 | "tag": "botania:petals/light_blue" 15 | }, 16 | { 17 | "tag": "botania:petals/green" 18 | }, 19 | { 20 | "tag": "botania:petals/cyan" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/alfsteel_pylon.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:alfsteel_pylon", 4 | "pattern": [ 5 | " n ", 6 | "npn", 7 | " g " 8 | ], 9 | "key": { 10 | "n": { 11 | "item": "mythicbotany:alfsteel_nugget" 12 | }, 13 | "g": { 14 | "item": "minecraft:ghast_tear" 15 | }, 16 | "p": { 17 | "item": "botania:natura_pylon" 18 | } 19 | }, 20 | "result": { 21 | "item": "mythicbotany:alfsteel_pylon" 22 | } 23 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/petal_apothecary/raindeletia.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:petal_apothecary", 3 | "output": { 4 | "item": "mythicbotany:raindeletia" 5 | }, 6 | "ingredients": [ 7 | { 8 | "tag": "botania:petals/light_blue" 9 | }, 10 | { 11 | "tag": "botania:petals/blue" 12 | }, 13 | { 14 | "tag": "botania:petals/magenta" 15 | }, 16 | { 17 | "tag": "botania:petals/white" 18 | }, 19 | { 20 | "tag": "botania:runes/water" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/niflheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:niflheim_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "tag": "forge:ingots/iron" 10 | }, 11 | { 12 | "tag": "botania:runes/water" 13 | }, 14 | { 15 | "tag": "botania:runes/winter" 16 | }, 17 | { 18 | "tag": "botania:runes/wrath" 19 | }, 20 | { 21 | "item": "minecraft:blue_ice" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/asgard.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:asgard_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "item": "minecraft:netherite_ingot" 10 | }, 11 | { 12 | "tag": "botania:runes/air" 13 | }, 14 | { 15 | "tag": "botania:runes/autumn" 16 | }, 17 | { 18 | "tag": "botania:runes/pride" 19 | }, 20 | { 21 | "item": "botania:rainbow_rod" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/midgard.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:midgard_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "tag": "forge:ingots/manasteel" 10 | }, 11 | { 12 | "tag": "botania:runes/earth" 13 | }, 14 | { 15 | "tag": "botania:runes/spring" 16 | }, 17 | { 18 | "tag": "botania:runes/greed" 19 | }, 20 | { 21 | "item": "minecraft:grass_block" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/nidavellir.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:nidavellir_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "tag": "forge:ingots/brick" 10 | }, 11 | { 12 | "tag": "botania:runes/earth" 13 | }, 14 | { 15 | "tag": "botania:runes/winter" 16 | }, 17 | { 18 | "tag": "botania:runes/sloth" 19 | }, 20 | { 21 | "item": "minecraft:iron_block" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/joetunheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:joetunheim_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "tag": "forge:ingots/brick" 10 | }, 11 | { 12 | "tag": "botania:runes/earth" 13 | }, 14 | { 15 | "tag": "botania:runes/autumn" 16 | }, 17 | { 18 | "tag": "botania:runes/gluttony" 19 | }, 20 | { 21 | "item": "minecraft:blackstone" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/vanaheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:vanaheim_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "item": "minecraft:netherite_ingot" 10 | }, 11 | { 12 | "tag": "botania:runes/earth" 13 | }, 14 | { 15 | "tag": "botania:runes/spring" 16 | }, 17 | { 18 | "tag": "botania:runes/pride" 19 | }, 20 | { 21 | "item": "botania:alfheim_portal" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/muspelheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:muspelheim_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "tag": "forge:ingots/nether_brick" 10 | }, 11 | { 12 | "tag": "botania:runes/fire" 13 | }, 14 | { 15 | "tag": "botania:runes/summer" 16 | }, 17 | { 18 | "tag": "botania:runes/wrath" 19 | }, 20 | { 21 | "item": "minecraft:magma_block" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/modified_gaia_pylon_with_alfsteel.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:modified_gaia_pylon_with_alfsteel", 4 | "pattern": [ 5 | " d ", 6 | "epe", 7 | " d " 8 | ], 9 | "key": { 10 | "d": { 11 | "item": "botania:pixie_dust" 12 | }, 13 | "e": { 14 | "tag": "forge:ingots/elementium" 15 | }, 16 | "p": { 17 | "item": "mythicbotany:alfsteel_pylon" 18 | } 19 | }, 20 | "result": { 21 | "item": "botania:gaia_pylon" 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/pylon/PylonRepairable.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.pylon; 2 | 3 | import net.minecraft.item.ItemStack; 4 | 5 | public interface PylonRepairable { 6 | 7 | int getRepairManaPerTick(ItemStack stack); 8 | 9 | default boolean canRepairPylon(ItemStack stack) { 10 | return stack.getDamage() > 0; 11 | } 12 | 13 | default ItemStack repairOneTick(ItemStack stack) { 14 | if (stack.getDamage() > 0) { 15 | stack.setDamage(Math.max(0, stack.getDamage() - 1)); 16 | } 17 | return stack; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/pylon.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.pylon.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:alfsteel_pylon", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "text", 9 | "text": "lexicon.mythicbotany.pylon.page1" 10 | }, 11 | { 12 | "type": "crafting", 13 | "recipe": "mythicbotany:alfsteel_pylon", 14 | "recipe2": "mythicbotany:modified_gaia_pylon_with_alfsteel" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/petal_apothecary/exoblaze.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:petal_apothecary", 3 | "output": { 4 | "item": "mythicbotany:exoblaze" 5 | }, 6 | "ingredients": [ 7 | { 8 | "tag": "botania:petals/yellow" 9 | }, 10 | { 11 | "tag": "botania:petals/yellow" 12 | }, 13 | { 14 | "tag": "botania:petals/gray" 15 | }, 16 | { 17 | "tag": "botania:petals/light_gray" 18 | }, 19 | { 20 | "tag": "botania:runes/fire" 21 | }, 22 | { 23 | "item": "minecraft:blaze_powder" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/mana_collector.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:mana_collector", 4 | "pattern": [ 5 | "dgd", 6 | "dpd", 7 | "dmd" 8 | ], 9 | "key": { 10 | "d": { 11 | "item": "botania:glimmering_dreamwood" 12 | }, 13 | "g": { 14 | "item": "botania:gaia_ingot" 15 | }, 16 | "p": { 17 | "item": "botania:pixie_dust" 18 | }, 19 | "m": { 20 | "item": "mythicbotany:vanaheim_rune" 21 | } 22 | }, 23 | "result": { 24 | "item": "mythicbotany:mana_collector" 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/ModRecipes.java: -------------------------------------------------------------------------------- 1 | package mythicbotany; 2 | 3 | import mythicbotany.infuser.IInfuserRecipe; 4 | import mythicbotany.infuser.InfuserRecipe; 5 | import net.minecraft.item.crafting.IRecipeSerializer; 6 | import net.minecraft.item.crafting.IRecipeType; 7 | 8 | public class ModRecipes { 9 | 10 | public static final IRecipeType INFUSER = IRecipeType.register("infusion"); 11 | 12 | public static final IRecipeSerializer INFUSER_SERIALIZER = new InfuserRecipe.Serializer(); 13 | 14 | public static void register() { 15 | MythicBotany.getInstance().register(INFUSER.toString(), INFUSER_SERIALIZER); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/manaband.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.manaband.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:aura_ring_greatest", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "spotlight", 9 | "item": "mythicbotany:mana_ring_greatest", 10 | "link_recipe": true, 11 | "text": "lexicon.mythicbotany.manaband.page1" 12 | }, 13 | { 14 | "type": "spotlight", 15 | "item": "mythicbotany:aura_ring_greatest", 16 | "link_recipe": true, 17 | "text": "lexicon.mythicbotany.manaband.page2" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/alftools/GreatestManaRing.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.alftools; 2 | 3 | import net.minecraft.item.ItemStack; 4 | import net.minecraft.world.World; 5 | import vazkii.botania.common.item.equipment.bauble.ItemManaRing; 6 | 7 | public class GreatestManaRing extends ItemManaRing { 8 | 9 | private static final int MAX_MANA = 4000000; 10 | 11 | public GreatestManaRing(Properties props) { 12 | super(props); 13 | } 14 | 15 | public int getMaxMana(ItemStack stack) { 16 | return MAX_MANA; 17 | } 18 | 19 | @Override 20 | public int getEntityLifespan(ItemStack itemStack, World world) { 21 | return Integer.MAX_VALUE; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/alfsteel_pick.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "mythicbotany:item/alfsteel_pick" 5 | }, 6 | "overrides": [ 7 | { 8 | "predicate": { 9 | "mythicbotany:active": 1.0 10 | }, 11 | "model": "mythicbotany:item/alfsteel_pick_active" 12 | }, 13 | { 14 | "predicate": { 15 | "mythicbotany:tipped": 1.0 16 | }, 17 | "model": "mythicbotany:item/alfsteel_pick_tipped" 18 | }, 19 | { 20 | "predicate": { 21 | "mythicbotany:tipped": 1.0, 22 | "mythicbotany:active": 1.0 23 | }, 24 | "model": "mythicbotany:item/alfsteel_pick_tipped_active" 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_axe_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_axe_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_axe_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:terra_axe" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_axe_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_axe_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/BlockTagProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data; 2 | 3 | import io.github.noeppi_noeppi.libx.data.provider.BlockTagProviderBase; 4 | import io.github.noeppi_noeppi.libx.mod.ModX; 5 | import mythicbotany.ModBlocks; 6 | import net.minecraft.data.DataGenerator; 7 | import net.minecraft.tags.BlockTags; 8 | import net.minecraftforge.common.data.ExistingFileHelper; 9 | 10 | public class BlockTagProvider extends BlockTagProviderBase { 11 | 12 | public BlockTagProvider(ModX mod, DataGenerator generatorIn, ExistingFileHelper fileHelper) { 13 | super(mod, generatorIn, fileHelper); 14 | } 15 | 16 | @Override 17 | protected void setup() { 18 | getOrCreateBuilder(BlockTags.BEACON_BASE_BLOCKS).add(ModBlocks.alfsteelBlock); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_pick_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_pick_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_pick_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:terra_pick" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_pick_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_pick_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_boots_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_boots_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_boots_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:terra_boots" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_boots_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_boots_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_sword_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_sword_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_sword_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:terra_sword" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_sword_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_sword_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_helmet_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_helmet_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_helmet_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:terra_helm" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_helmet_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_helmet_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/ice_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:ice_ring" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:niflheim_rune" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:ice_ring" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_leggings_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_leggings_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_leggings_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:terra_legs" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_leggings_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_leggings_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/fire_ring.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:fire_ring" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:muspelheim_rune" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:fire_ring" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_pylon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_pylon" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "botania:natura_pylon" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:alfsteel_pylon" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/mana_collector.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:mana_collector" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "botania:gaia_ingot" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:mana_collector" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/mana_infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:mana_infuser" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:asgard_rune" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:mana_infuser" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_aura_ring_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_aura_ring_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_aura_ring_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:aura_ring_greater" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_aura_ring_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_aura_ring_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_chestplate_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_chestplate_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_chestplate_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:terra_chest" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_chestplate_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_chestplate_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_mana_ring_smithing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_mana_ring_smithing" 6 | ] 7 | }, 8 | "criteria": { 9 | "alfsteel_mana_ring_criteria": { 10 | "trigger": "minecraft:recipe_unlocked", 11 | "conditions": { 12 | "recipe": "botania:mana_ring_greater" 13 | } 14 | }, 15 | "has_the_recipe": { 16 | "trigger": "minecraft:recipe_unlocked", 17 | "conditions": { 18 | "recipe": "mythicbotany:alfsteel_mana_ring_smithing" 19 | } 20 | } 21 | }, 22 | "requirements": [ 23 | [ 24 | "alfsteel_mana_ring_criteria", 25 | "has_the_recipe" 26 | ] 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/dreamwood_twig_wand.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:dreamwood_twig_wand" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "tag": "botania:petals" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:dreamwood_twig_wand" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/exoblaze_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:exoblaze_floating" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:exoblaze" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:exoblaze_floating" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/hellebore_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:hellebore_floating" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:hellebore" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:hellebore_floating" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/mana_infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "mythicbotany:infuser", 4 | "pattern": [ 5 | "eee", 6 | "wdz", 7 | "xay" 8 | ], 9 | "key": { 10 | "e": { 11 | "tag": "forge:ingots/elementium" 12 | }, 13 | "d": { 14 | "item": "botania:glimmering_dreamwood" 15 | }, 16 | "a": { 17 | "item": "mythicbotany:asgard_rune" 18 | }, 19 | "w": { 20 | "tag": "botania:runes/spring" 21 | }, 22 | "x": { 23 | "tag": "botania:runes/summer" 24 | }, 25 | "y": { 26 | "tag": "botania:runes/autumn" 27 | }, 28 | "z": { 29 | "tag": "botania:runes/winter" 30 | } 31 | }, 32 | "result": { 33 | "item": "mythicbotany:mana_infuser" 34 | } 35 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/aquapanthus_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:aquapanthus_floating" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:aquapanthus" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:aquapanthus_floating" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/raindeletia_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:raindeletia_floating" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:raindeletia" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:raindeletia_floating" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_armor_upgrade.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_armor_upgrade" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:alfsteel_ingot" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:alfsteel_armor_upgrade" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/wither_aconite_floating.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:wither_aconite_floating" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:wither_aconite" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:wither_aconite_floating" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/config/ClientConfig.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.config; 2 | 3 | import net.minecraftforge.common.ForgeConfigSpec; 4 | 5 | public class ClientConfig { 6 | 7 | public static final ForgeConfigSpec CLIENT_CONFIG; 8 | private static final ForgeConfigSpec.Builder CLIENT_BUILDER = new ForgeConfigSpec.Builder(); 9 | 10 | static { 11 | init(CLIENT_BUILDER); 12 | CLIENT_CONFIG = CLIENT_BUILDER.build(); 13 | } 14 | 15 | public static ForgeConfigSpec.ConfigValue ringParticles; 16 | 17 | public static void init(ForgeConfigSpec.Builder builder) { 18 | ringParticles = builder.comment("Set to false to disable particles from the mythicbotany rings for your own player. You'll still see them from other players.").define("ring_particles", true); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_ingot_from_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_ingot_from_block" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:alfsteel_block" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:alfsteel_ingot_from_block" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_block_from_ingots.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_block_from_ingots" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:alfsteel_ingot" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:alfsteel_block_from_ingots" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_nugget_from_ingot.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_nugget_from_ingot" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:alfsteel_ingot" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:alfsteel_nugget_from_ingot" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/mythicbotany/alfsteel_ingot_from_nuggets.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:alfsteel_ingot_from_nuggets" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:alfsteel_nugget" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:alfsteel_ingot_from_nuggets" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/advancements/recipes/botania/modified_gaia_pylon_with_alfsteel.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "mythicbotany:modified_gaia_pylon_with_alfsteel" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_item": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "item": "mythicbotany:alfsteel_pylon" 15 | } 16 | ] 17 | } 18 | }, 19 | "has_the_recipe": { 20 | "trigger": "minecraft:recipe_unlocked", 21 | "conditions": { 22 | "recipe": "mythicbotany:modified_gaia_pylon_with_alfsteel" 23 | } 24 | } 25 | }, 26 | "requirements": [ 27 | [ 28 | "has_item", 29 | "has_the_recipe" 30 | ] 31 | ] 32 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/alftools/GreatestAuraRing.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.alftools; 2 | 3 | import net.minecraft.entity.LivingEntity; 4 | import net.minecraft.entity.player.PlayerEntity; 5 | import net.minecraft.item.ItemStack; 6 | import vazkii.botania.api.mana.IManaGivingItem; 7 | import vazkii.botania.api.mana.ManaItemHandler; 8 | import vazkii.botania.common.item.equipment.bauble.ItemBauble; 9 | 10 | public class GreatestAuraRing extends ItemBauble implements IManaGivingItem { 11 | 12 | public GreatestAuraRing(Properties props) { 13 | super(props); 14 | } 15 | 16 | public void onWornTick(ItemStack stack, LivingEntity player) { 17 | if (!player.world.isRemote && player instanceof PlayerEntity) { 18 | ManaItemHandler.instance().dispatchManaExact(stack, (PlayerEntity)player, 4, true); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/generating.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.generating.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:wither_aconite", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "botania:petal_apothecary", 9 | "recipe": "mythicbotany:petal_apothecary/wither_aconite", 10 | "text": "lexicon.mythicbotany.generating.page1" 11 | }, 12 | { 13 | "type": "botania:petal_apothecary", 14 | "recipe": "mythicbotany:petal_apothecary/raindeletia", 15 | "text": "lexicon.mythicbotany.generating.page2" 16 | }, 17 | { 18 | "type": "crafting", 19 | "recipe": "mythicbotany:mana_collector", 20 | "text": "lexicon.mythicbotany.generating.page3" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env groovy 2 | 3 | pipeline { 4 | agent any 5 | stages { 6 | stage('Clean') { 7 | steps { 8 | echo 'Cleaning Project' 9 | sh 'chmod +x gradlew' 10 | sh './gradlew clean' 11 | } 12 | } 13 | 14 | stage('Build') { 15 | steps { 16 | echo 'Building' 17 | sh './gradlew build' 18 | } 19 | } 20 | 21 | stage('Archive artifacts') { 22 | steps { 23 | echo 'Archive' 24 | archiveArtifacts 'build/libs*/*jar' 25 | } 26 | } 27 | 28 | stage('Publish artifacts') { 29 | steps { 30 | echo 'Publishing' 31 | sh './gradlew publish' 32 | } 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/AlfSwordLeftClickSerializer.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import io.github.noeppi_noeppi.libx.network.PacketSerializer; 4 | import net.minecraft.network.PacketBuffer; 5 | 6 | public class AlfSwordLeftClickSerializer implements PacketSerializer { 7 | 8 | @Override 9 | public Class messageClass() { 10 | return AlfSwordLeftClickMessage.class; 11 | } 12 | 13 | @Override 14 | public void encode(AlfSwordLeftClickMessage msg, PacketBuffer buffer) { 15 | // 16 | } 17 | 18 | @Override 19 | public AlfSwordLeftClickMessage decode(PacketBuffer buffer) { 20 | return new AlfSwordLeftClickMessage(); 21 | } 22 | 23 | public static class AlfSwordLeftClickMessage { 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/helheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:helheim_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "tag": "forge:ingots/gold" 10 | }, 11 | { 12 | "tag": "botania:runes/fire" 13 | }, 14 | { 15 | "tag": "botania:runes/autumn" 16 | }, 17 | { 18 | "tag": "botania:runes/envy" 19 | }, 20 | [ 21 | { 22 | "item": "minecraft:skeleton_skull" 23 | }, 24 | { 25 | "item": "minecraft:wither_skeleton_skull" 26 | }, 27 | { 28 | "item": "minecraft:creeper_head" 29 | }, 30 | { 31 | "item": "minecraft:dragon_head" 32 | }, 33 | { 34 | "item": "minecraft:zombie_head" 35 | } 36 | ] 37 | ] 38 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/functional.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.functional.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:hellebore", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "botania:petal_apothecary", 9 | "recipe": "mythicbotany:petal_apothecary/exoblaze", 10 | "text": "lexicon.mythicbotany.functional.page1" 11 | }, 12 | { 13 | "type": "botania:petal_apothecary", 14 | "recipe": "mythicbotany:petal_apothecary/aquapanthus", 15 | "text": "lexicon.mythicbotany.functional.page2" 16 | }, 17 | { 18 | "type": "botania:petal_apothecary", 19 | "recipe": "mythicbotany:petal_apothecary/hellebore", 20 | "text": "lexicon.mythicbotany.functional.page3" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/generated/resources/data/mythicbotany/recipes/runic_altar/alfheim.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "botania:runic_altar", 3 | "output": { 4 | "item": "mythicbotany:alfheim_rune" 5 | }, 6 | "mana": 16000, 7 | "ingredients": [ 8 | { 9 | "tag": "forge:ingots/elementium" 10 | }, 11 | { 12 | "tag": "botania:runes/air" 13 | }, 14 | { 15 | "tag": "botania:runes/summer" 16 | }, 17 | { 18 | "tag": "botania:runes/lust" 19 | }, 20 | [ 21 | { 22 | "item": "minecraft:acacia_leaves" 23 | }, 24 | { 25 | "item": "minecraft:birch_leaves" 26 | }, 27 | { 28 | "item": "minecraft:dark_oak_leaves" 29 | }, 30 | { 31 | "item": "minecraft:jungle_leaves" 32 | }, 33 | { 34 | "item": "minecraft:oak_leaves" 35 | }, 36 | { 37 | "item": "minecraft:spruce_leaves" 38 | } 39 | ] 40 | ] 41 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/recipes/SmeltingProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data.recipes; 2 | 3 | import net.minecraft.data.DataGenerator; 4 | import net.minecraft.data.IFinishedRecipe; 5 | import net.minecraft.data.RecipeProvider; 6 | 7 | import javax.annotation.Nonnull; 8 | import java.util.function.Consumer; 9 | 10 | public class SmeltingProvider extends RecipeProvider { 11 | 12 | public SmeltingProvider(DataGenerator generatorIn) { 13 | super(generatorIn); 14 | } 15 | 16 | @Override 17 | @Nonnull 18 | public String getName() { 19 | return "MythicBotany smelting recipes"; 20 | } 21 | 22 | @Override 23 | protected void registerRecipes(@Nonnull Consumer consumer) { 24 | /*CookingRecipeBuilder.smeltingRecipe(Ingredient.fromItems(ModFluffBlocks.biomeCobblestoneForest), ModFluffBlocks.biomeStoneForest, 0.1f, 200) 25 | .addCriterion("has_item", hasItem(ModFluffBlocks.biomeCobblestoneForest)) 26 | .build(consumer, "botania:smelting/metamorphic_forest_stone");*/ 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/infuser/IInfuserRecipe.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.infuser; 2 | 3 | import mythicbotany.ModRecipes; 4 | import net.minecraft.inventory.IInventory; 5 | import net.minecraft.item.ItemStack; 6 | import net.minecraft.item.crafting.IRecipe; 7 | import net.minecraft.item.crafting.IRecipeType; 8 | 9 | import javax.annotation.Nonnull; 10 | import java.util.List; 11 | 12 | public interface IInfuserRecipe extends IRecipe { 13 | 14 | int getManaUsage(); 15 | 16 | int fromColor(); 17 | 18 | int toColor(); 19 | 20 | @Nonnull 21 | @Override 22 | default IRecipeType getType() { 23 | return ModRecipes.INFUSER; 24 | } 25 | 26 | @Nonnull 27 | @Override 28 | default ItemStack getCraftingResult(@Nonnull IInventory inv) { 29 | return ItemStack.EMPTY; 30 | } 31 | 32 | @Override 33 | default boolean canFit(int width, int height) { 34 | return false; 35 | } 36 | 37 | ItemStack result(List inputs); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/AlfSwordLeftClickHandler.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import mythicbotany.ModItems; 4 | import mythicbotany.alftools.AlfsteelSword; 5 | import net.minecraft.entity.player.ServerPlayerEntity; 6 | import net.minecraft.inventory.EquipmentSlotType; 7 | import net.minecraftforge.fml.network.NetworkEvent; 8 | 9 | import java.util.function.Supplier; 10 | 11 | public class AlfSwordLeftClickHandler { 12 | 13 | public static void handle(AlfSwordLeftClickSerializer.AlfSwordLeftClickMessage msg, Supplier ctx) { 14 | ctx.get().enqueueWork(() -> { 15 | ServerPlayerEntity sender = ctx.get().getSender(); 16 | if (sender != null && (sender.getItemStackFromSlot(EquipmentSlotType.MAINHAND).getItem() == ModItems.alfsteelSword 17 | || sender.getItemStackFromSlot(EquipmentSlotType.OFFHAND).getItem() == ModItems.alfsteelSword)) 18 | ((AlfsteelSword) ModItems.alfsteelSword).trySpawnBurst((ctx.get()).getSender()); 19 | }); 20 | ctx.get().setPacketHandled(true); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/PylonHandler.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import net.minecraft.client.Minecraft; 4 | import net.minecraftforge.fml.network.NetworkEvent; 5 | import vazkii.botania.client.fx.WispParticleData; 6 | 7 | import java.util.function.Supplier; 8 | 9 | public class PylonHandler { 10 | 11 | public static void handle(PylonSerializer.PylonMessage msg, Supplier ctx) { 12 | ctx.get().enqueueWork(() -> { 13 | if (Minecraft.getInstance().world == null || !Minecraft.getInstance().world.getDimensionKey().getRegistryName().equals(msg.dimension)) 14 | return; 15 | WispParticleData data = WispParticleData.wisp(0.85f, 1f, 0.6f, 0f, 0.25f); 16 | Minecraft.getInstance().world.addParticle(data, msg.pos.getX() + 0.25 + (Minecraft.getInstance().world.rand.nextFloat() / 2), msg.pos.getY() + 0.75 + (Minecraft.getInstance().world.rand.nextFloat() / 4), msg.pos.getZ() + 0.25 + (Minecraft.getInstance().world.rand.nextFloat() / 2), 0, 0.3, 0); 17 | }); 18 | ctx.get().setPacketHandled(true); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/mods.toml: -------------------------------------------------------------------------------- 1 | modLoader="javafml" 2 | loaderVersion="[35,)" 3 | license="APACHE-2.0" 4 | issueTrackerURL="http://placeholder.invalid" 5 | 6 | [[mods]] 7 | modId="mythicbotany" 8 | version="${file.jarVersion}" 9 | displayName="MythicBotany" 10 | displayURL="http://placeholder.invalid" 11 | authors="noeppi_noeppi, Contributors: MelanX" 12 | description=''' 13 | Dive deeper into the world of botania. 14 | ''' 15 | 16 | [[dependencies.mythicbotany]] 17 | modId="forge" 18 | mandatory=true 19 | versionRange="[35,)" 20 | ordering="NONE" 21 | side="BOTH" 22 | 23 | [[dependencies.mythicbotany]] 24 | modId="minecraft" 25 | mandatory=true 26 | versionRange="[1.16.4,)" 27 | ordering="NONE" 28 | side="BOTH" 29 | 30 | [[dependencies.mythicbotany]] 31 | modId="botania" 32 | mandatory=true 33 | versionRange="[1.16.4-413,)" 34 | ordering="NONE" 35 | side="BOTH" 36 | 37 | [[dependencies.mythicbotany]] 38 | modId="jei" 39 | mandatory=false 40 | versionRange="[1.16.1-7.0.0.6,)" 41 | ordering="NONE" 42 | side="CLIENT" 43 | 44 | [[dependencies.mythicbotany]] 45 | modId="libx" 46 | mandatory=true 47 | versionRange="[1.16.3-1.0.39,)" 48 | ordering="NONE" 49 | side="BOTH" -------------------------------------------------------------------------------- /src/main/java/mythicbotany/bauble/ItemIceRing.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.bauble; 2 | 3 | import mythicbotany.config.ClientConfig; 4 | import net.minecraft.client.Minecraft; 5 | import net.minecraft.entity.LivingEntity; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.particles.ParticleTypes; 8 | import net.minecraftforge.api.distmarker.Dist; 9 | import net.minecraftforge.api.distmarker.OnlyIn; 10 | import vazkii.botania.common.item.equipment.bauble.ItemBauble; 11 | 12 | public class ItemIceRing extends ItemBauble { 13 | 14 | public ItemIceRing(Properties props) { 15 | super(props); 16 | } 17 | 18 | public void onWornTick(ItemStack stack, LivingEntity player) { 19 | if (player.world.isRemote) { 20 | displayParticles(player); 21 | } 22 | } 23 | 24 | @OnlyIn(Dist.CLIENT) 25 | private void displayParticles(LivingEntity player) { 26 | if (Math.random() < 0.03 && (ClientConfig.ringParticles.get() || player != Minecraft.getInstance().player)) { 27 | player.getEntityWorld().addParticle(ParticleTypes.ITEM_SNOWBALL, 28 | player.getPosX(), 29 | player.getPosY() + 1.85, 30 | player.getPosZ(), 31 | 0, 0, 0); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/ParticleHandler.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import mythicbotany.MythicBotany; 4 | import net.minecraft.client.Minecraft; 5 | import net.minecraft.particles.BasicParticleType; 6 | import net.minecraft.particles.ParticleType; 7 | import net.minecraft.world.World; 8 | import net.minecraftforge.fml.network.NetworkEvent; 9 | import net.minecraftforge.registries.ForgeRegistries; 10 | 11 | import java.util.function.Supplier; 12 | 13 | public class ParticleHandler { 14 | 15 | public static void handle(ParticleSerializer.ParticleMessage msg, Supplier ctx) { 16 | ctx.get().enqueueWork(() -> { 17 | World world = Minecraft.getInstance().world; 18 | if (world == null || !world.getDimensionKey().getRegistryName().equals(msg.dimension)) 19 | return; 20 | ParticleType particle = ForgeRegistries.PARTICLE_TYPES.getValue(msg.particleId); 21 | if (particle instanceof BasicParticleType) { 22 | MythicBotany.getNetwork().spawnParticle(world, (BasicParticleType) particle, msg.amount, msg.x, msg.y, msg.z, msg.xm, msg.ym, msg.zm, msg.xd, msg.yd, msg.zd, msg.randomizePosition); 23 | } 24 | }); 25 | ctx.get().setPacketHandled(true); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/bauble/ItemFireRing.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.bauble; 2 | 3 | import mythicbotany.config.ClientConfig; 4 | import net.minecraft.client.Minecraft; 5 | import net.minecraft.entity.LivingEntity; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.particles.ParticleTypes; 8 | import net.minecraftforge.api.distmarker.Dist; 9 | import net.minecraftforge.api.distmarker.OnlyIn; 10 | import vazkii.botania.common.item.equipment.bauble.ItemBauble; 11 | 12 | public class ItemFireRing extends ItemBauble { 13 | 14 | public ItemFireRing(Properties props) { 15 | super(props); 16 | } 17 | 18 | public void onWornTick(ItemStack stack, LivingEntity player) { 19 | if (player.world.isRemote) { 20 | displayParticles(player); 21 | } 22 | } 23 | 24 | @OnlyIn(Dist.CLIENT) 25 | private void displayParticles(LivingEntity player) { 26 | if (Math.random() < 0.03 && (ClientConfig.ringParticles.get() || player != Minecraft.getInstance().player)) { 27 | player.getEntityWorld().addParticle(ParticleTypes.FLAME, 28 | player.getPosX() - 0.25 + (Math.random() / 2), 29 | player.getPosY(), 30 | player.getPosZ() - 0.25 + (Math.random() / 2), 31 | 0, 0.1, 0); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/PylonSerializer.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import io.github.noeppi_noeppi.libx.network.PacketSerializer; 4 | import net.minecraft.network.PacketBuffer; 5 | import net.minecraft.util.ResourceLocation; 6 | import net.minecraft.util.math.BlockPos; 7 | 8 | public class PylonSerializer implements PacketSerializer { 9 | 10 | @Override 11 | public Class messageClass() { 12 | return PylonMessage.class; 13 | } 14 | 15 | @Override 16 | public void encode(PylonMessage msg, PacketBuffer buffer) { 17 | buffer.writeResourceLocation(msg.dimension); 18 | buffer.writeBlockPos(msg.pos); 19 | } 20 | 21 | @Override 22 | public PylonMessage decode(PacketBuffer buffer) { 23 | PylonMessage msg = new PylonMessage(); 24 | msg.dimension = buffer.readResourceLocation(); 25 | msg.pos = buffer.readBlockPos(); 26 | return msg; 27 | } 28 | 29 | public static class PylonMessage { 30 | 31 | public ResourceLocation dimension; 32 | public BlockPos pos; 33 | 34 | public PylonMessage() { 35 | 36 | } 37 | 38 | public PylonMessage(ResourceLocation dimension, BlockPos pos) { 39 | this.dimension = dimension; 40 | this.pos = pos; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/ItemModelProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data; 2 | 3 | import io.github.noeppi_noeppi.libx.data.provider.ItemModelProviderBase; 4 | import io.github.noeppi_noeppi.libx.mod.ModX; 5 | import mythicbotany.ModBlocks; 6 | import mythicbotany.ModItems; 7 | import mythicbotany.functionalflora.base.BlockFunctionalFlower; 8 | import net.minecraft.data.DataGenerator; 9 | import net.minecraft.item.BlockItem; 10 | import net.minecraft.util.ResourceLocation; 11 | import net.minecraftforge.common.data.ExistingFileHelper; 12 | 13 | public class ItemModelProvider extends ItemModelProviderBase { 14 | 15 | public ItemModelProvider(ModX mod, DataGenerator generator, ExistingFileHelper fileHelper) { 16 | super(mod, generator, fileHelper); 17 | } 18 | 19 | @Override 20 | protected void setup() { 21 | handheld(ModItems.alfsteelSword); 22 | manualModel(ModItems.alfsteelPick); 23 | manualModel(ModItems.alfsteelAxe); 24 | manualModel(ModItems.fadedNetherStar); 25 | manualModel(ModItems.dreamwoodWand); 26 | manualModel(ModBlocks.alfsteelPylon.asItem()); 27 | } 28 | 29 | @Override 30 | protected void defaultBlock(ResourceLocation id, BlockItem item) { 31 | if (item.getBlock() instanceof BlockFunctionalFlower) { 32 | this.withExistingParent(id.getPath(), GENERATED).texture("layer0", new ResourceLocation(id.getNamespace(), "block/" + id.getPath())); 33 | } else { 34 | super.defaultBlock(id, item); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/functionalflora/Raindeletia.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.functionalflora; 2 | 3 | import mythicbotany.functionalflora.base.FunctionalFlowerBase; 4 | import net.minecraft.tileentity.TileEntityType; 5 | import net.minecraft.util.math.MathHelper; 6 | import vazkii.botania.common.block.ModBlocks; 7 | 8 | public class Raindeletia extends FunctionalFlowerBase { 9 | 10 | public Raindeletia(TileEntityType tileEntityTypeIn) { 11 | super(tileEntityTypeIn, 0x1E1CD8, true); 12 | } 13 | 14 | @Override 15 | protected void tickFlower() { 16 | //noinspection ConstantConditions 17 | if (!world.isRemote) { 18 | float multiplier = 0; 19 | if (world.isRainingAt(pos)) { 20 | multiplier = world.isThundering() ? 3 : 0.09f; 21 | } 22 | if (world.getBlockState(pos.down()).getBlock() == ModBlocks.enchantedSoil) { 23 | multiplier = multiplier * 5; 24 | } else if (world.getBlockState(pos.down()).getBlock() == ModBlocks.vividGrass) { 25 | multiplier = multiplier * 2f; 26 | } else if (world.getBlockState(pos.down()).getBlock() == ModBlocks.dryGrass) { 27 | multiplier = multiplier * 0.5f; 28 | } 29 | 30 | int manaTransfer = Math.round(multiplier * 5); 31 | mana = MathHelper.clamp(mana + manaTransfer, 0, maxMana); 32 | didWork = true; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/models/item/alfsteel_pylon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:builtin/entity", 3 | "display": { 4 | "gui": { 5 | "rotation": [ 6 | 30, 7 | 45, 8 | 0 9 | ], 10 | "scale": [ 11 | 0.625, 12 | 0.625, 13 | 0.625 14 | ] 15 | }, 16 | "ground": { 17 | "translation": [ 18 | 0, 19 | 3, 20 | 0 21 | ], 22 | "scale": [ 23 | 0.25, 24 | 0.25, 25 | 0.25 26 | ] 27 | }, 28 | "head": { 29 | "rotation": [ 30 | 0, 31 | 180, 32 | 0 33 | ], 34 | "scale": [ 35 | 0, 36 | 0, 37 | 0 38 | ] 39 | }, 40 | "fixed": { 41 | "rotation": [ 42 | 0, 43 | 180, 44 | 0 45 | ], 46 | "scale": [ 47 | 0.5, 48 | 0.5, 49 | 0.5 50 | ] 51 | }, 52 | "thirdperson_righthand": { 53 | "rotation": [ 54 | 75, 55 | 315, 56 | 0 57 | ], 58 | "translation": [ 59 | 0, 60 | 2.5, 61 | 0 62 | ], 63 | "scale": [ 64 | 0.375, 65 | 0.375, 66 | 0.375 67 | ] 68 | }, 69 | "firstperson_righthand": { 70 | "rotation": [ 71 | 0, 72 | 315, 73 | 0 74 | ], 75 | "scale": [ 76 | 0.4, 77 | 0.4, 78 | 0.4 79 | ] 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/templates/infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "processor": "mythicbotany.patchouli.InfusionProcessor", 3 | "components": [ 4 | { 5 | "type": "image", 6 | "image": "botania:textures/gui/terrasteel_overlay.png", 7 | "x": 50, 8 | "y": 28, 9 | "width": 15, 10 | "height": 29, 11 | "u": 65, 12 | "v": 48 13 | }, 14 | { 15 | "type": "header", 16 | "text": "#heading", 17 | "x": -1, 18 | "y": -1 19 | }, 20 | { 21 | "type": "custom", 22 | "class": "mythicbotany.patchouli.MultipleInputsComponent", 23 | "x": 50, 24 | "y": 58, 25 | "recipe_name": "#recipe" 26 | }, 27 | { 28 | "type": "item", 29 | "item": "#output", 30 | "link_recipe": true, 31 | "x": 50, 32 | "y": 10 33 | }, 34 | { 35 | "type": "custom", 36 | "class": "mythicbotany.patchouli.LargeManaComponent", 37 | "mana": "#mana", 38 | "x": -1, 39 | "y": 105 40 | }, 41 | { 42 | "type": "custom", 43 | "class": "vazkii.botania.client.patchouli.component.TerraPlateComponent", 44 | "x": 36, 45 | "y": 74, 46 | "plate": "mythicbotany:mana_infuser", 47 | "corner": "botania:shimmerrock", 48 | "center": "botania:shimmerrock", 49 | "edge": "minecraft:gold_block" 50 | }, 51 | { 52 | "type": "text", 53 | "text": "#text", 54 | "y": 131 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/infuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.infuser.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:alfsteel_ingot", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "text", 9 | "text": "lexicon.mythicbotany.infuser.page1" 10 | }, 11 | { 12 | "type": "crafting", 13 | "text": "lexicon.mythicbotany.infuser.page2", 14 | "recipe": "mythicbotany:mana_infuser" 15 | }, 16 | { 17 | "type": "multiblock", 18 | "name": "Mana Infuser", 19 | "text": "lexicon.mythicbotany.infuser.page3", 20 | "multiblock": { 21 | "mapping": { 22 | "I": "mythicbotany:mana_infuser", 23 | "G": "minecraft:gold_block", 24 | "S": "botania:shimmerrock", 25 | "0": "botania:shimmerrock" 26 | }, 27 | "pattern": [ 28 | [ " ", " I ", " " ], 29 | [ "SGS", "G0G", "SGS"] 30 | ], 31 | "symmetrical": true 32 | } 33 | }, 34 | { 35 | "type": "spotlight", 36 | "item": "mythicbotany:alfsteel_ingot", 37 | "text": "lexicon.mythicbotany.infuser.page4" 38 | }, 39 | { 40 | "type": "mythicbotany:infuser", 41 | "recipe": "mythicbotany:mythicbotany_infusion/terrasteel_ingot" 42 | }, 43 | { 44 | "type": "mythicbotany:infuser", 45 | "recipe": "mythicbotany:mythicbotany_infusion/alfsteel_ingot" 46 | } 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/collector/TileManaCollector.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.collector; 2 | 3 | import mythicbotany.base.TileEntityMana; 4 | import net.minecraft.tileentity.ITickableTileEntity; 5 | import net.minecraft.tileentity.TileEntityType; 6 | import vazkii.botania.api.internal.IManaBurst; 7 | import vazkii.botania.api.mana.IManaCollector; 8 | import vazkii.botania.api.mana.ManaNetworkEvent; 9 | import vazkii.botania.common.core.handler.ManaNetworkHandler; 10 | 11 | public class TileManaCollector extends TileEntityMana implements IManaCollector, ITickableTileEntity { 12 | 13 | public TileManaCollector(TileEntityType tileEntityTypeIn) { 14 | super(tileEntityTypeIn, 10000, true, true); 15 | } 16 | 17 | @Override 18 | protected boolean canReceive() { 19 | return false; // This is just for sparks. We don't want mana from sparks. 20 | } 21 | 22 | @Override 23 | public void onClientDisplayTick() { 24 | // 25 | } 26 | 27 | @Override 28 | public float getManaYieldMultiplier(IManaBurst iManaBurst) { 29 | return 1; 30 | } 31 | 32 | @Override 33 | public int getMaxMana() { 34 | return maxMana; 35 | } 36 | 37 | public void remove() { 38 | super.remove(); 39 | ManaNetworkEvent.removeCollector(this); 40 | } 41 | 42 | public void onChunkUnloaded() { 43 | super.onChunkUnloaded(); 44 | ManaNetworkEvent.removeCollector(this); 45 | } 46 | 47 | public void tick() { 48 | boolean inNetwork = ManaNetworkHandler.instance.isCollectorIn(this); 49 | if (!inNetwork && !this.isRemoved()) { 50 | ManaNetworkEvent.addCollector(this); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/DataGenerators.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data; 2 | 3 | import mythicbotany.MythicBotany; 4 | import mythicbotany.data.recipes.*; 5 | import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; 6 | 7 | public class DataGenerators { 8 | public static void gatherData(GatherDataEvent evt) { 9 | if (evt.includeServer()) { 10 | evt.getGenerator().addProvider(new BlockLootProvider(MythicBotany.getInstance(), evt.getGenerator())); 11 | BlockTagProvider blockTagProvider = new BlockTagProvider(MythicBotany.getInstance(), evt.getGenerator(), evt.getExistingFileHelper()); 12 | evt.getGenerator().addProvider(blockTagProvider); 13 | evt.getGenerator().addProvider(new ItemTagProvider(MythicBotany.getInstance(), evt.getGenerator(), evt.getExistingFileHelper(), blockTagProvider)); 14 | evt.getGenerator().addProvider(new RecipeProvider(MythicBotany.getInstance(), evt.getGenerator())); 15 | evt.getGenerator().addProvider(new SmeltingProvider(evt.getGenerator())); 16 | evt.getGenerator().addProvider(new BlockStateProvider(MythicBotany.getInstance(), evt.getGenerator(), evt.getExistingFileHelper())); 17 | evt.getGenerator().addProvider(new ItemModelProvider(MythicBotany.getInstance(), evt.getGenerator(), evt.getExistingFileHelper())); 18 | evt.getGenerator().addProvider(new ElvenTradeProvider(evt.getGenerator())); 19 | evt.getGenerator().addProvider(new ManaInfusionProvider(evt.getGenerator())); 20 | evt.getGenerator().addProvider(new PetalProvider(evt.getGenerator())); 21 | evt.getGenerator().addProvider(new RuneProvider(evt.getGenerator())); 22 | evt.getGenerator().addProvider(new SmithingProvider(evt.getGenerator())); 23 | evt.getGenerator().addProvider(new InfuserProvider(evt.getGenerator())); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.tools.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:alfsteel_axe", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "text", 9 | "text": "lexicon.mythicbotany.tools.page1" 10 | }, 11 | { 12 | "type": "crafting", 13 | "text": "lexicon.mythicbotany.tools.page2", 14 | "recipe": "mythicbotany:alfsteel_armor_upgrade" 15 | }, 16 | { 17 | "type": "spotlight", 18 | "item": "mythicbotany:alfsteel_sword", 19 | "link_recipe": true, 20 | "text": "lexicon.mythicbotany.tools.page3" 21 | }, 22 | { 23 | "type": "spotlight", 24 | "item": "mythicbotany:alfsteel_axe", 25 | "link_recipe": true, 26 | "text": "lexicon.mythicbotany.tools.page4" 27 | }, 28 | { 29 | "type": "spotlight", 30 | "item": "mythicbotany:alfsteel_pick", 31 | "link_recipe": true, 32 | "text": "lexicon.mythicbotany.tools.page5" 33 | }, 34 | { 35 | "type": "spotlight", 36 | "item": "mythicbotany:alfsteel_helmet", 37 | "link_recipe": true, 38 | "text": "lexicon.mythicbotany.tools.page6" 39 | }, 40 | { 41 | "type": "spotlight", 42 | "item": "mythicbotany:alfsteel_chestplate", 43 | "link_recipe": true, 44 | "text": "lexicon.mythicbotany.tools.page7" 45 | }, 46 | { 47 | "type": "spotlight", 48 | "item": "mythicbotany:alfsteel_leggings", 49 | "link_recipe": true, 50 | "text": "lexicon.mythicbotany.tools.page8" 51 | }, 52 | { 53 | "type": "spotlight", 54 | "item": "mythicbotany:alfsteel_boots", 55 | "link_recipe": true, 56 | "text": "lexicon.mythicbotany.tools.page9" 57 | } 58 | ] 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/RecipeRemover.java: -------------------------------------------------------------------------------- 1 | package mythicbotany; 2 | 3 | import com.google.common.collect.ImmutableMap; 4 | import com.google.common.collect.ImmutableSet; 5 | import net.minecraft.item.crafting.IRecipe; 6 | import net.minecraft.item.crafting.IRecipeType; 7 | import net.minecraft.item.crafting.RecipeManager; 8 | import net.minecraft.util.ResourceLocation; 9 | import net.minecraftforge.fml.common.ObfuscationReflectionHelper; 10 | import org.apache.commons.lang3.tuple.Pair; 11 | 12 | import java.util.Map; 13 | import java.util.Set; 14 | 15 | public class RecipeRemover { 16 | 17 | public static final Set RECIPES_TO_REMOVE = ImmutableSet.of( 18 | new ResourceLocation("botania", "gaia_pylon") 19 | ); 20 | 21 | private RecipeRemover() { 22 | 23 | } 24 | 25 | public static void removeRecipes(RecipeManager rm) { 26 | Map, Map>> recipes = ObfuscationReflectionHelper.getPrivateValue(RecipeManager.class, rm, "field_199522_d"); 27 | if (recipes == null) 28 | return; 29 | @SuppressWarnings("UnstableApiUsage") 30 | Map, Map>> newRecipes = recipes.entrySet().stream().map(entry -> Pair.of(entry.getKey(), withRecipesRemove(entry.getValue()))).collect(ImmutableMap.toImmutableMap(Map.Entry::getKey, Map.Entry::getValue)); 31 | ObfuscationReflectionHelper.setPrivateValue(RecipeManager.class, rm, newRecipes, "field_199522_d"); 32 | } 33 | 34 | private static ImmutableMap withRecipesRemove(Map map) { 35 | //noinspection UnstableApiUsage 36 | return map.entrySet().stream().parallel().filter(entry -> !RECIPES_TO_REMOVE.contains(entry.getKey())).collect(ImmutableMap.toImmutableMap(Map.Entry::getKey, Map.Entry::getValue)); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/recipes/InfuserProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data.recipes; 2 | 3 | import mythicbotany.ModItems; 4 | import mythicbotany.MythicBotany; 5 | import mythicbotany.data.recipes.builder.InfuserRecipeBuilder; 6 | import net.minecraft.data.DataGenerator; 7 | import net.minecraft.data.IFinishedRecipe; 8 | import net.minecraft.data.RecipeProvider; 9 | import net.minecraft.util.ResourceLocation; 10 | import vazkii.botania.common.lib.ModTags; 11 | 12 | import javax.annotation.Nonnull; 13 | import java.util.function.Consumer; 14 | 15 | public class InfuserProvider extends RecipeProvider { 16 | 17 | public InfuserProvider(DataGenerator generatorIn) { 18 | super(generatorIn); 19 | } 20 | 21 | @Nonnull 22 | @Override 23 | public String getName() { 24 | return "MythicBotany infuser recipes"; 25 | } 26 | 27 | @Override 28 | protected void registerRecipes(@Nonnull Consumer consumer) { 29 | //noinspection ConstantConditions 30 | InfuserRecipeBuilder.infuserRecipe(vazkii.botania.common.item.ModItems.terrasteel) 31 | .addIngredient(ModTags.Items.INGOTS_MANASTEEL) 32 | .addIngredient(vazkii.botania.common.item.ModItems.manaPearl) 33 | .addIngredient(ModTags.Items.GEMS_MANA_DIAMOND) 34 | .setManaCost(500000) 35 | .setColors(0x0000FF, 0x00FF00) 36 | .build(consumer, new ResourceLocation(MythicBotany.getInstance().modid, vazkii.botania.common.item.ModItems.terrasteel.getRegistryName().getPath())); 37 | 38 | InfuserRecipeBuilder.infuserRecipe(ModItems.alfsteelIngot) 39 | .addIngredient(ModTags.Items.INGOTS_ELEMENTIUM) 40 | .addIngredient(ModTags.Items.GEMS_DRAGONSTONE) 41 | .addIngredient(vazkii.botania.common.item.ModItems.pixieDust) 42 | .setManaCost(2000000) 43 | .setColors(0xFF008D, 0xFF9600) 44 | .build(consumer); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/resources/data/mythicbotany/patchouli_books/lexicon/en_us/entries/mythic_botany/runes.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lexicon.mythicbotany.runes.title", 3 | "category": "mythicbotany:mythic_botany", 4 | "icon": "mythicbotany:niflheim_rune", 5 | "entry_color": "aa00", 6 | "pages": [ 7 | { 8 | "type": "text", 9 | "text": "lexicon.mythicbotany.runes.page1" 10 | }, 11 | { 12 | "type": "botania:runic_altar", 13 | "text": "lexicon.mythicbotany.runes.runeMidgard", 14 | "recipe": "mythicbotany:runic_altar/midgard" 15 | }, 16 | { 17 | "type": "botania:runic_altar", 18 | "text": "lexicon.mythicbotany.runes.runeAlfheim", 19 | "recipe": "mythicbotany:runic_altar/alfheim" 20 | }, 21 | { 22 | "type": "botania:runic_altar", 23 | "text": "lexicon.mythicbotany.runes.runeNidavellir", 24 | "recipe": "mythicbotany:runic_altar/nidavellir" 25 | }, 26 | { 27 | "type": "botania:runic_altar", 28 | "text": "lexicon.mythicbotany.runes.runeJoetunheim", 29 | "recipe": "mythicbotany:runic_altar/joetunheim" 30 | }, 31 | { 32 | "type": "botania:runic_altar", 33 | "text": "lexicon.mythicbotany.runes.runeMuspelheim", 34 | "recipe": "mythicbotany:runic_altar/muspelheim" 35 | }, 36 | { 37 | "type": "botania:runic_altar", 38 | "text": "lexicon.mythicbotany.runes.runeNiflheim", 39 | "recipe": "mythicbotany:runic_altar/niflheim" 40 | }, 41 | { 42 | "type": "botania:runic_altar", 43 | "text": "lexicon.mythicbotany.runes.runeAsgard", 44 | "recipe": "mythicbotany:runic_altar/asgard" 45 | }, 46 | { 47 | "type": "botania:runic_altar", 48 | "text": "lexicon.mythicbotany.runes.runeVanaheim", 49 | "recipe": "mythicbotany:runic_altar/vanaheim" 50 | }, 51 | { 52 | "type": "botania:runic_altar", 53 | "text": "lexicon.mythicbotany.runes.runeHelheim", 54 | "recipe": "mythicbotany:runic_altar/helheim" 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/InfusionSerializer.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import io.github.noeppi_noeppi.libx.network.PacketSerializer; 4 | import net.minecraft.network.PacketBuffer; 5 | import net.minecraft.util.ResourceLocation; 6 | 7 | public class InfusionSerializer implements PacketSerializer { 8 | 9 | @Override 10 | public Class messageClass() { 11 | return InfusionMessage.class; 12 | } 13 | 14 | @Override 15 | public void encode(InfusionMessage msg, PacketBuffer buf) { 16 | buf.writeInt(msg.x); 17 | buf.writeInt(msg.y); 18 | buf.writeInt(msg.z); 19 | buf.writeResourceLocation(msg.dimension); 20 | buf.writeDouble(msg.progress); 21 | buf.writeInt(msg.fromColor); 22 | buf.writeInt(msg.toColor); 23 | } 24 | 25 | @Override 26 | public InfusionMessage decode(PacketBuffer buf) { 27 | InfusionMessage msg = new InfusionMessage(); 28 | msg.x = buf.readInt(); 29 | msg.y = buf.readInt(); 30 | msg.z = buf.readInt(); 31 | msg.dimension = buf.readResourceLocation(); 32 | msg.progress = buf.readDouble(); 33 | msg.fromColor = buf.readInt(); 34 | msg.toColor = buf.readInt(); 35 | return msg; 36 | } 37 | 38 | public static class InfusionMessage { 39 | 40 | public InfusionMessage() { 41 | 42 | } 43 | 44 | public InfusionMessage(int x, int y, int z, ResourceLocation dimension, double progress, int fromColor, int toColor) { 45 | this.x = x; 46 | this.y = y; 47 | this.z = z; 48 | this.dimension = dimension; 49 | this.progress = progress; 50 | this.fromColor = fromColor; 51 | this.toColor = toColor; 52 | } 53 | 54 | public int x, y, z; 55 | public ResourceLocation dimension; 56 | public double progress; 57 | public int fromColor, toColor; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/custom/FloatingFlowerModelBuilder.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data.custom; 2 | 3 | import com.google.common.base.Preconditions; 4 | import com.google.gson.JsonObject; 5 | import mythicbotany.MythicBotany; 6 | import net.minecraft.util.ResourceLocation; 7 | import net.minecraftforge.client.model.generators.BlockModelBuilder; 8 | import net.minecraftforge.client.model.generators.BlockModelProvider; 9 | import net.minecraftforge.common.data.ExistingFileHelper; 10 | 11 | public class FloatingFlowerModelBuilder extends BlockModelBuilder { 12 | 13 | private ResourceLocation flower = null; 14 | 15 | public FloatingFlowerModelBuilder(ResourceLocation outputLocation, ExistingFileHelper existingFileHelper) { 16 | super(outputLocation, existingFileHelper); 17 | } 18 | 19 | public static FloatingFlowerModelBuilder create(BlockModelProvider provider, String path) { 20 | Preconditions.checkNotNull(path, "Path must not be null"); 21 | ResourceLocation outputLoc = new ResourceLocation(MythicBotany.getInstance().modid, "block/" + path); 22 | return (FloatingFlowerModelBuilder) provider.generatedModels.computeIfAbsent(outputLoc, rl -> new FloatingFlowerModelBuilder(rl, provider.existingFileHelper)); 23 | } 24 | 25 | public FloatingFlowerModelBuilder flower(ResourceLocation flower) { 26 | if (flower.getPath().startsWith("block/")) { 27 | this.flower = flower; 28 | } else { 29 | this.flower = new ResourceLocation(flower.getNamespace(), "block/" + flower.getPath()); 30 | } 31 | return this; 32 | } 33 | 34 | @Override 35 | public JsonObject toJson() { 36 | JsonObject json = super.toJson(); 37 | json.addProperty("loader", "botania:floating_flower"); 38 | if (flower != null) { 39 | JsonObject flowerObj = new JsonObject(); 40 | flowerObj.addProperty("parent", flower.toString()); 41 | json.add("flower", flowerObj); 42 | } 43 | return json; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/patchouli/InfusionProcessor.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.patchouli; 2 | 3 | import mythicbotany.infuser.IInfuserRecipe; 4 | import net.minecraft.client.Minecraft; 5 | import net.minecraft.item.crafting.IRecipe; 6 | import net.minecraft.util.ResourceLocation; 7 | import vazkii.botania.client.patchouli.processor.PetalApothecaryProcessor; 8 | import vazkii.botania.common.Botania; 9 | import vazkii.patchouli.api.IVariable; 10 | import vazkii.patchouli.api.IVariableProvider; 11 | 12 | public class InfusionProcessor extends PetalApothecaryProcessor { 13 | 14 | protected IRecipe recipe; 15 | 16 | public InfusionProcessor() { 17 | 18 | } 19 | 20 | public void setup(IVariableProvider variables) { 21 | ResourceLocation id = new ResourceLocation(variables.get("recipe").asString()); 22 | this.recipe = null; 23 | //noinspection ConstantConditions 24 | Minecraft.getInstance().world.getRecipeManager().getRecipe(id).ifPresent(recipe -> this.recipe = recipe); 25 | if (this.recipe == null) { 26 | Botania.LOGGER.warn("Missing mythicbotany infusion recipe: " + id); 27 | } else if (!(this.recipe instanceof IInfuserRecipe)) { 28 | Botania.LOGGER.warn("Recipe is not a mythicbotany infusion recipe: " + id); 29 | } 30 | } 31 | 32 | @Override 33 | public IVariable process(String key) { 34 | if (this.recipe == null) { 35 | return null; 36 | } else { 37 | switch(key) { 38 | case "output": 39 | return IVariable.from(this.recipe.getRecipeOutput()); 40 | case "recipe": 41 | return IVariable.wrap(this.recipe.getId().toString()); 42 | case "heading": 43 | return IVariable.from(this.recipe.getRecipeOutput().getDisplayName()); 44 | case "mana": 45 | return IVariable.wrap(((IInfuserRecipe) this.recipe).getManaUsage()); 46 | default: 47 | return null; 48 | } 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/BlockStateProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data; 2 | 3 | import io.github.noeppi_noeppi.libx.data.AlwaysExistentModelFile; 4 | import io.github.noeppi_noeppi.libx.data.provider.BlockStateProviderBase; 5 | import io.github.noeppi_noeppi.libx.mod.ModX; 6 | import mythicbotany.ModBlocks; 7 | import mythicbotany.data.custom.FloatingFlowerModelBuilder; 8 | import mythicbotany.functionalflora.base.BlockFloatingFunctionalFlower; 9 | import mythicbotany.functionalflora.base.BlockFunctionalFlower; 10 | import net.minecraft.block.Block; 11 | import net.minecraft.data.DataGenerator; 12 | import net.minecraft.util.ResourceLocation; 13 | import net.minecraftforge.client.model.generators.ModelFile; 14 | import net.minecraftforge.common.data.ExistingFileHelper; 15 | 16 | public class BlockStateProvider extends BlockStateProviderBase { 17 | 18 | public BlockStateProvider(ModX mod, DataGenerator generator, ExistingFileHelper fileHelper) { 19 | super(mod, generator, fileHelper); 20 | } 21 | 22 | @Override 23 | protected void setup() { 24 | manualModel(ModBlocks.manaInfuser); 25 | manualModel(ModBlocks.alfsteelPylon); 26 | } 27 | 28 | @Override 29 | protected ModelFile defaultModel(ResourceLocation id, Block block) { 30 | if (block instanceof BlockFunctionalFlower) { 31 | return models().getBuilder(id.getPath()).parent(new AlwaysExistentModelFile(new ResourceLocation("botania", "block/shapes/cross"))) 32 | .texture("cross", new ResourceLocation(id.getNamespace(), "block/" + id.getPath())); 33 | } else if (block instanceof BlockFloatingFunctionalFlower) { 34 | //noinspection ConstantConditions 35 | return FloatingFlowerModelBuilder.create(models(), id.getPath()) 36 | .flower(((BlockFloatingFunctionalFlower) block).getNonFloatingBlock().getRegistryName()) 37 | .parent(new AlwaysExistentModelFile(new ResourceLocation("minecraft", "block/block"))); 38 | } else { 39 | return super.defaultModel(id, block); 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/functionalflora/Exoblaze.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.functionalflora; 2 | 3 | import mythicbotany.functionalflora.base.FunctionalFlowerBase; 4 | import net.minecraft.tileentity.BrewingStandTileEntity; 5 | import net.minecraft.tileentity.TileEntity; 6 | import net.minecraft.tileentity.TileEntityType; 7 | import net.minecraft.util.math.BlockPos; 8 | import vazkii.botania.api.subtile.RadiusDescriptor; 9 | 10 | public class Exoblaze extends FunctionalFlowerBase { 11 | 12 | public static final int MAX_TICK_TO_NEXT_CHECK = 10; 13 | public static final int MANA_PER_BREW = 50; 14 | 15 | private transient int tickToNextCheck = 0; 16 | 17 | public Exoblaze(TileEntityType tileEntityTypeIn) { 18 | super(tileEntityTypeIn, 0xFFFF22, false); 19 | } 20 | 21 | @Override 22 | protected void tickFlower() { 23 | //noinspection ConstantConditions 24 | if (!world.isRemote) { 25 | if (tickToNextCheck > 0) { 26 | tickToNextCheck -= 1; 27 | return; 28 | } 29 | tickToNextCheck = MAX_TICK_TO_NEXT_CHECK; 30 | BlockPos basePos = pos.toImmutable(); 31 | outer: 32 | for (int xd = -3; xd <= 3; xd++) { 33 | for (int yd = -1; yd <= 1; yd++) { 34 | for (int zd = -3; zd <= 3; zd++) { 35 | if (mana < MANA_PER_BREW) 36 | break outer; 37 | TileEntity te = world.getTileEntity(basePos.add(xd, yd, zd)); 38 | if (te instanceof BrewingStandTileEntity && ((BrewingStandTileEntity) te).fuel < 20) { 39 | mana -= MANA_PER_BREW; 40 | ((BrewingStandTileEntity) te).fuel += 1; 41 | didWork = true; 42 | markDirty(); 43 | te.markDirty(); 44 | } 45 | } 46 | } 47 | } 48 | } 49 | } 50 | 51 | @Override 52 | public RadiusDescriptor getRadius() { 53 | return new RadiusDescriptor.Square(pos, 3); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/functionalflora/WitherAconite.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.functionalflora; 2 | 3 | import mythicbotany.ModItems; 4 | import mythicbotany.functionalflora.base.FunctionalFlowerBase; 5 | import net.minecraft.entity.item.ItemEntity; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.item.Items; 8 | import net.minecraft.tileentity.TileEntityType; 9 | import net.minecraft.util.math.AxisAlignedBB; 10 | import net.minecraft.util.math.MathHelper; 11 | 12 | import java.util.List; 13 | 14 | public class WitherAconite extends FunctionalFlowerBase { 15 | 16 | public static final int MANA_PER_STAR = 2000000; 17 | 18 | public WitherAconite(TileEntityType tileEntityTypeIn) { 19 | super(tileEntityTypeIn, 0x333333, MANA_PER_STAR / 500, MANA_PER_STAR / 2000, true); 20 | } 21 | 22 | @Override 23 | protected void tickFlower() { 24 | //noinspection ConstantConditions 25 | if (!world.isRemote) { 26 | List items = world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(pos, pos.toImmutable().add(1, 1, 1))); 27 | if (items.size() == 1) { 28 | ItemEntity item = items.get(0); 29 | ItemStack stack = item.getItem(); 30 | if (stack.getCount() == 1) { 31 | if (stack.getItem() == Items.NETHER_STAR) { 32 | stack = new ItemStack(ModItems.fadedNetherStar); 33 | } 34 | if (stack.getItem() == ModItems.fadedNetherStar) { 35 | int manaTransfer = Math.min(maxTransfer * 2, Math.min(maxMana - mana, stack.getMaxDamage() - stack.getDamage())); 36 | if (manaTransfer > 0) { 37 | stack.setDamage(stack.getDamage() + manaTransfer); 38 | if (stack.getDamage() >= stack.getMaxDamage()) 39 | stack = ItemStack.EMPTY; 40 | mana = MathHelper.clamp(mana + manaTransfer, 0, maxMana); 41 | didWork = true; 42 | item.setItem(stack); 43 | } 44 | } 45 | } 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/pylon/TileAlfsteelPylon.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.pylon; 2 | 3 | import mythicbotany.MythicBotany; 4 | import mythicbotany.base.TileEntityMana; 5 | import mythicbotany.network.PylonSerializer; 6 | import net.minecraft.entity.item.ItemEntity; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.tileentity.ITickableTileEntity; 9 | import net.minecraft.tileentity.TileEntityType; 10 | import net.minecraft.util.math.AxisAlignedBB; 11 | import net.minecraftforge.fml.network.PacketDistributor; 12 | 13 | import java.util.List; 14 | 15 | public class TileAlfsteelPylon extends TileEntityMana implements ITickableTileEntity { 16 | 17 | public static final int MAX_MANA = 100000; 18 | 19 | public TileAlfsteelPylon(TileEntityType tileEntityType) { 20 | super(tileEntityType, MAX_MANA, true, false); 21 | } 22 | 23 | @Override 24 | protected boolean canReceive() { 25 | return true; 26 | } 27 | 28 | @Override 29 | public void tick() { 30 | //noinspection ConstantConditions 31 | if (!world.isRemote) { 32 | List items = getItems(); 33 | if (items.size() == 1) { 34 | ItemEntity item = items.get(0); 35 | ItemStack stack = item.getItem(); 36 | PylonRepairable repairable = PylonRepairables.getRepairInfo(stack); 37 | if (repairable != null && stack.getCount() == 1) { 38 | int manaCost = repairable.getRepairManaPerTick(stack); 39 | if (mana >= manaCost) { 40 | mana -= manaCost; 41 | stack = repairable.repairOneTick(stack); 42 | item.setItem(stack); 43 | markDirty(); 44 | MythicBotany.getNetwork().instance.send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunkAt(pos)), new PylonSerializer.PylonMessage(world.getDimensionKey().getRegistryName(), pos)); 45 | } 46 | } 47 | } 48 | } 49 | } 50 | 51 | private List getItems() { 52 | //noinspection ConstantConditions 53 | return this.world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(this.pos.add(0, 1, 0), this.pos.add(1, 2, 1))); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/patchouli/MultipleInputsComponent.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.patchouli; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import com.mojang.blaze3d.matrix.MatrixStack; 5 | import net.minecraft.client.Minecraft; 6 | import net.minecraft.item.crafting.IRecipe; 7 | import net.minecraft.item.crafting.Ingredient; 8 | import net.minecraft.util.ResourceLocation; 9 | import vazkii.patchouli.api.IComponentRenderContext; 10 | import vazkii.patchouli.api.ICustomComponent; 11 | import vazkii.patchouli.api.IVariable; 12 | 13 | import javax.annotation.Nonnull; 14 | import java.util.List; 15 | import java.util.concurrent.atomic.AtomicReference; 16 | import java.util.function.UnaryOperator; 17 | 18 | public class MultipleInputsComponent implements ICustomComponent { 19 | 20 | @SerializedName("recipe_name") 21 | public String recipeName; 22 | 23 | protected transient List ingredients; 24 | protected transient int x; 25 | protected transient int y; 26 | 27 | public void build(int componentX, int componentY, int pageNum) { 28 | this.x = componentX != -1 ? componentX : 17; 29 | this.y = componentY; 30 | this.ingredients = this.makeIngredients(); 31 | } 32 | 33 | private List makeIngredients() { 34 | AtomicReference> recipe = new AtomicReference<>(null); 35 | //noinspection ConstantConditions 36 | Minecraft.getInstance().world.getRecipeManager().getRecipe(new ResourceLocation(recipeName)).ifPresent(recipe::set); 37 | if (recipe.get() == null) { 38 | throw new RuntimeException("Missing recipe: " + this.recipeName); 39 | } else { 40 | return recipe.get().getIngredients(); 41 | } 42 | } 43 | 44 | public void render(@Nonnull MatrixStack matrixStack, @Nonnull IComponentRenderContext context, float pticks, int mouseX, int mouseY) { 45 | int widthHalf = (20 * ingredients.size()) / 2; 46 | for (int i = 0; i < ingredients.size(); i++) { 47 | context.renderIngredient(matrixStack, this.x - widthHalf + 9 + (20 * i), this.y, mouseX, mouseY, ingredients.get(i)); 48 | } 49 | } 50 | 51 | public void onVariablesAvailable(UnaryOperator lookup) { 52 | this.recipeName = lookup.apply(IVariable.wrap(this.recipeName)).asString(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/ItemTagProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data; 2 | 3 | import io.github.noeppi_noeppi.libx.data.provider.BlockTagProviderBase; 4 | import io.github.noeppi_noeppi.libx.data.provider.ItemTagProviderBase; 5 | import io.github.noeppi_noeppi.libx.mod.ModX; 6 | import mythicbotany.ModItems; 7 | import mythicbotany.MythicBotany; 8 | import mythicbotany.functionalflora.base.BlockFloatingFunctionalFlower; 9 | import mythicbotany.functionalflora.base.BlockFunctionalFlower; 10 | import net.minecraft.block.Block; 11 | import net.minecraft.data.DataGenerator; 12 | import net.minecraft.item.BlockItem; 13 | import net.minecraft.item.Item; 14 | import net.minecraft.util.registry.Registry; 15 | import net.minecraftforge.common.data.ExistingFileHelper; 16 | import net.minecraftforge.registries.ForgeRegistries; 17 | import vazkii.botania.common.item.material.ItemRune; 18 | import vazkii.botania.common.lib.ModTags; 19 | 20 | public class ItemTagProvider extends ItemTagProviderBase { 21 | 22 | public ItemTagProvider(ModX mod, DataGenerator generatorIn, ExistingFileHelper fileHelper, BlockTagProviderBase blockTags) { 23 | super(mod, generatorIn, fileHelper, blockTags); 24 | } 25 | 26 | @Override 27 | protected void setup() { 28 | this.getOrCreateBuilder(ModTags.Items.TERRA_PICK_BLACKLIST).add(ModItems.greatestAuraRing); 29 | this.getOrCreateBuilder(ModTags.Items.TERRA_PICK_BLACKLIST).add(ModItems.alfsteelHelmet); 30 | } 31 | 32 | @Override 33 | public void defaultItemTags(Item item) { 34 | if (item instanceof ItemRune) { 35 | this.getOrCreateBuilder(ModTags.Items.RUNES).add(item); 36 | } 37 | } 38 | 39 | @Override 40 | public void defaultBlockItemTags(Block block) { 41 | if (block instanceof BlockFunctionalFlower) { 42 | this.getOrCreateBuilder(ModTags.Items.SPECIAL_FLOWERS).add(block.asItem()); 43 | if (((BlockFunctionalFlower) block).isGenerating) { 44 | this.getOrCreateBuilder(ModTags.Items.GENERATING_SPECIAL_FLOWERS).add(block.asItem()); 45 | } else { 46 | this.getOrCreateBuilder(ModTags.Items.FUNCTIONAL_SPECIAL_FLOWERS).add(block.asItem()); 47 | } 48 | } else if (block instanceof BlockFloatingFunctionalFlower) { 49 | this.getOrCreateBuilder(ModTags.Items.FLOATING_FLOWERS).add(block.asItem()); 50 | this.getOrCreateBuilder(ModTags.Items.SPECIAL_FLOATING_FLOWERS).add(block.asItem()); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/loot/AlfsteelDisposeModifier.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.loot; 2 | 3 | import com.google.gson.JsonObject; 4 | import mythicbotany.ModItems; 5 | import mythicbotany.alftools.AlfsteelPick; 6 | import net.minecraft.entity.Entity; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.loot.LootContext; 9 | import net.minecraft.loot.LootParameters; 10 | import net.minecraft.loot.conditions.ILootCondition; 11 | import net.minecraft.util.ResourceLocation; 12 | import net.minecraftforge.common.loot.GlobalLootModifierSerializer; 13 | import net.minecraftforge.common.loot.LootModifier; 14 | import vazkii.botania.common.lib.ModTags; 15 | 16 | import javax.annotation.Nonnull; 17 | import java.util.List; 18 | 19 | public class AlfsteelDisposeModifier extends LootModifier { 20 | 21 | private AlfsteelDisposeModifier(ILootCondition[] conditions) { 22 | super(conditions); 23 | } 24 | 25 | @Nonnull 26 | protected List doApply(List generatedLoot, LootContext context) { 27 | Entity entity = context.get(LootParameters.THIS_ENTITY); 28 | ItemStack tool = context.get(LootParameters.TOOL); 29 | if (entity != null && tool != null && !tool.isEmpty()) { 30 | filterDisposable(generatedLoot, entity, tool); 31 | } 32 | return generatedLoot; 33 | } 34 | 35 | public static void filterDisposable(List drops, Entity entity, ItemStack stack) { 36 | if (!stack.isEmpty() && stack.getItem() == ModItems.alfsteelPick && AlfsteelPick.isTipped(stack)) { 37 | drops.removeIf((loot) -> !loot.isEmpty() && (ModTags.Items.DISPOSABLE.contains(loot.getItem()) || ModTags.Items.SEMI_DISPOSABLE.contains(loot.getItem()) && !entity.isSneaking())); 38 | } 39 | } 40 | 41 | public static class Serializer extends GlobalLootModifierSerializer { 42 | 43 | public static final Serializer INSTANCE = new Serializer(); 44 | 45 | private Serializer() { 46 | 47 | } 48 | 49 | public AlfsteelDisposeModifier read(ResourceLocation location, JsonObject object, ILootCondition[] conditions) { 50 | return new AlfsteelDisposeModifier(conditions); 51 | } 52 | 53 | public JsonObject write(AlfsteelDisposeModifier modifier) { 54 | return this.makeConditions(modifier.conditions); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/base/BlockTEManaHUD.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.base; 2 | 3 | import com.mojang.blaze3d.matrix.MatrixStack; 4 | import io.github.noeppi_noeppi.libx.LibX; 5 | import io.github.noeppi_noeppi.libx.mod.ModX; 6 | import io.github.noeppi_noeppi.libx.mod.registration.BlockTE; 7 | import net.minecraft.client.Minecraft; 8 | import net.minecraft.client.resources.I18n; 9 | import net.minecraft.entity.player.PlayerEntity; 10 | import net.minecraft.item.Item; 11 | import net.minecraft.item.ItemStack; 12 | import net.minecraft.util.Direction; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.world.World; 15 | import net.minecraftforge.api.distmarker.Dist; 16 | import net.minecraftforge.api.distmarker.OnlyIn; 17 | import vazkii.botania.api.BotaniaAPIClient; 18 | import vazkii.botania.api.wand.IWandHUD; 19 | import vazkii.botania.api.wand.IWandable; 20 | 21 | public class BlockTEManaHUD extends BlockTE implements IWandHUD, IWandable { 22 | 23 | public static final int DEFAULT_COLOR = 0x4444FF; 24 | 25 | public final int color; 26 | 27 | public BlockTEManaHUD(ModX mod, Class teClass, Properties properties) { 28 | super(mod, teClass, properties); 29 | this.color = DEFAULT_COLOR; 30 | } 31 | 32 | public BlockTEManaHUD(ModX mod, Class teClass, Properties properties, Item.Properties itemProperties) { 33 | super(mod, teClass, properties, itemProperties); 34 | this.color = DEFAULT_COLOR; 35 | } 36 | 37 | public BlockTEManaHUD(ModX mod, Class teClass, Properties properties, int color) { 38 | super(mod, teClass, properties); 39 | this.color = color; 40 | } 41 | 42 | public BlockTEManaHUD(ModX mod, Class teClass, Properties properties, Item.Properties itemProperties, int color) { 43 | super(mod, teClass, properties, itemProperties); 44 | this.color = color; 45 | } 46 | 47 | @Override 48 | @OnlyIn(Dist.CLIENT) 49 | public void renderHUD(MatrixStack matrixStack, Minecraft minecraft, World world, BlockPos pos) { 50 | T te = getTile(world, pos); 51 | BotaniaAPIClient.instance().drawSimpleManaHUD(matrixStack, color, te.getCurrentMana(), te.maxMana, I18n.format(getTranslationKey())); 52 | } 53 | 54 | @Override 55 | public boolean onUsedByWand(PlayerEntity player, ItemStack stack, World world, BlockPos pos, Direction side) { 56 | if (world.isRemote) { 57 | LibX.getNetwork().requestTE(world, pos); 58 | } 59 | return true; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/functionalflora/Hellebore.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.functionalflora; 2 | 3 | import mythicbotany.MythicBotany; 4 | import mythicbotany.functionalflora.base.FunctionalFlowerBase; 5 | import net.minecraft.entity.monster.HoglinEntity; 6 | import net.minecraft.entity.monster.piglin.AbstractPiglinEntity; 7 | import net.minecraft.particles.ParticleTypes; 8 | import net.minecraft.tileentity.TileEntityType; 9 | import net.minecraft.util.math.AxisAlignedBB; 10 | import net.minecraft.util.math.MathHelper; 11 | import vazkii.botania.api.subtile.RadiusDescriptor; 12 | 13 | import java.util.List; 14 | 15 | public class Hellebore extends FunctionalFlowerBase { 16 | 17 | public static final int MANA_PER_ENTITY_AND_SECOND = 150; 18 | 19 | public Hellebore(TileEntityType tileEntityTypeIn) { 20 | super(tileEntityTypeIn, 0xCD3EBB, false); 21 | } 22 | 23 | @Override 24 | protected void tickFlower() { 25 | //noinspection ConstantConditions 26 | if (!world.isRemote) { 27 | int prevMana = mana; 28 | 29 | List piglins = world.getEntitiesWithinAABB(AbstractPiglinEntity.class, new AxisAlignedBB(pos.getX() - 5.5, pos.getY() - 2, pos.getZ() - 5.5, pos.getX() + 6.5, pos.getY() + 3, pos.getZ() + 6.5)); 30 | for (AbstractPiglinEntity piglin : piglins) { 31 | if (mana >= MANA_PER_ENTITY_AND_SECOND && piglin.field_242334_c > 20) { 32 | mana -= MANA_PER_ENTITY_AND_SECOND; 33 | piglin.field_242334_c = 0; 34 | MythicBotany.getNetwork().spawnParticle(world, ParticleTypes.FLAME, 10, piglin.getPosX(), piglin.getPosY(), piglin.getPosZ(), 0, 0.05, 0, 0.4, 0.8, 0.4, true); 35 | } 36 | } 37 | 38 | List hoglins = world.getEntitiesWithinAABB(HoglinEntity.class, new AxisAlignedBB(pos.getX() - 5.5, pos.getY() - 2, pos.getZ() - 5.5, pos.getX() + 6.5, pos.getY() + 3, pos.getZ() + 6.5)); 39 | for (HoglinEntity hoglin : hoglins) { 40 | if (mana >= MANA_PER_ENTITY_AND_SECOND && hoglin.field_234358_by_ > 20) { 41 | mana -= MANA_PER_ENTITY_AND_SECOND; 42 | hoglin.field_234358_by_ = 0; 43 | MythicBotany.getNetwork().spawnParticle(world, ParticleTypes.FLAME, 10, hoglin.getPosX(), hoglin.getPosY(), hoglin.getPosZ(), 0, 0.08, 0, 0.8, 0.7, 0.8, true); 44 | } 45 | } 46 | 47 | if (prevMana != mana) { 48 | mana = MathHelper.clamp(mana, 0, maxMana); 49 | markDirty(); 50 | } 51 | } 52 | } 53 | 54 | @Override 55 | public RadiusDescriptor getRadius() { 56 | return new RadiusDescriptor.Square(pos, 5); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/jei/MythicJei.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.jei; 2 | 3 | import mezz.jei.api.IModPlugin; 4 | import mezz.jei.api.JeiPlugin; 5 | import mezz.jei.api.registration.IRecipeCatalystRegistration; 6 | import mezz.jei.api.registration.IRecipeCategoryRegistration; 7 | import mezz.jei.api.registration.IRecipeRegistration; 8 | import mezz.jei.api.runtime.IJeiRuntime; 9 | import mythicbotany.ModBlocks; 10 | import mythicbotany.MythicBotany; 11 | import mythicbotany.infuser.IInfuserRecipe; 12 | import net.minecraft.client.Minecraft; 13 | import net.minecraft.client.world.ClientWorld; 14 | import net.minecraft.item.ItemStack; 15 | import net.minecraft.item.crafting.RecipeManager; 16 | import net.minecraft.util.ResourceLocation; 17 | 18 | import javax.annotation.Nonnull; 19 | import java.util.Objects; 20 | import java.util.Optional; 21 | import java.util.function.Consumer; 22 | import java.util.function.Function; 23 | import java.util.stream.Collectors; 24 | 25 | @JeiPlugin 26 | public class MythicJei implements IModPlugin { 27 | 28 | private static IJeiRuntime runtime = null; 29 | 30 | @Nonnull 31 | @Override 32 | public ResourceLocation getPluginUid() { 33 | return new ResourceLocation(MythicBotany.getInstance().modid, "jeiplugin"); 34 | } 35 | 36 | @Override 37 | public void registerCategories(@Nonnull IRecipeCategoryRegistration registration) { 38 | registration.addRecipeCategories( 39 | new InfusionCategory(registration.getJeiHelpers().getGuiHelper()) 40 | ); 41 | } 42 | 43 | @Override 44 | public void registerRecipes(@Nonnull IRecipeRegistration registration) { 45 | ClientWorld world = Minecraft.getInstance().world; 46 | RecipeManager recipes = Objects.requireNonNull(world).getRecipeManager(); 47 | 48 | registration.addRecipes(recipes.getRecipes().stream().filter(recipe -> recipe instanceof IInfuserRecipe).collect(Collectors.toList()), InfusionCategory.UID); 49 | } 50 | 51 | @Override 52 | public void registerRecipeCatalysts(@Nonnull IRecipeCatalystRegistration registration) { 53 | registration.addRecipeCatalyst(new ItemStack(ModBlocks.manaInfuser), InfusionCategory.UID); 54 | } 55 | 56 | @Override 57 | public void onRuntimeAvailable(@Nonnull IJeiRuntime jeiRuntime) { 58 | runtime = jeiRuntime; 59 | } 60 | 61 | public static void runtime(Consumer action) { 62 | if (runtime != null) { 63 | action.accept(runtime); 64 | } 65 | } 66 | 67 | public static Optional runtime(Function action) { 68 | if (runtime != null) { 69 | return Optional.of(action.apply(runtime)); 70 | } else { 71 | return Optional.empty(); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/ParticleSerializer.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import io.github.noeppi_noeppi.libx.network.PacketSerializer; 4 | import net.minecraft.network.PacketBuffer; 5 | import net.minecraft.util.ResourceLocation; 6 | 7 | public class ParticleSerializer implements PacketSerializer { 8 | 9 | @Override 10 | public Class messageClass() { 11 | return ParticleMessage.class; 12 | } 13 | 14 | @Override 15 | public void encode(ParticleMessage msg, PacketBuffer buf) { 16 | buf.writeResourceLocation(msg.particleId); 17 | buf.writeResourceLocation(msg.dimension); 18 | buf.writeDouble(msg.x); 19 | buf.writeDouble(msg.y); 20 | buf.writeDouble(msg.z); 21 | buf.writeInt(msg.amount); 22 | buf.writeDouble(msg.xm); 23 | buf.writeDouble(msg.ym); 24 | buf.writeDouble(msg.zm); 25 | buf.writeDouble(msg.xd); 26 | buf.writeDouble(msg.yd); 27 | buf.writeDouble(msg.zd); 28 | buf.writeBoolean(msg.randomizePosition); 29 | } 30 | 31 | @Override 32 | public ParticleMessage decode(PacketBuffer buf) { 33 | ParticleMessage msg = new ParticleMessage(); 34 | msg.particleId = buf.readResourceLocation(); 35 | msg.dimension = buf.readResourceLocation(); 36 | msg.x = buf.readDouble(); 37 | msg.y = buf.readDouble(); 38 | msg.z = buf.readDouble(); 39 | msg.amount = buf.readInt(); 40 | msg.xm = buf.readDouble(); 41 | msg.ym = buf.readDouble(); 42 | msg.zm = buf.readDouble(); 43 | msg.xd = buf.readDouble(); 44 | msg.yd = buf.readDouble(); 45 | msg.zd = buf.readDouble(); 46 | msg.randomizePosition = buf.readBoolean(); 47 | return msg; 48 | } 49 | 50 | public static class ParticleMessage { 51 | 52 | public ParticleMessage() { 53 | 54 | } 55 | 56 | public ParticleMessage(ResourceLocation particleId, ResourceLocation dimension, double x, double y, double z, int amount, double xm, double ym, double zm, double xd, double yd, double zd, boolean randomizePosition) { 57 | this.particleId = particleId; 58 | this.dimension = dimension; 59 | this.x = x; 60 | this.y = y; 61 | this.z = z; 62 | this.amount = amount; 63 | this.xm = xm; 64 | this.ym = ym; 65 | this.zm = zm; 66 | this.xd = xd; 67 | this.yd = yd; 68 | this.zd = zd; 69 | this.randomizePosition = randomizePosition; 70 | } 71 | 72 | public ResourceLocation dimension; 73 | public ResourceLocation particleId; 74 | public double x, y, z; 75 | public int amount; 76 | public double xm, ym, zm; 77 | public double xd, yd, zd; 78 | public boolean randomizePosition; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/patchouli/LargeManaComponent.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.patchouli; 2 | 3 | import com.mojang.blaze3d.matrix.MatrixStack; 4 | import net.minecraft.client.Minecraft; 5 | import net.minecraft.client.gui.FontRenderer; 6 | import net.minecraft.util.text.IFormattableTextComponent; 7 | import net.minecraft.util.text.StringTextComponent; 8 | import net.minecraft.util.text.TextFormatting; 9 | import net.minecraft.util.text.TranslationTextComponent; 10 | import vazkii.botania.client.core.handler.HUDHandler; 11 | import vazkii.patchouli.api.IComponentRenderContext; 12 | import vazkii.patchouli.api.ICustomComponent; 13 | import vazkii.patchouli.api.IVariable; 14 | 15 | import javax.annotation.Nonnull; 16 | import java.util.function.UnaryOperator; 17 | 18 | public class LargeManaComponent implements ICustomComponent { 19 | 20 | private transient int x; 21 | private transient int y; 22 | private transient int[] manaValues; 23 | public IVariable mana; 24 | 25 | public LargeManaComponent() { 26 | 27 | } 28 | 29 | public void build(int componentX, int componentY, int pageNum) { 30 | this.x = componentX != -1 ? componentX : 7; 31 | this.y = componentY; 32 | } 33 | 34 | public void render(@Nonnull MatrixStack matrixStack, IComponentRenderContext ctx, float partialTicks, int mouseX, int mouseY) { 35 | FontRenderer font = Minecraft.getInstance().fontRenderer; 36 | IFormattableTextComponent manaUsage = (new TranslationTextComponent("botaniamisc.manaUsage")).setStyle(ctx.getFont()); 37 | //noinspection IntegerDivisionInFloatingPointContext 38 | font.func_243248_b(matrixStack, manaUsage, this.x + 51 - font.getStringPropertyWidth(manaUsage) / 2, this.y, 0x66000000); 39 | 40 | float ratio = ctx.isAreaHovered(mouseX, mouseY, this.x, this.y - 2, 102, 25) ? 0.25f : 1; 41 | 42 | HUDHandler.renderManaBar(matrixStack, this.x, this.y + 10, 0x00CCFF, 0.75F, this.manaValues[ctx.getTicksInBook() / 20 % this.manaValues.length], Math.round(1000000 / ratio)); 43 | IFormattableTextComponent ratioTc = (new TranslationTextComponent("botaniamisc.ratio", new StringTextComponent(floatToString(ratio)).mergeStyle(TextFormatting.BLUE))).setStyle(ctx.getFont()); 44 | //noinspection IntegerDivisionInFloatingPointContext 45 | font.func_243248_b(matrixStack, ratioTc, this.x + 51 - font.getStringPropertyWidth(ratioTc) / 2, this.y + 15, 0x777777); 46 | } 47 | 48 | public void onVariablesAvailable(UnaryOperator lookup) { 49 | IVariable manaVariable = lookup.apply(this.mana); 50 | if (manaVariable.unwrap().isJsonArray()) { 51 | this.manaValues = manaVariable.asStream().map(IVariable::asNumber).mapToInt(Number::intValue).toArray(); 52 | } else { 53 | this.manaValues = new int[]{ manaVariable.asNumber(0).intValue() }; 54 | } 55 | } 56 | 57 | private static String floatToString(float f) { 58 | String str = Float.toString(f); 59 | if (str.endsWith(".0")) { 60 | return str.substring(0, str.length() - 2); 61 | } else { 62 | return str; 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/main/resources/assets/mythicbotany/lang/de_de.json: -------------------------------------------------------------------------------- 1 | { 2 | "itemGroup.mythicbotany": "MythicBotany", 3 | 4 | "item.mythicbotany.asgard_rune": "Rune von Aagard", 5 | "item.mythicbotany.vanaheim_rune": "Rune von Wanenheim", 6 | "item.mythicbotany.alfheim_rune": "Rune von Alfheim", 7 | "item.mythicbotany.midgard_rune": "Rune von Midgard", 8 | "item.mythicbotany.joetunheim_rune": "Rune von Jötunheim", 9 | "item.mythicbotany.muspelheim_rune": "Rune von Muspelheim", 10 | "item.mythicbotany.niflheim_rune": "Rune von Niflheim", 11 | "item.mythicbotany.nidavellir_rune": "Rune von Nidavellir", 12 | "item.mythicbotany.helheim_rune": "Rune von Helheim", 13 | "item.mythicbotany.alfsteel_ingot": "Alfstahl Barren", 14 | "item.mythicbotany.alfsteel_nugget": "Alfstahl Nugget", 15 | "item.mythicbotany.alfsteel_armor_upgrade": "Doppelter Alfstahl Barren", 16 | "item.mythicbotany.alfsteel_sword": "Alf-Klinge", 17 | "item.mythicbotany.alfsteel_pick": "Alf-Brecher", 18 | "item.mythicbotany.alfsteel_axe": "Alf-Abschneider", 19 | "item.mythicbotany.alfsteel_helmet": "Alfstahl-Helm", 20 | "item.mythicbotany.alfsteel_chestplate": "Alfstahl-Brustpanzer", 21 | "item.mythicbotany.alfsteel_leggings": "Alfstahl-Beinschutz", 22 | "item.mythicbotany.alfsteel_boots": "Alfstahl-Stiefel", 23 | "item.mythicbotany.mana_ring_greatest": "Bestes Manaband", 24 | "item.mythicbotany.aura_ring_greatest": "Bestes Auraband", 25 | "item.mythicbotany.faded_nether_star": "Verblasster Netherstern", 26 | "item.mythicbotany.fire_ring": "Ring von Muspelheim", 27 | "item.mythicbotany.ice_ring": "Ring von Niflheim", 28 | 29 | "block.mythicbotany.mana_infuser": "Mana-Infundierer", 30 | "block.mythicbotany.alfsteel_block": "Alfstahl-Block", 31 | "block.mythicbotany.alfsteel_pylon": "Alfstahl-Pylon", 32 | "block.mythicbotany.mana_collector": "Manasammler", 33 | "block.mythicbotany.exoblaze": "Exolohe", 34 | "block.mythicbotany.exoblaze_floating": "Schwebende Exolohe", 35 | "block.mythicbotany.wither_aconite": "Witherling", 36 | "block.mythicbotany.wither_aconite_floating": "Schwebender Witherling", 37 | "block.mythicbotany.aquapanthus": "Aquapanthus", 38 | "block.mythicbotany.aquapanthus_floating": "Schwebender Aquapanthus", 39 | "block.mythicbotany.hellebore": "Höllenrose", 40 | "block.mythicbotany.hellebore_floating": "Schwebende Höllenrose", 41 | "block.mythicbotany.raindeletia": "Regengewächs", 42 | "block.mythicbotany.raindeletia_floating": "Floating Regengewächs", 43 | 44 | "item.mythicbotany.alfsteel_helmet.description": "Gibt dir eine etwas größere Reichweite.", 45 | "item.mythicbotany.alfsteel_chestplate.description": "Gibt dir eine gute Standfestigkeit.", 46 | "item.mythicbotany.alfsteel_leggings.description": "Macht dich schneller.", 47 | "item.mythicbotany.alfsteel_boots.description": "Lässt dich höher springen.", 48 | 49 | "block.mythicbotany.exoblaze.description": "Feurig!", 50 | "block.mythicbotany.wither_aconite.description": "Sie verschlingt Nethersterne.", 51 | "block.mythicbotany.aquapanthus.description": "Wässrig!.", 52 | "block.mythicbotany.hellebore.description": "Es fühlt sich wie Helheim an.", 53 | "block.mythicbotany.raindeletia.description": "Regen ist ein Segen." 54 | } -------------------------------------------------------------------------------- /src/main/java/mythicbotany/data/recipes/ElvenTradeProvider.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.data.recipes; 2 | 3 | import com.google.gson.JsonArray; 4 | import com.google.gson.JsonObject; 5 | import mythicbotany.MythicBotany; 6 | import net.minecraft.data.DataGenerator; 7 | import net.minecraft.data.IFinishedRecipe; 8 | import net.minecraft.data.RecipeProvider; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.item.crafting.IRecipeSerializer; 11 | import net.minecraft.item.crafting.Ingredient; 12 | import net.minecraft.util.ResourceLocation; 13 | import vazkii.botania.common.core.helper.ItemNBTHelper; 14 | import vazkii.botania.common.crafting.ModRecipeTypes; 15 | 16 | import javax.annotation.Nonnull; 17 | import javax.annotation.Nullable; 18 | import java.util.Arrays; 19 | import java.util.Collections; 20 | import java.util.List; 21 | import java.util.function.Consumer; 22 | 23 | public class ElvenTradeProvider extends RecipeProvider { 24 | public ElvenTradeProvider(DataGenerator gen) { 25 | super(gen); 26 | } 27 | 28 | @Nonnull 29 | @Override 30 | public String getName() { 31 | return "MysticBotany elven trade recipes"; 32 | } 33 | 34 | @Override 35 | protected void registerRecipes(@Nonnull Consumer consumer) { 36 | //Ingredient livingwood = Ingredient.fromTag(ModTags.Items.LIVINGWOOD); 37 | //consumer.accept(new FinishedRecipe(id("dreamwood"), new ItemStack(ModBlocks.dreamwood), livingwood)); 38 | } 39 | 40 | private static ResourceLocation id(String path) { 41 | return new ResourceLocation(MythicBotany.getInstance().modid, "elven_trade/" + path); 42 | } 43 | 44 | private static class FinishedRecipe implements IFinishedRecipe { 45 | private final ResourceLocation id; 46 | private final List inputs; 47 | private final List outputs; 48 | 49 | public FinishedRecipe(ResourceLocation id, ItemStack output, Ingredient... inputs) { 50 | this(id, Arrays.asList(inputs), Collections.singletonList(output)); 51 | } 52 | 53 | private FinishedRecipe(ResourceLocation id, List inputs, List outputs) { 54 | this.id = id; 55 | this.inputs = inputs; 56 | this.outputs = outputs; 57 | } 58 | 59 | @Override 60 | public void serialize(@Nonnull JsonObject json) { 61 | JsonArray in = new JsonArray(); 62 | for (Ingredient ingr : inputs) { 63 | in.add(ingr.serialize()); 64 | } 65 | 66 | JsonArray out = new JsonArray(); 67 | for (ItemStack s : outputs) { 68 | out.add(ItemNBTHelper.serializeStack(s)); 69 | } 70 | 71 | json.add("ingredients", in); 72 | json.add("output", out); 73 | } 74 | 75 | @Nonnull 76 | @Override 77 | public ResourceLocation getID() { 78 | return id; 79 | } 80 | 81 | @Nonnull 82 | @Override 83 | public IRecipeSerializer getSerializer() { 84 | return ModRecipeTypes.ELVEN_TRADE_SERIALIZER; 85 | } 86 | 87 | @Nullable 88 | @Override 89 | public JsonObject getAdvancementJson() { 90 | return null; 91 | } 92 | 93 | @Nullable 94 | @Override 95 | public ResourceLocation getAdvancementID() { 96 | return null; 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/ModBlocks.java: -------------------------------------------------------------------------------- 1 | package mythicbotany; 2 | 3 | import io.github.noeppi_noeppi.libx.mod.registration.BlockBase; 4 | import io.github.noeppi_noeppi.libx.mod.registration.BlockTE; 5 | import mythicbotany.base.BlockTEManaHUD; 6 | import mythicbotany.collector.TileManaCollector; 7 | import mythicbotany.functionalflora.*; 8 | import mythicbotany.functionalflora.base.BlockFunctionalFlower; 9 | import mythicbotany.infuser.BlockManaInfuser; 10 | import mythicbotany.infuser.TileManaInfuser; 11 | import mythicbotany.pylon.BlockAlfsteelPylon; 12 | import mythicbotany.pylon.TileAlfsteelPylon; 13 | import net.minecraft.block.AbstractBlock.Properties; 14 | import net.minecraft.block.SoundType; 15 | import net.minecraft.block.material.Material; 16 | 17 | public class ModBlocks { 18 | 19 | public static final BlockTE manaInfuser = new BlockManaInfuser(MythicBotany.getInstance(), TileManaInfuser.class, Properties.create(Material.IRON).hardnessAndResistance(20)); 20 | public static final BlockBase alfsteelBlock = new BlockBase(MythicBotany.getInstance(), Properties.create(Material.IRON).hardnessAndResistance(20)); 21 | public static final BlockTE alfsteelPylon = new BlockAlfsteelPylon(MythicBotany.getInstance(), Properties.create(Material.IRON).hardnessAndResistance(5.5F).sound(SoundType.METAL).setLightLevel((s) -> 7)); 22 | public static final BlockTE manaCollector = new BlockTEManaHUD<>(MythicBotany.getInstance(), TileManaCollector.class, Properties.create(Material.WOOD).hardnessAndResistance(5.5F)); 23 | public static final BlockFunctionalFlower exoblaze = new BlockFunctionalFlower<>(MythicBotany.getInstance(), Exoblaze.class, Properties.create(Material.PLANTS), false); 24 | public static final BlockFunctionalFlower witherAconite = new BlockFunctionalFlower<>(MythicBotany.getInstance(), WitherAconite.class, Properties.create(Material.PLANTS), true); 25 | public static final BlockFunctionalFlower aquapanthus = new BlockFunctionalFlower<>(MythicBotany.getInstance(), Aquapanthus.class, Properties.create(Material.PLANTS), false); 26 | public static final BlockFunctionalFlower hellebore = new BlockFunctionalFlower<>(MythicBotany.getInstance(), Hellebore.class, Properties.create(Material.PLANTS), false); 27 | public static final BlockFunctionalFlower raindeletia = new BlockFunctionalFlower<>(MythicBotany.getInstance(), Raindeletia.class, Properties.create(Material.PLANTS), true); 28 | 29 | public static void register() { 30 | MythicBotany.getInstance().register("mana_infuser", manaInfuser); 31 | MythicBotany.getInstance().register("alfsteel_block", alfsteelBlock); 32 | MythicBotany.getInstance().register("alfsteel_pylon", alfsteelPylon); 33 | MythicBotany.getInstance().register("mana_collector", manaCollector); 34 | MythicBotany.getInstance().register("exoblaze", exoblaze); 35 | MythicBotany.getInstance().register("wither_aconite", witherAconite); 36 | MythicBotany.getInstance().register("aquapanthus", aquapanthus); 37 | MythicBotany.getInstance().register("hellebore", hellebore); 38 | MythicBotany.getInstance().register("raindeletia", raindeletia); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/InfusionHandler.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import net.minecraft.client.Minecraft; 4 | import net.minecraft.world.World; 5 | import net.minecraftforge.fml.network.NetworkEvent; 6 | import vazkii.botania.client.fx.WispParticleData; 7 | 8 | import java.util.function.Supplier; 9 | 10 | public class InfusionHandler { 11 | 12 | public static void handle(InfusionSerializer.InfusionMessage msg, Supplier ctx) { 13 | ctx.get().enqueueWork(() -> { 14 | World world = Minecraft.getInstance().world; 15 | //noinspection ConstantConditions 16 | if (world == null && !msg.dimension.equals(world.getDimensionKey().getRegistryName())) 17 | return; 18 | 19 | int ticks = (int) (100.0 * msg.progress); 20 | 21 | int totalSpiritCount = 3; 22 | double tickIncrement = 360D / totalSpiritCount; 23 | 24 | int speed = 5; 25 | double wticks = ticks * speed - tickIncrement; 26 | 27 | double r = Math.sin((ticks - 100) / 10D) * 2; 28 | double g = Math.sin(wticks * Math.PI / 180 * 0.55); 29 | 30 | for (int i = 0; i < totalSpiritCount; i++) { 31 | double x = msg.x + Math.sin(wticks * Math.PI / 180) * r + 0.5; 32 | double y = msg.y + 0.25 + Math.abs(r) * 0.7; 33 | double z = msg.z + Math.cos(wticks * Math.PI / 180) * r + 0.5; 34 | 35 | wticks += tickIncrement; 36 | float fromR = ((msg.fromColor >> 16) & 0xFF) / 255f; 37 | float fromG = ((msg.fromColor >> 8) & 0xFF) / 255f; 38 | float fromB = ((msg.fromColor) & 0xFF) / 255f; 39 | float toR = ((msg.toColor >> 16) & 0xFF) / 255f; 40 | float toG = ((msg.toColor >> 8) & 0xFF) / 255f; 41 | float toB = ((msg.toColor) & 0xFF) / 255f; 42 | float[] colorsfx = new float[] { 43 | fromR + ((toR - fromR) * (float) msg.progress), 44 | fromG + ((toG - fromG) * (float) msg.progress), 45 | fromB + ((toB - fromB) * (float) msg.progress) 46 | }; 47 | WispParticleData data = WispParticleData.wisp(0.85F, colorsfx[0], colorsfx[1], colorsfx[2], 0.25F); 48 | world.addParticle(data, x, y, z, 0, (float) (-g * 0.05), 0); 49 | data = WispParticleData.wisp((float) Math.random() * 0.1F + 0.1F, colorsfx[0], colorsfx[1], colorsfx[2], 0.9F); 50 | world.addParticle(data, x, y, z, (float) (Math.random() - 0.5) * 0.05F, (float) (Math.random() - 0.5) * 0.05F, (float) (Math.random() - 0.5) * 0.05F); 51 | 52 | if (ticks == 100) { 53 | for (int j = 0; j < 15; j++) { 54 | data = WispParticleData.wisp((float) Math.random() * 0.15F + 0.15F, colorsfx[0], colorsfx[1], colorsfx[2]); 55 | world.addParticle(data, msg.x + 0.5, msg.y + 0.5, msg.z + 0.5, (float) (Math.random() - 0.5F) * 0.125F, (float) (Math.random() - 0.5F) * 0.125F, (float) (Math.random() - 0.5F) * 0.125F); 56 | } 57 | } 58 | } 59 | }); 60 | ctx.get().setPacketHandled(true); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/wand/RecipeDreamwoodWand.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.wand; 2 | 3 | import com.google.gson.JsonObject; 4 | import mythicbotany.ModItems; 5 | import net.minecraft.inventory.CraftingInventory; 6 | import net.minecraft.item.BlockItem; 7 | import net.minecraft.item.Item; 8 | import net.minecraft.item.ItemStack; 9 | import net.minecraft.item.crafting.IRecipeSerializer; 10 | import net.minecraft.item.crafting.ShapedRecipe; 11 | import net.minecraft.network.PacketBuffer; 12 | import net.minecraft.util.ResourceLocation; 13 | import net.minecraftforge.registries.ForgeRegistryEntry; 14 | import vazkii.botania.common.block.decor.BlockModMushroom; 15 | import vazkii.botania.common.crafting.recipe.TwigWandRecipe; 16 | import vazkii.botania.common.item.ItemTwigWand; 17 | import vazkii.botania.common.item.material.ItemPetal; 18 | 19 | import javax.annotation.Nonnull; 20 | import javax.annotation.Nullable; 21 | 22 | public class RecipeDreamwoodWand extends TwigWandRecipe { 23 | public static final IRecipeSerializer SERIALIZER = new Serializer(); 24 | 25 | public RecipeDreamwoodWand(ShapedRecipe compose) { 26 | super(compose); 27 | } 28 | 29 | @Nonnull 30 | public ItemStack getCraftingResult(CraftingInventory inv) { 31 | int first = -1; 32 | 33 | for(int i = 0; i < inv.getSizeInventory(); ++i) { 34 | ItemStack stack = inv.getStackInSlot(i); 35 | Item item = stack.getItem(); 36 | int colorId; 37 | if (item instanceof ItemPetal) { 38 | colorId = ((ItemPetal)item).color.getId(); 39 | } else { 40 | if (!(item instanceof BlockItem) || !(((BlockItem)item).getBlock() instanceof BlockModMushroom)) { 41 | continue; 42 | } 43 | colorId = ((BlockModMushroom)((BlockItem)item).getBlock()).color.getId(); 44 | } 45 | if (first != -1) { 46 | return ItemDreamwoodWand.forColors(first, colorId); 47 | } 48 | first = colorId; 49 | } 50 | 51 | return ItemTwigWand.forColors(first != -1 ? first : 0, 0); 52 | } 53 | 54 | @Nonnull 55 | public ItemStack getRecipeOutput() { 56 | return new ItemStack(ModItems.dreamwoodWand); 57 | } 58 | 59 | @Nonnull 60 | public IRecipeSerializer getSerializer() { 61 | return SERIALIZER; 62 | } 63 | 64 | private static class Serializer extends ForgeRegistryEntry> implements IRecipeSerializer { 65 | 66 | private Serializer() { 67 | 68 | } 69 | 70 | @Nonnull 71 | public RecipeDreamwoodWand read(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) { 72 | return new RecipeDreamwoodWand(CRAFTING_SHAPED.read(recipeId, json)); 73 | } 74 | 75 | @Nullable 76 | public RecipeDreamwoodWand read(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer) { 77 | return new RecipeDreamwoodWand(CRAFTING_SHAPED.read(recipeId, buffer)); 78 | } 79 | 80 | public void write(@Nonnull PacketBuffer buffer, @Nonnull RecipeDreamwoodWand recipe) { 81 | TwigWandRecipe.SERIALIZER.write(buffer, recipe); 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/pylon/PylonRepairables.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.pylon; 2 | 3 | import net.minecraft.enchantment.EnchantmentHelper; 4 | import net.minecraft.enchantment.Enchantments; 5 | import net.minecraft.item.ItemStack; 6 | import org.apache.commons.lang3.tuple.Pair; 7 | 8 | import javax.annotation.Nullable; 9 | import java.util.Comparator; 10 | import java.util.LinkedList; 11 | import java.util.List; 12 | 13 | public class PylonRepairables { 14 | 15 | public static final int PRIORITY_ITEM_WITH_INTERFACE = 10; 16 | public static final int PRIORITY_MENDING = -10; 17 | public static final int PRIORITY_DEFAULT = 0; 18 | 19 | private static final List> repairables = new LinkedList<>(); 20 | 21 | public static void register(PylonRepairable repairable) { 22 | register(repairable, PRIORITY_DEFAULT); 23 | } 24 | 25 | public static void register(PylonRepairable repairable, int priority) { 26 | repairables.add(Pair.of(repairable, -priority)); 27 | repairables.sort(Comparator.comparing(Pair::getRight)); 28 | } 29 | 30 | @Nullable 31 | public static PylonRepairable getRepairInfo(ItemStack stack) { 32 | if (stack.isEmpty()) 33 | return null; 34 | for (Pair entry : repairables) { 35 | if (entry.getLeft().canRepairPylon(stack)) 36 | return entry.getLeft(); 37 | } 38 | return null; 39 | } 40 | 41 | public static class ItemPylonRepairable implements PylonRepairable { 42 | 43 | @Override 44 | public int getRepairManaPerTick(ItemStack stack) { 45 | return stack.getItem() instanceof PylonRepairable ? ((PylonRepairable) stack.getItem()).getRepairManaPerTick(stack) : 0; 46 | } 47 | 48 | @Override 49 | public boolean canRepairPylon(ItemStack stack) { 50 | return stack.getItem() instanceof PylonRepairable && ((PylonRepairable) stack.getItem()).canRepairPylon(stack); 51 | } 52 | 53 | @Override 54 | public ItemStack repairOneTick(ItemStack stack) { 55 | return stack.getItem() instanceof PylonRepairable ? ((PylonRepairable) stack.getItem()).repairOneTick(stack) : stack; 56 | } 57 | } 58 | 59 | public static class MendingPylonRepairable implements PylonRepairable { 60 | 61 | public static final int MANA_PER_DURABILITY = 25; 62 | public static final int DURABILITY_PER_TICK = 5; 63 | 64 | @Override 65 | public int getRepairManaPerTick(ItemStack stack) { 66 | return EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, stack) > 0 ? MANA_PER_DURABILITY * DURABILITY_PER_TICK : 0; 67 | } 68 | 69 | @Override 70 | public boolean canRepairPylon(ItemStack stack) { 71 | return EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, stack) > 0 && stack.getDamage() > 0; 72 | } 73 | 74 | @Override 75 | public ItemStack repairOneTick(ItemStack stack) { 76 | if (EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, stack) > 0 && stack.getDamage() > 0) { 77 | stack.setDamage(stack.getDamage() - DURABILITY_PER_TICK); 78 | } 79 | return stack; 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/network/MythicNetwork.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.network; 2 | 3 | import io.github.noeppi_noeppi.libx.mod.ModX; 4 | import io.github.noeppi_noeppi.libx.network.NetworkX; 5 | import mythicbotany.network.ParticleSerializer.ParticleMessage; 6 | import net.minecraft.particles.BasicParticleType; 7 | import net.minecraft.util.math.BlockPos; 8 | import net.minecraft.world.World; 9 | import net.minecraftforge.fml.network.NetworkDirection; 10 | import net.minecraftforge.fml.network.PacketDistributor; 11 | 12 | public class MythicNetwork extends NetworkX { 13 | 14 | public MythicNetwork(ModX mod) { 15 | super(mod); 16 | } 17 | 18 | @Override 19 | protected String getProtocolVersion() { 20 | return "2"; 21 | } 22 | 23 | @Override 24 | public void registerPackets() { 25 | register(new ParticleSerializer(), () -> ParticleHandler::handle, NetworkDirection.PLAY_TO_CLIENT); 26 | register(new InfusionSerializer(), () -> InfusionHandler::handle, NetworkDirection.PLAY_TO_CLIENT); 27 | register(new PylonSerializer(), () -> PylonHandler::handle, NetworkDirection.PLAY_TO_CLIENT); 28 | 29 | register(new AlfSwordLeftClickSerializer(), () -> AlfSwordLeftClickHandler::handle, NetworkDirection.PLAY_TO_SERVER); 30 | } 31 | 32 | public void spawnParticle(World world, BasicParticleType particle, int amount, double x, double y, double z, double xm, double ym, double zm, double xd, double yd, double zd) { 33 | spawnParticle(world, particle, amount, x, y, z, xm, ym, zm, xd, yd, zd, false); 34 | } 35 | 36 | public void spawnParticle(World world, BasicParticleType particle, int amount, double x, double y, double z, double xm, double ym, double zm, double xd, double yd, double zd, boolean randomizePosition) { 37 | if (world.isRemote) { 38 | for (int i = 0; i < amount; i++) { 39 | if (randomizePosition) { 40 | world.addParticle(particle, 41 | x + (world.rand.nextDouble() * 2 * xd) - xd, 42 | y + (world.rand.nextDouble() * 2 * yd) - yd, 43 | z + (world.rand.nextDouble() * 2 * zd) - zd, 44 | xm, ym, zm); 45 | } else { 46 | world.addParticle(particle, x, y, z, 47 | xm + (world.rand.nextDouble() * 2 * xd) - xd, 48 | ym + (world.rand.nextDouble() * 2 * yd) - yd, 49 | zm + (world.rand.nextDouble() * 2 * zd) - zd); 50 | } 51 | } 52 | } else { 53 | instance.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(x, y, z, 100, world.getDimensionKey())), 54 | new ParticleMessage(particle.getRegistryName(), world.getDimensionKey().getRegistryName(), x, y, z, amount, xm, ym, zm, xd, yd, zd, randomizePosition)); 55 | } 56 | } 57 | 58 | public void spawnInfusionParticles(World world, BlockPos pos, double progress, int fromColor, int toColor) { 59 | if (!world.isRemote) { 60 | instance.send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunkAt(pos)), new InfusionSerializer.InfusionMessage(pos.getX(), pos.getY(), pos.getZ(), world.getDimensionKey().getRegistryName(), progress, fromColor, toColor)); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/MythicBotany.java: -------------------------------------------------------------------------------- 1 | package mythicbotany; 2 | 3 | import io.github.noeppi_noeppi.libx.mod.registration.ModXRegistration; 4 | import mythicbotany.config.ClientConfig; 5 | import mythicbotany.data.DataGenerators; 6 | import mythicbotany.network.MythicNetwork; 7 | import mythicbotany.pylon.PylonRepairables; 8 | import net.minecraft.item.ItemGroup; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraftforge.common.MinecraftForge; 11 | import net.minecraftforge.fml.InterModComms; 12 | import net.minecraftforge.fml.ModLoadingContext; 13 | import net.minecraftforge.fml.common.Mod; 14 | import net.minecraftforge.fml.config.ModConfig; 15 | import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; 16 | import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; 17 | import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; 18 | import net.minecraftforge.fml.event.server.FMLServerStartingEvent; 19 | import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; 20 | import top.theillusivec4.curios.api.SlotTypePreset; 21 | 22 | import javax.annotation.Nonnull; 23 | 24 | @Mod("mythicbotany") 25 | public class MythicBotany extends ModXRegistration { 26 | 27 | private static MythicBotany instance; 28 | private static MythicNetwork network; 29 | 30 | public MythicBotany() { 31 | super("mythicbotany", new ItemGroup("mythicbotany") { 32 | @Nonnull 33 | @Override 34 | public ItemStack createIcon() { 35 | return new ItemStack(ModItems.alfsteelSword); 36 | } 37 | }); 38 | 39 | instance = this; 40 | network = new MythicNetwork(this); 41 | 42 | ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ClientConfig.CLIENT_CONFIG); 43 | 44 | addRegistrationHandler(ModBlocks::register); 45 | addRegistrationHandler(ModItems::register); 46 | addRegistrationHandler(ModRecipes::register); 47 | addRegistrationHandler(ModMisc::register); 48 | 49 | FMLJavaModLoadingContext.get().getModEventBus().addListener(this::sendIMC); 50 | MinecraftForge.EVENT_BUS.addListener(this::serverStart); 51 | 52 | FMLJavaModLoadingContext.get().getModEventBus().addListener(DataGenerators::gatherData); 53 | 54 | MinecraftForge.EVENT_BUS.register(new EventListener()); 55 | } 56 | 57 | @Nonnull 58 | public static MythicBotany getInstance() { 59 | return instance; 60 | } 61 | 62 | @Nonnull 63 | public static MythicNetwork getNetwork() { 64 | return network; 65 | } 66 | 67 | @Override 68 | protected void setup(final FMLCommonSetupEvent event) { 69 | logger.info("Loading MythicBotany"); 70 | 71 | PylonRepairables.register(new PylonRepairables.ItemPylonRepairable(), PylonRepairables.PRIORITY_ITEM_WITH_INTERFACE); 72 | PylonRepairables.register(new PylonRepairables.MendingPylonRepairable(), PylonRepairables.PRIORITY_MENDING); 73 | } 74 | 75 | @Override 76 | protected void clientSetup(FMLClientSetupEvent fmlClientSetupEvent) { 77 | // 78 | } 79 | 80 | private void sendIMC(final InterModEnqueueEvent event) { 81 | InterModComms.sendTo("curios", "register_type", () -> SlotTypePreset.RING.getMessageBuilder().size(3).build()); 82 | } 83 | 84 | public void serverStart(FMLServerStartingEvent event) { 85 | RecipeRemover.removeRecipes(event.getServer().getRecipeManager()); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/infuser/BlockManaInfuser.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.infuser; 2 | 3 | import io.github.noeppi_noeppi.libx.crafting.recipe.RecipeHelper; 4 | import io.github.noeppi_noeppi.libx.mod.ModX; 5 | import io.github.noeppi_noeppi.libx.mod.registration.BlockTE; 6 | import mythicbotany.ModRecipes; 7 | import net.minecraft.block.BlockState; 8 | import net.minecraft.entity.item.ItemEntity; 9 | import net.minecraft.entity.player.PlayerEntity; 10 | import net.minecraft.item.ItemStack; 11 | import net.minecraft.pathfinding.PathType; 12 | import net.minecraft.util.ActionResultType; 13 | import net.minecraft.util.Hand; 14 | import net.minecraft.util.math.BlockPos; 15 | import net.minecraft.util.math.BlockRayTraceResult; 16 | import net.minecraft.util.math.shapes.ISelectionContext; 17 | import net.minecraft.util.math.shapes.VoxelShape; 18 | import net.minecraft.world.IBlockReader; 19 | import net.minecraft.world.World; 20 | 21 | import javax.annotation.Nonnull; 22 | 23 | public class BlockManaInfuser extends BlockTE { 24 | 25 | private static final VoxelShape SHAPE = makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 3.0D, 16.0D); 26 | 27 | public BlockManaInfuser(ModX mod, Class teClass, Properties properties) { 28 | super(mod, teClass, properties); 29 | } 30 | 31 | @SuppressWarnings("deprecation") 32 | @Nonnull 33 | public VoxelShape getShape(@Nonnull BlockState state, @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull ISelectionContext ctx) { 34 | return SHAPE; 35 | } 36 | 37 | @SuppressWarnings("deprecation") 38 | public boolean allowsMovement(@Nonnull BlockState state, @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull PathType type) { 39 | return false; 40 | } 41 | 42 | @SuppressWarnings("deprecation") 43 | public boolean hasComparatorInputOverride(@Nonnull BlockState state) { 44 | return true; 45 | } 46 | 47 | @SuppressWarnings("deprecation") 48 | public int getComparatorInputOverride(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos) { 49 | TileManaInfuser te = getTile(world, pos); 50 | double progress = te.getProgess(); 51 | if (progress < 0) { 52 | return 0; 53 | } else { 54 | return 1 + (int) (Math.round(progress * 14)); 55 | } 56 | } 57 | 58 | @SuppressWarnings("deprecation") 59 | @Nonnull 60 | @Override 61 | public ActionResultType onBlockActivated(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull PlayerEntity player, @Nonnull Hand hand, @Nonnull BlockRayTraceResult hit) { 62 | if (!world.isRemote) { 63 | ItemStack stack = player.getHeldItem(hand); 64 | if (!stack.isEmpty() && RecipeHelper.isItemValidInput(world.getRecipeManager(), ModRecipes.INFUSER, stack)) { 65 | ItemStack copy = stack.copy(); 66 | stack.shrink(1); 67 | player.setHeldItem(hand, stack); 68 | copy.setCount(1); 69 | ItemEntity entity = new ItemEntity(world, pos.getX() + 0.5, pos.getY() + 0.4, pos.getZ() + 0.5, copy); 70 | entity.setMotion(0, 0, 0); 71 | world.addEntity(entity); 72 | return ActionResultType.SUCCESS; 73 | } else { 74 | return super.onBlockActivated(state, world, pos, player, hand, hit); 75 | } 76 | } else { 77 | return super.onBlockActivated(state, world, pos, player, hand, hit); 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/mythicbotany/alftools/AlfsteelAxe.java: -------------------------------------------------------------------------------- 1 | package mythicbotany.alftools; 2 | 3 | import io.github.noeppi_noeppi.libx.mod.registration.Registerable; 4 | import mythicbotany.ModItems; 5 | import mythicbotany.MythicBotany; 6 | import mythicbotany.pylon.PylonRepairable; 7 | import net.minecraft.entity.item.ItemEntity; 8 | import net.minecraft.entity.player.PlayerEntity; 9 | import net.minecraft.item.ItemModelsProperties; 10 | import net.minecraft.item.ItemStack; 11 | import net.minecraft.item.ItemUseContext; 12 | import net.minecraft.item.crafting.Ingredient; 13 | import net.minecraft.util.ActionResult; 14 | import net.minecraft.util.ActionResultType; 15 | import net.minecraft.util.Hand; 16 | import net.minecraft.util.ResourceLocation; 17 | import net.minecraft.util.math.AxisAlignedBB; 18 | import net.minecraft.world.World; 19 | import net.minecraftforge.api.distmarker.Dist; 20 | import net.minecraftforge.api.distmarker.OnlyIn; 21 | import vazkii.botania.common.item.equipment.tool.terrasteel.ItemTerraAxe; 22 | import vazkii.botania.common.lib.ModTags; 23 | 24 | import javax.annotation.Nonnull; 25 | import java.util.List; 26 | 27 | public class AlfsteelAxe extends ItemTerraAxe implements PylonRepairable, Registerable { 28 | 29 | public static final int ITEM_COLLECT_RANGE = 8; 30 | 31 | public AlfsteelAxe(Properties props) { 32 | super(props.maxDamage(4600)); 33 | } 34 | 35 | @Override 36 | @OnlyIn(Dist.CLIENT) 37 | public void registerClient(ResourceLocation id) { 38 | ItemModelsProperties.registerProperty(ModItems.alfsteelAxe, new ResourceLocation(MythicBotany.getInstance().modid, "active"), (stack, world, entity) -> entity instanceof PlayerEntity && !shouldBreak((PlayerEntity) entity) ? 0.0F : 1.0F); 39 | } 40 | 41 | @Nonnull 42 | @Override 43 | public ActionResultType onItemUse(ItemUseContext ctx) { 44 | PlayerEntity player = ctx.getPlayer(); 45 | if (player != null) { 46 | if (!player.isSneaking()) { 47 | return super.onItemUse(ctx); 48 | } 49 | } 50 | return ActionResultType.PASS; 51 | } 52 | 53 | @Nonnull 54 | @Override 55 | public ActionResult onItemRightClick(@Nonnull World world, PlayerEntity player, @Nonnull Hand hand) { 56 | double x = player.getPosX(); 57 | double y = player.getPosY(); 58 | double z = player.getPosZ(); 59 | if (!world.isRemote) { 60 | ItemStack stack = player.getHeldItem(hand); 61 | stack.damageItem(1, player, _x -> {}); 62 | player.setHeldItem(hand, stack); 63 | } 64 | List items = world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(x - ITEM_COLLECT_RANGE, y - ITEM_COLLECT_RANGE, z - ITEM_COLLECT_RANGE, x + ITEM_COLLECT_RANGE, y + ITEM_COLLECT_RANGE, z + ITEM_COLLECT_RANGE)); 65 | for (ItemEntity item : items) { 66 | item.setLocationAndAngles(x + world.rand.nextFloat() - 0.5f, y + world.rand.nextFloat(), z + world.rand.nextFloat() - 0.5f, item.rotationYaw, item.rotationPitch); 67 | } 68 | return ActionResult.resultSuccess(player.getHeldItem(hand)); 69 | } 70 | 71 | @Override 72 | public boolean getIsRepairable(@Nonnull ItemStack toRepair, @Nonnull ItemStack repair) { 73 | return repair.getItem() == ModItems.alfsteelIngot || (!Ingredient.fromTag(ModTags.Items.INGOTS_TERRASTEEL).test(repair) && super.getIsRepairable(toRepair, repair)); 74 | } 75 | 76 | @Override 77 | public boolean canRepairPylon(ItemStack stack) { 78 | return stack.getDamage() > 0; 79 | } 80 | 81 | @Override 82 | public int getRepairManaPerTick(ItemStack stack) { 83 | return (int) (2.5 * AlfsteelSword.MANA_PER_DURABILITY); 84 | } 85 | 86 | @Override 87 | public ItemStack repairOneTick(ItemStack stack) { 88 | stack.setDamage(Math.max(0, stack.getDamage() - 5)); 89 | return stack; 90 | } 91 | } 92 | --------------------------------------------------------------------------------