From 8f44802ada370314c143c109cda675259934e0e8 Mon Sep 17 00:00:00 2001 From: Johann Bernhardt Date: Wed, 24 Nov 2021 21:10:45 +0100 Subject: [PATCH 1/4] Moved resources and stripped apis --- .../mcp/mobius/waila/api/IWailaBlock.java | 34 -- .../waila/api/IWailaBlockDecorator.java | 9 - .../mobius/waila/api/IWailaConfigHandler.java | 28 - .../mobius/waila/api/IWailaDataAccessor.java | 33 -- .../mobius/waila/api/IWailaDataProvider.java | 33 -- .../waila/api/IWailaEntityAccessor.java | 24 - .../waila/api/IWailaEntityProvider.java | 16 - .../mobius/waila/api/IWailaFMPAccessor.java | 26 - .../mobius/waila/api/IWailaFMPDecorator.java | 7 - .../mobius/waila/api/IWailaFMPProvider.java | 12 - .../mcp/mobius/waila/api/IWailaRegistrar.java | 44 -- .../waila/api/IWailaSummaryProvider.java | 21 - .../mcp/mobius/waila/api/SpecialChars.java | 40 -- .../mcp/mobius/waila/api/package-info.java | 3 - .../api/FactoryRegistry.java | 113 ---- .../api/FertilizerType.java | 27 - .../minefactoryreloaded/api/HarvestType.java | 44 -- .../api/IDeepStorageUnit.java | 29 - .../api/IFactoryFertilizable.java | 41 -- .../api/IFactoryFertilizer.java | 29 - .../api/IFactoryFruit.java | 75 --- .../api/IFactoryGrindable.java | 35 -- .../api/IFactoryHarvestable.java | 71 --- .../api/IFactoryLaserTarget.java | 25 - .../api/IFactoryPlantable.java | 65 --- .../api/IFactoryRanchable.java | 28 - .../api/ILiquidDrinkHandler.java | 8 - .../minefactoryreloaded/api/IMFRHammer.java | 9 - .../api/IMobEggHandler.java | 18 - .../api/IMobSpawnHandler.java | 27 - .../minefactoryreloaded/api/INeedleAmmo.java | 13 - .../api/IRandomMobProvider.java | 11 - .../api/ISafariNetHandler.java | 27 - .../minefactoryreloaded/api/ISyringe.java | 46 -- .../minefactoryreloaded/api/MobDrop.java | 21 - .../minefactoryreloaded/api/RanchedItem.java | 68 --- .../minefactoryreloaded/api/RandomMob.java | 28 - .../api/ReplacementBlock.java | 137 ----- .../minefactoryreloaded/api/ValuedItem.java | 72 --- .../api/rednet/IRedNetInfo.java | 28 - .../api/rednet/IRedNetInputNode.java | 52 -- .../api/rednet/IRedNetLogicCircuit.java | 19 - .../api/rednet/IRedNetLogicPoint.java | 36 -- .../api/rednet/IRedNetNetworkContainer.java | 32 -- .../api/rednet/IRedNetOmniNode.java | 22 - .../api/rednet/IRedNetOutputNode.java | 51 -- .../connectivity/IRedNetConnection.java | 26 - .../connectivity/IRedNetDecorative.java | 11 - .../connectivity/IRedNetNoConnection.java | 13 - .../rednet/connectivity/IRedstoneAlike.java | 10 - .../connectivity/RedNetConnectionType.java | 86 --- src/api/java/thaumcraft/api/IGoggles.java | 22 - src/api/java/thaumcraft/api/IRepairable.java | 13 - .../thaumcraft/api/IRepairableExtended.java | 17 - src/api/java/thaumcraft/api/IRunicArmor.java | 22 - src/api/java/thaumcraft/api/IScribeTools.java | 14 - .../java/thaumcraft/api/IVisDiscountGear.java | 20 - src/api/java/thaumcraft/api/ItemApi.java | 70 --- src/api/java/thaumcraft/api/ItemRunic.java | 21 - src/api/java/thaumcraft/api/LICENSE | 20 - src/api/java/thaumcraft/api/README.md | 10 - .../java/thaumcraft/api/ThaumcraftApi.java | 536 ------------------ .../thaumcraft/api/ThaumcraftApiHelper.java | 293 ---------- .../java/thaumcraft/api/TileThaumcraft.java | 63 -- .../java/thaumcraft/api/WorldCoordinates.java | 117 ---- .../java/thaumcraft/api/aspects/Aspect.java | 201 ------- .../thaumcraft/api/aspects/AspectList.java | 256 --------- .../api/aspects/AspectSourceHelper.java | 58 -- .../api/aspects/IAspectContainer.java | 80 --- .../thaumcraft/api/aspects/IAspectSource.java | 16 - .../api/aspects/IEssentiaContainerItem.java | 37 -- .../api/aspects/IEssentiaTransport.java | 100 ---- .../api/crafting/CrucibleRecipe.java | 111 ---- .../api/crafting/IArcaneRecipe.java | 35 -- .../api/crafting/IInfusionStabiliser.java | 19 - .../crafting/InfusionEnchantmentRecipe.java | 156 ----- .../api/crafting/InfusionRecipe.java | 128 ----- .../api/crafting/ShapedArcaneRecipe.java | 261 --------- .../api/crafting/ShapelessArcaneRecipe.java | 157 ----- .../DamageSourceIndirectThaumcraftEntity.java | 32 -- .../damagesource/DamageSourceThaumcraft.java | 47 -- .../thaumcraft/api/entities/ITaintedMob.java | 5 - src/api/java/thaumcraft/api/nodes/INode.java | 53 -- .../java/thaumcraft/api/nodes/IRevealer.java | 22 - .../thaumcraft/api/nodes/NodeModifier.java | 6 - .../java/thaumcraft/api/nodes/NodeType.java | 6 - .../api/potions/PotionFluxTaint.java | 67 --- .../api/potions/PotionVisExhaust.java | 48 -- .../api/research/IScanEventHandler.java | 9 - .../api/research/ResearchCategories.java | 101 ---- .../api/research/ResearchCategoryList.java | 37 -- .../thaumcraft/api/research/ResearchItem.java | 367 ------------ .../thaumcraft/api/research/ResearchPage.java | 193 ------- .../thaumcraft/api/research/ScanResult.java | 39 -- .../thaumcraft/api/visnet/TileVisNode.java | 188 ------ .../thaumcraft/api/visnet/VisNetHandler.java | 284 ---------- .../java/thaumcraft/api/wands/IWandFocus.java | 64 --- .../api/wands/IWandRodOnUpdate.java | 16 - .../api/wands/IWandTriggerManager.java | 15 - .../java/thaumcraft/api/wands/IWandable.java | 25 - .../thaumcraft/api/wands/ItemFocusBasic.java | 166 ------ .../java/thaumcraft/api/wands/StaffRod.java | 48 -- .../java/thaumcraft/api/wands/WandCap.java | 129 ----- .../java/thaumcraft/api/wands/WandRod.java | 158 ------ .../api/wands/WandTriggerRegistry.java | 126 ---- src/main/java/mods/natura/Natura.java | 2 +- .../resources}/assets/natura/lang/de_DE.lang | 0 .../resources}/assets/natura/lang/en_US.lang | 0 .../resources}/assets/natura/lang/it_IT.lang | 0 .../resources}/assets/natura/lang/ko_KR.lang | 0 .../resources}/assets/natura/lang/pl_PL.lang | 0 .../resources}/assets/natura/lang/ru_RU.lang | 0 .../resources}/assets/natura/lang/zh_CN.lang | 0 .../assets/natura/textures/armor/imp_1.png | Bin .../assets/natura/textures/armor/imp_2.png | Bin .../natura/textures/blocks/air_sulfur.png | Bin .../natura/textures/blocks/apple_bark.png | Bin .../textures/blocks/apple_bookshelf.png | Bin .../natura/textures/blocks/apple_heart.png | Bin .../natura/textures/blocks/apple_ladder.png | Bin .../textures/blocks/apple_leaves_fancy.png | Bin .../textures/blocks/apple_leaves_fast.png | Bin .../blocks/apple_leaves_flowering_fancy.png | Bin .../blocks/apple_leaves_flowering_fast.png | Bin .../blocks/apple_leaves_fruit_fancy.png | Bin .../blocks/apple_leaves_fruit_fast.png | Bin .../blocks/apple_leaves_gold_fancy.png | Bin .../blocks/apple_leaves_gold_fast.png | Bin .../natura/textures/blocks/apple_planks.png | Bin .../natura/textures/blocks/apple_sapling.png | Bin .../natura/textures/blocks/apple_trapdoor.png | Bin .../natura/textures/blocks/barley_1.png | Bin .../natura/textures/blocks/barley_2.png | Bin .../natura/textures/blocks/barley_3.png | Bin .../natura/textures/blocks/barley_4.png | Bin .../textures/blocks/birch_door_bottom.png | Bin .../natura/textures/blocks/birch_door_top.png | Bin .../textures/blocks/blackberry_fancy.png | Bin .../textures/blocks/blackberry_fast.png | Bin .../textures/blocks/blackberry_ripe_fancy.png | Bin .../textures/blocks/blackberry_ripe_fast.png | Bin .../textures/blocks/blightberry_fancy.png | Bin .../textures/blocks/blightberry_fast.png | Bin .../blocks/blightberry_ripe_fancy.png | Bin .../textures/blocks/blightberry_ripe_fast.png | Bin .../natura/textures/blocks/bloodwood_bark.png | Bin .../textures/blocks/bloodwood_bookshelf.png | Bin .../textures/blocks/bloodwood_door_bottom.png | Bin .../textures/blocks/bloodwood_door_top.png | Bin .../textures/blocks/bloodwood_heart_small.png | Bin .../textures/blocks/bloodwood_ladder.png | Bin .../blocks/bloodwood_leaves_fancy.png | Bin .../textures/blocks/bloodwood_leaves_fast.png | Bin .../textures/blocks/bloodwood_lower_left.png | Bin .../textures/blocks/bloodwood_lower_right.png | Bin .../textures/blocks/bloodwood_planks.png | Bin .../textures/blocks/bloodwood_sapling.png | Bin .../textures/blocks/bloodwood_side_left.png | Bin .../textures/blocks/bloodwood_side_right.png | Bin .../textures/blocks/bloodwood_trapdoor.png | Bin .../textures/blocks/bloodwood_upper_left.png | Bin .../textures/blocks/bloodwood_upper_right.png | Bin .../blocks/bloodwood_workbench_face.png | Bin .../blocks/bloodwood_workbench_side.png | Bin .../blocks/bloodwood_workbench_top.png | Bin .../textures/blocks/blueberry_fancy.png | Bin .../natura/textures/blocks/blueberry_fast.png | Bin .../textures/blocks/blueberry_ripe_fancy.png | Bin .../textures/blocks/blueberry_ripe_fast.png | Bin .../textures/blocks/brail_activator.png | Bin .../blocks/brail_activator_powered.png | Bin .../natura/textures/blocks/brail_detector.png | Bin .../blocks/brail_detector_powered.png | Bin .../natura/textures/blocks/brail_golden.png | Bin .../textures/blocks/brail_golden_powered.png | Bin .../natura/textures/blocks/brail_normal.png | Bin .../textures/blocks/brail_normal_turned.png | Bin .../natura/textures/blocks/cloud_dark.png | Bin .../natura/textures/blocks/cloud_gray.png | Bin .../natura/textures/blocks/cloud_sulfur.png | Bin .../natura/textures/blocks/cloud_white.png | Bin .../textures/blocks/corrupt_brick_amber.png | Bin .../textures/blocks/corrupt_brick_blue.png | Bin .../textures/blocks/corrupt_brick_green.png | Bin .../textures/blocks/corrupt_brick_magenta.png | Bin .../textures/blocks/corrupt_brick_purple.png | Bin .../textures/blocks/corrupt_brick_red.png | Bin .../textures/blocks/corrupt_brick_silver.png | Bin .../textures/blocks/corrupt_brick_yellow.png | Bin .../textures/blocks/corrupt_stone_amber.png | Bin .../textures/blocks/corrupt_stone_blue.png | Bin .../textures/blocks/corrupt_stone_green.png | Bin .../textures/blocks/corrupt_stone_magenta.png | Bin .../textures/blocks/corrupt_stone_purple.png | Bin .../textures/blocks/corrupt_stone_red.png | Bin .../textures/blocks/corrupt_stone_silver.png | Bin .../textures/blocks/corrupt_stone_yellow.png | Bin .../textures/blocks/corruptor_amber.png | Bin .../natura/textures/blocks/corruptor_blue.png | Bin .../blocks/corruptor_grass_side_amber.png | Bin .../blocks/corruptor_grass_side_blue.png | Bin .../blocks/corruptor_grass_side_green.png | Bin .../blocks/corruptor_grass_side_magenta.png | Bin .../blocks/corruptor_grass_side_purple.png | Bin .../blocks/corruptor_grass_side_red.png | Bin .../blocks/corruptor_grass_side_silver.png | Bin .../blocks/corruptor_grass_side_yellow.png | Bin .../blocks/corruptor_grass_top_amber.png | Bin .../blocks/corruptor_grass_top_blue.png | Bin .../blocks/corruptor_grass_top_green.png | Bin .../blocks/corruptor_grass_top_magenta.png | Bin .../blocks/corruptor_grass_top_purple.png | Bin .../blocks/corruptor_grass_top_red.png | Bin .../blocks/corruptor_grass_top_silver.png | Bin .../blocks/corruptor_grass_top_yellow.png | Bin .../textures/blocks/corruptor_green.png | Bin .../textures/blocks/corruptor_magenta.png | Bin .../textures/blocks/corruptor_purple.png | Bin .../natura/textures/blocks/corruptor_red.png | Bin .../textures/blocks/corruptor_silver.png | Bin .../textures/blocks/corruptor_yellow.png | Bin .../natura/textures/blocks/cotton_1.png | Bin .../natura/textures/blocks/cotton_2.png | Bin .../natura/textures/blocks/cotton_3.png | Bin .../natura/textures/blocks/cotton_4.png | Bin .../natura/textures/blocks/cotton_5.png | Bin .../natura/textures/blocks/darkwood_bark.png | Bin .../textures/blocks/darkwood_bookshelf.png | Bin .../textures/blocks/darkwood_door_bottom.png | Bin .../textures/blocks/darkwood_door_item.png | Bin .../textures/blocks/darkwood_door_top.png | Bin .../darkwood_flowering_leaves_fancy.png | Bin .../blocks/darkwood_flowering_leaves_fast.png | Bin .../blocks/darkwood_fruit_leaves_fancy.png | Bin .../blocks/darkwood_fruit_leaves_fast.png | Bin .../natura/textures/blocks/darkwood_heart.png | Bin .../textures/blocks/darkwood_ladder.png | Bin .../textures/blocks/darkwood_leaves_fancy.png | Bin .../textures/blocks/darkwood_leaves_fast.png | Bin .../textures/blocks/darkwood_planks.png | Bin .../textures/blocks/darkwood_sapling.png | Bin .../textures/blocks/darkwood_trapdoor.png | Bin .../blocks/darkwood_workbench_face.png | Bin .../blocks/darkwood_workbench_side.png | Bin .../blocks/darkwood_workbench_top.png | Bin .../textures/blocks/duskberry_fancy.png | Bin .../natura/textures/blocks/duskberry_fast.png | Bin .../textures/blocks/duskberry_ripe_fancy.png | Bin .../textures/blocks/duskberry_ripe_fast.png | Bin .../textures/blocks/eucalyptus_bark.png | Bin .../textures/blocks/eucalyptus_bookshelf.png | Bin .../blocks/eucalyptus_door_bottom.png | Bin .../textures/blocks/eucalyptus_door_top.png | Bin .../textures/blocks/eucalyptus_heart.png | Bin .../textures/blocks/eucalyptus_ladder.png | Bin .../blocks/eucalyptus_leaves_fancy.png | Bin .../blocks/eucalyptus_leaves_fast.png | Bin .../textures/blocks/eucalyptus_planks.png | Bin .../textures/blocks/eucalyptus_sapling.png | Bin .../textures/blocks/eucalyptus_trapdoor.png | Bin .../blocks/eucalyptus_workbench_face.png | Bin .../blocks/eucalyptus_workbench_side.png | Bin .../blocks/eucalyptus_workbench_top.png | Bin .../textures/blocks/flower_bluebells.png | Bin .../natura/textures/blocks/fusewood_bark.png | Bin .../textures/blocks/fusewood_bookshelf.png | Bin .../textures/blocks/fusewood_door_bottom.png | Bin .../textures/blocks/fusewood_door_top.png | Bin .../natura/textures/blocks/fusewood_heart.png | Bin .../textures/blocks/fusewood_leaves_fancy.png | Bin .../textures/blocks/fusewood_leaves_fast.png | Bin .../textures/blocks/fusewood_planks.png | Bin .../textures/blocks/fusewood_sapling.png | Bin .../textures/blocks/fusewood_trapdoor.png | Bin .../textures/blocks/fusewood_window.png | Bin .../blocks/fusewood_workbench_face.png | Bin .../blocks/fusewood_workbench_side.png | Bin .../blocks/fusewood_workbench_top.png | Bin .../natura/textures/blocks/geoberry_fancy.png | Bin .../natura/textures/blocks/geoberry_fast.png | Bin .../textures/blocks/geoberry_ripe_fancy.png | Bin .../textures/blocks/geoberry_ripe_fast.png | Bin .../natura/textures/blocks/ghostwood_bark.png | Bin .../textures/blocks/ghostwood_bookshelf.png | Bin .../textures/blocks/ghostwood_door_bottom.png | Bin .../textures/blocks/ghostwood_door_top.png | Bin .../textures/blocks/ghostwood_heart.png | Bin .../textures/blocks/ghostwood_ladder.png | Bin .../blocks/ghostwood_leaves_fancy.png | Bin .../textures/blocks/ghostwood_leaves_fast.png | Bin .../textures/blocks/ghostwood_planks.png | Bin .../textures/blocks/ghostwood_sapling.png | Bin .../textures/blocks/ghostwood_trapdoor.png | Bin .../blocks/ghostwood_workbench_face.png | Bin .../blocks/ghostwood_workbench_side.png | Bin .../blocks/ghostwood_workbench_top.png | Bin .../natura/textures/blocks/glass_heat.png | Bin .../textures/blocks/glass_heat_item.png | Bin .../natura/textures/blocks/glass_soul.png | Bin .../textures/blocks/glass_soul_item.png | Bin .../natura/textures/blocks/glass_soulbak.png | Bin .../natura/textures/blocks/grass_top.png | Bin .../natura/textures/blocks/heatsand.png | Bin .../natura/textures/blocks/hopseed_bark.png | Bin .../textures/blocks/hopseed_bookshelf.png | Bin .../textures/blocks/hopseed_door_bottom.png | Bin .../textures/blocks/hopseed_door_top.png | Bin .../natura/textures/blocks/hopseed_heart.png | Bin .../natura/textures/blocks/hopseed_ladder.png | Bin .../textures/blocks/hopseed_leaves_fancy.png | Bin .../textures/blocks/hopseed_leaves_fast.png | Bin .../natura/textures/blocks/hopseed_planks.png | Bin .../textures/blocks/hopseed_sapling.png | Bin .../textures/blocks/hopseed_trapdoor.png | Bin .../blocks/hopseed_workbench_face.png | Bin .../blocks/hopseed_workbench_side.png | Bin .../textures/blocks/hopseed_workbench_top.png | Bin .../natura/textures/blocks/infernal_stone.png | Bin .../natura/textures/blocks/maple_bark.png | Bin .../textures/blocks/maple_bookshelf.png | Bin .../textures/blocks/maple_door_bottom.png | Bin .../natura/textures/blocks/maple_door_top.png | Bin .../natura/textures/blocks/maple_heart.png | Bin .../textures/blocks/maple_leaves_fancy.png | Bin .../textures/blocks/maple_leaves_fast.png | Bin .../natura/textures/blocks/maple_planks.png | Bin .../natura/textures/blocks/maple_sapling.png | Bin .../natura/textures/blocks/maple_trapdoor.png | Bin .../natura/textures/blocks/maple_window.png | Bin .../textures/blocks/maple_workbench_face.png | Bin .../textures/blocks/maple_workbench_side.png | Bin .../textures/blocks/maple_workbench_top.png | Bin .../natura/textures/blocks/mushroom_amber.png | Bin .../natura/textures/blocks/mushroom_blue.png | Bin .../natura/textures/blocks/mushroom_green.png | Bin .../textures/blocks/mushroom_inside_blue.png | Bin .../textures/blocks/mushroom_inside_green.png | Bin .../blocks/mushroom_inside_purple.png | Bin .../textures/blocks/mushroom_purple.png | Bin .../textures/blocks/mushroom_skin_blue.png | Bin .../textures/blocks/mushroom_skin_green.png | Bin .../textures/blocks/mushroom_skin_purple.png | Bin .../textures/blocks/mushroom_stem_blue.png | Bin .../textures/blocks/mushroom_stem_green.png | Bin .../textures/blocks/mushroom_stem_purple.png | Bin .../blocks/ndispenser_front_horizontal.png | Bin .../blocks/ndispenser_front_vertical.png | Bin .../blocks/ndropper_front_horizontal.png | Bin .../blocks/ndropper_front_vertical.png | Bin .../natura/textures/blocks/nfurnace_off.png | Bin .../natura/textures/blocks/nfurnace_on.png | Bin .../natura/textures/blocks/nfurnace_side.png | Bin .../natura/textures/blocks/nfurnace_top.png | Bin .../natura/textures/blocks/nhopper_inside.png | Bin .../textures/blocks/nhopper_outside.png | Bin .../natura/textures/blocks/nhopper_top.png | Bin .../assets/natura/textures/blocks/nlever.png | Bin .../natura/textures/blocks/oak_window.png | Bin .../assets/natura/textures/blocks/obelisk.png | Bin .../natura/textures/blocks/obelisk_active.png | Bin .../textures/blocks/pine_door_bottom.png | Bin .../natura/textures/blocks/pine_door_top.png | Bin .../natura/textures/blocks/pine_window.png | Bin .../natura/textures/blocks/piston_bottom.png | Bin .../natura/textures/blocks/piston_inner.png | Bin .../natura/textures/blocks/piston_side.png | Bin .../textures/blocks/piston_top_normal.png | Bin .../textures/blocks/piston_top_sticky.png | Bin .../textures/blocks/purpleheart_bark.png | Bin .../textures/blocks/purpleheart_bookshelf.png | Bin .../blocks/purpleheart_door_bottom.png | Bin .../textures/blocks/purpleheart_door_top.png | Bin .../textures/blocks/purpleheart_heart.png | Bin .../blocks/purpleheart_leaves_fancy.png | Bin .../blocks/purpleheart_leaves_fast.png | Bin .../textures/blocks/purpleheart_planks.png | Bin .../blocks/purpleheart_planks_dark.png | Bin .../blocks/purpleheart_planks_light.png | Bin .../textures/blocks/purpleheart_sapling.png | Bin .../textures/blocks/purpleheart_trapdoor.png | Bin .../textures/blocks/purpleheart_window.png | Bin .../blocks/purpleheart_workbench_face.png | Bin .../blocks/purpleheart_workbench_side.png | Bin .../blocks/purpleheart_workbench_top.png | Bin .../textures/blocks/raspberry_fancy.png | Bin .../natura/textures/blocks/raspberry_fast.png | Bin .../textures/blocks/raspberry_ripe_fancy.png | Bin .../textures/blocks/raspberry_ripe_fast.png | Bin .../natura/textures/blocks/redwood_bark.png | Bin .../textures/blocks/redwood_bookshelf.png | Bin .../textures/blocks/redwood_door_bottom.png | Bin .../textures/blocks/redwood_door_top.png | Bin .../natura/textures/blocks/redwood_heart.png | Bin .../natura/textures/blocks/redwood_ladder.png | Bin .../textures/blocks/redwood_leaves_fancy.png | Bin .../textures/blocks/redwood_leaves_fast.png | Bin .../natura/textures/blocks/redwood_planks.png | Bin .../natura/textures/blocks/redwood_root.png | Bin .../textures/blocks/redwood_sapling.png | Bin .../textures/blocks/redwood_trapdoor.png | Bin .../blocks/redwood_workbench_face.png | Bin .../blocks/redwood_workbench_side.png | Bin .../textures/blocks/redwood_workbench_top.png | Bin .../blocks/redwoodbark_door_bottom.png | Bin .../textures/blocks/redwoodbark_door_top.png | Bin .../natura/textures/blocks/saguaro_bottom.png | Bin .../natura/textures/blocks/saguaro_fruit.png | Bin .../natura/textures/blocks/saguaro_side.png | Bin .../natura/textures/blocks/saguaro_top.png | Bin .../natura/textures/blocks/sakura_bark.png | Bin .../textures/blocks/sakura_bookshelf.png | Bin .../textures/blocks/sakura_door_bottom.png | Bin .../textures/blocks/sakura_door_top.png | Bin .../natura/textures/blocks/sakura_heart.png | Bin .../natura/textures/blocks/sakura_ladder.png | Bin .../textures/blocks/sakura_leaves_fancy.png | Bin .../textures/blocks/sakura_leaves_fast.png | Bin .../natura/textures/blocks/sakura_planks.png | Bin .../natura/textures/blocks/sakura_sapling.png | Bin .../textures/blocks/sakura_trapdoor.png | Bin .../textures/blocks/sakura_workbench_face.png | Bin .../textures/blocks/sakura_workbench_side.png | Bin .../textures/blocks/sakura_workbench_top.png | Bin .../assets/natura/textures/blocks/silt_1.png | Bin .../assets/natura/textures/blocks/silt_2.png | Bin .../assets/natura/textures/blocks/silt_3.png | Bin .../assets/natura/textures/blocks/silt_4.png | Bin .../assets/natura/textures/blocks/silt_5.png | Bin .../assets/natura/textures/blocks/silt_6.png | Bin .../assets/natura/textures/blocks/silt_7.png | Bin .../assets/natura/textures/blocks/silt_8.png | Bin .../textures/blocks/silverbell_bark.png | Bin .../textures/blocks/silverbell_bookshelf.png | Bin .../blocks/silverbell_door_bottom.png | Bin .../textures/blocks/silverbell_door_top.png | Bin .../textures/blocks/silverbell_heart.png | Bin .../blocks/silverbell_leaves_fancy.png | Bin .../blocks/silverbell_leaves_fast.png | Bin .../textures/blocks/silverbell_planks.png | Bin .../textures/blocks/silverbell_sapling.png | Bin .../textures/blocks/silverbell_trapdoor.png | Bin .../textures/blocks/silverbell_window.png | Bin .../blocks/silverbell_workbench_face.png | Bin .../blocks/silverbell_workbench_side.png | Bin .../blocks/silverbell_workbench_top.png | Bin .../natura/textures/blocks/skyberry_fancy.png | Bin .../natura/textures/blocks/skyberry_fast.png | Bin .../textures/blocks/skyberry_ripe_fancy.png | Bin .../textures/blocks/skyberry_ripe_fast.png | Bin .../natura/textures/blocks/spruce_window.png | Bin .../textures/blocks/stingberry_fancy.png | Bin .../textures/blocks/stingberry_fast.png | Bin .../textures/blocks/stingberry_ripe_fancy.png | Bin .../textures/blocks/stingberry_ripe_fast.png | Bin .../textures/blocks/tainted_farmland_dry.png | Bin .../blocks/tainted_farmland_heated.png | Bin .../natura/textures/blocks/tainted_soil.png | Bin .../natura/textures/blocks/thornvine.png | Bin .../natura/textures/blocks/tiger_bark.png | Bin .../textures/blocks/tiger_bookshelf.png | Bin .../textures/blocks/tiger_door_bottom.png | Bin .../natura/textures/blocks/tiger_door_top.png | Bin .../natura/textures/blocks/tiger_heart.png | Bin .../textures/blocks/tiger_leaves_fancy.png | Bin .../textures/blocks/tiger_leaves_fast.png | Bin .../natura/textures/blocks/tiger_planks.png | Bin .../natura/textures/blocks/tiger_sapling.png | Bin .../natura/textures/blocks/tiger_trapdoor.png | Bin .../natura/textures/blocks/tiger_window.png | Bin .../textures/blocks/tiger_workbench_face.png | Bin .../textures/blocks/tiger_workbench_side.png | Bin .../textures/blocks/tiger_workbench_top.png | Bin .../natura/textures/blocks/willow_bark.png | Bin .../textures/blocks/willow_bookshelf.png | Bin .../textures/blocks/willow_door_bottom.png | Bin .../textures/blocks/willow_door_top.png | Bin .../natura/textures/blocks/willow_heart.png | Bin .../textures/blocks/willow_leaves_fancy.png | Bin .../textures/blocks/willow_leaves_fast.png | Bin .../natura/textures/blocks/willow_planks.png | Bin .../natura/textures/blocks/willow_sapling.png | Bin .../textures/blocks/willow_trapdoor.png | Bin .../natura/textures/blocks/willow_window.png | Bin .../textures/blocks/willow_workbench_face.png | Bin .../textures/blocks/willow_workbench_side.png | Bin .../textures/blocks/willow_workbench_top.png | Bin .../natura/textures/boats/mapleboat.png | Bin .../natura/textures/boats/purpleboat.png | Bin .../natura/textures/boats/silverboat.png | Bin .../natura/textures/boats/tigerboat.png | Bin .../natura/textures/boats/willowboat.png | Bin .../natura/textures/items/armor_imp_body.png | Bin .../natura/textures/items/armor_imp_boots.png | Bin .../textures/items/armor_imp_helmet.png | Bin .../textures/items/armor_imp_leggings.png | Bin .../natura/textures/items/barley_flour.png | Bin .../natura/textures/items/barley_plant.png | Bin .../natura/textures/items/barley_seeds.png | Bin .../natura/textures/items/berry_black.png | Bin .../natura/textures/items/berry_blight.png | Bin .../natura/textures/items/berry_blue.png | Bin .../natura/textures/items/berry_dusk.png | Bin .../natura/textures/items/berry_geo.png | Bin .../natura/textures/items/berry_medley.png | Bin .../natura/textures/items/berry_rasp.png | Bin .../natura/textures/items/berry_sky.png | Bin .../natura/textures/items/berry_sting.png | Bin .../natura/textures/items/birch_stick.png | Bin .../natura/textures/items/bloodwood_bow.png | Bin .../textures/items/bloodwood_bow_drawn_0.png | Bin .../textures/items/bloodwood_bow_drawn_1.png | Bin .../textures/items/bloodwood_bow_drawn_2.png | Bin .../natura/textures/items/bloodwood_bowl.png | Bin .../textures/items/bloodwood_door_item.png | Bin .../textures/items/bloodwood_hatchet.png | Bin .../natura/textures/items/bloodwood_kama.png | Bin .../textures/items/bloodwood_pickaxe.png | Bin .../textures/items/bloodwood_shovel.png | Bin .../natura/textures/items/bloodwood_stick.png | Bin .../natura/textures/items/bloodwood_sword.png | Bin .../natura/textures/items/cotton_plant.png | Bin .../natura/textures/items/cotton_seeds.png | Bin .../natura/textures/items/darkwood_bow.png | Bin .../textures/items/darkwood_bow_drawn_0.png | Bin .../textures/items/darkwood_bow_drawn_1.png | Bin .../textures/items/darkwood_bow_drawn_2.png | Bin .../natura/textures/items/darkwood_bowl.png | Bin .../textures/items/darkwood_hatchet.png | Bin .../natura/textures/items/darkwood_kama.png | Bin .../textures/items/darkwood_pickaxe.png | Bin .../natura/textures/items/darkwood_shovel.png | Bin .../natura/textures/items/darkwood_stick.png | Bin .../natura/textures/items/darkwood_sword.png | Bin .../assets/natura/textures/items/dye_blue.png | Bin .../textures/items/eucalyptus_door_item.png | Bin .../textures/items/eucalyptus_stick.png | Bin .../natura/textures/items/flamestring.png | Bin .../natura/textures/items/flint_and_blaze.png | Bin .../textures/items/fruit_potashapple.png | Bin .../natura/textures/items/fusewood_bow.png | Bin .../textures/items/fusewood_bow_drawn_0.png | Bin .../textures/items/fusewood_bow_drawn_1.png | Bin .../textures/items/fusewood_bow_drawn_2.png | Bin .../natura/textures/items/fusewood_bowl.png | Bin .../textures/items/fusewood_hatchet.png | Bin .../natura/textures/items/fusewood_kama.png | Bin .../textures/items/fusewood_pickaxe.png | Bin .../natura/textures/items/fusewood_shovel.png | Bin .../natura/textures/items/fusewood_stick.png | Bin .../natura/textures/items/fusewood_sword.png | Bin .../natura/textures/items/ghostwood_bow.png | Bin .../textures/items/ghostwood_bow_drawn_0.png | Bin .../textures/items/ghostwood_bow_drawn_1.png | Bin .../textures/items/ghostwood_bow_drawn_2.png | Bin .../natura/textures/items/ghostwood_bowl.png | Bin .../textures/items/ghostwood_door_item.png | Bin .../textures/items/ghostwood_fletching.png | Bin .../textures/items/ghostwood_hatchet.png | Bin .../natura/textures/items/ghostwood_kama.png | Bin .../textures/items/ghostwood_pickaxe.png | Bin .../textures/items/ghostwood_shovel.png | Bin .../natura/textures/items/ghostwood_stick.png | Bin .../natura/textures/items/ghostwood_sword.png | Bin .../textures/items/hopseed_door_item.png | Bin .../natura/textures/items/hopseed_stick.png | Bin .../natura/textures/items/impmeat_cooked.png | Bin .../natura/textures/items/impmeat_raw.png | Bin .../natura/textures/items/leather_imp.png | Bin .../natura/textures/items/maple_stick.png | Bin .../textures/items/netherquartz_hatchet.png | Bin .../textures/items/netherquartz_kama.png | Bin .../textures/items/netherquartz_pickaxe.png | Bin .../textures/items/netherquartz_shovel.png | Bin .../textures/items/netherquartz_sword.png | Bin .../assets/natura/textures/items/nhopper.png | Bin .../textures/items/purpleheart_stick.png | Bin .../textures/items/redwood_door_item.png | Bin .../natura/textures/items/redwood_stick.png | Bin .../textures/items/redwoodbark_door_item.png | Bin .../textures/items/saguaro_fruit_item.png | Bin .../natura/textures/items/saguaro_seeds.png | Bin .../textures/items/sakura_door_item.png | Bin .../natura/textures/items/sakura_stick.png | Bin .../natura/textures/items/seedbag_barley.png | Bin .../natura/textures/items/seedbag_blank.png | Bin .../natura/textures/items/seedbag_bone.png | Bin .../natura/textures/items/seedbag_carrot.png | Bin .../natura/textures/items/seedbag_cotton.png | Bin .../natura/textures/items/seedbag_melon.png | Bin .../textures/items/seedbag_netherwart.png | Bin .../natura/textures/items/seedbag_potato.png | Bin .../natura/textures/items/seedbag_pumpkin.png | Bin .../natura/textures/items/seedbag_wheat.png | Bin .../textures/items/silverbell_stick.png | Bin .../natura/textures/items/spruce_stick.png | Bin .../natura/textures/items/stew_glowshroom.png | Bin .../natura/textures/items/stew_mushroom.png | Bin .../assets/natura/textures/items/sulfur.png | Bin .../natura/textures/items/tiger_stick.png | Bin .../natura/textures/items/waterdrop.png | Bin .../natura/textures/items/wheat_flour.png | Bin .../natura/textures/items/willow_stick.png | Bin .../natura/textures/misc/bluegrasscolor.png | Bin .../natura/textures/misc/orangegrasscolor.png | Bin .../natura/textures/mob/creeperunstable.png | Bin .../natura/textures/mob/flamespider.png | Bin .../assets/natura/textures/mob/imp.png | Bin {resources => src/main/resources}/mcmod.info | 0 {resources => src/main/resources}/pack.mcmeta | 0 609 files changed, 1 insertion(+), 6888 deletions(-) delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaBlock.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaBlockDecorator.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaConfigHandler.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaDataAccessor.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaDataProvider.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaEntityAccessor.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaEntityProvider.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaFMPAccessor.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaFMPDecorator.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaFMPProvider.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaRegistrar.java delete mode 100644 src/api/java/mcp/mobius/waila/api/IWailaSummaryProvider.java delete mode 100644 src/api/java/mcp/mobius/waila/api/SpecialChars.java delete mode 100644 src/api/java/mcp/mobius/waila/api/package-info.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IMFRHammer.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInfo.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedstoneAlike.java delete mode 100644 src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java delete mode 100644 src/api/java/thaumcraft/api/IGoggles.java delete mode 100644 src/api/java/thaumcraft/api/IRepairable.java delete mode 100644 src/api/java/thaumcraft/api/IRepairableExtended.java delete mode 100644 src/api/java/thaumcraft/api/IRunicArmor.java delete mode 100644 src/api/java/thaumcraft/api/IScribeTools.java delete mode 100644 src/api/java/thaumcraft/api/IVisDiscountGear.java delete mode 100644 src/api/java/thaumcraft/api/ItemApi.java delete mode 100644 src/api/java/thaumcraft/api/ItemRunic.java delete mode 100644 src/api/java/thaumcraft/api/LICENSE delete mode 100644 src/api/java/thaumcraft/api/README.md delete mode 100644 src/api/java/thaumcraft/api/ThaumcraftApi.java delete mode 100644 src/api/java/thaumcraft/api/ThaumcraftApiHelper.java delete mode 100644 src/api/java/thaumcraft/api/TileThaumcraft.java delete mode 100644 src/api/java/thaumcraft/api/WorldCoordinates.java delete mode 100644 src/api/java/thaumcraft/api/aspects/Aspect.java delete mode 100644 src/api/java/thaumcraft/api/aspects/AspectList.java delete mode 100644 src/api/java/thaumcraft/api/aspects/AspectSourceHelper.java delete mode 100644 src/api/java/thaumcraft/api/aspects/IAspectContainer.java delete mode 100644 src/api/java/thaumcraft/api/aspects/IAspectSource.java delete mode 100644 src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java delete mode 100644 src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java delete mode 100644 src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java delete mode 100644 src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java delete mode 100644 src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java delete mode 100644 src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java delete mode 100644 src/api/java/thaumcraft/api/crafting/InfusionRecipe.java delete mode 100644 src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java delete mode 100644 src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java delete mode 100644 src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java delete mode 100644 src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java delete mode 100644 src/api/java/thaumcraft/api/entities/ITaintedMob.java delete mode 100644 src/api/java/thaumcraft/api/nodes/INode.java delete mode 100644 src/api/java/thaumcraft/api/nodes/IRevealer.java delete mode 100644 src/api/java/thaumcraft/api/nodes/NodeModifier.java delete mode 100644 src/api/java/thaumcraft/api/nodes/NodeType.java delete mode 100644 src/api/java/thaumcraft/api/potions/PotionFluxTaint.java delete mode 100644 src/api/java/thaumcraft/api/potions/PotionVisExhaust.java delete mode 100644 src/api/java/thaumcraft/api/research/IScanEventHandler.java delete mode 100644 src/api/java/thaumcraft/api/research/ResearchCategories.java delete mode 100644 src/api/java/thaumcraft/api/research/ResearchCategoryList.java delete mode 100644 src/api/java/thaumcraft/api/research/ResearchItem.java delete mode 100644 src/api/java/thaumcraft/api/research/ResearchPage.java delete mode 100644 src/api/java/thaumcraft/api/research/ScanResult.java delete mode 100644 src/api/java/thaumcraft/api/visnet/TileVisNode.java delete mode 100644 src/api/java/thaumcraft/api/visnet/VisNetHandler.java delete mode 100644 src/api/java/thaumcraft/api/wands/IWandFocus.java delete mode 100644 src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java delete mode 100644 src/api/java/thaumcraft/api/wands/IWandTriggerManager.java delete mode 100644 src/api/java/thaumcraft/api/wands/IWandable.java delete mode 100644 src/api/java/thaumcraft/api/wands/ItemFocusBasic.java delete mode 100644 src/api/java/thaumcraft/api/wands/StaffRod.java delete mode 100644 src/api/java/thaumcraft/api/wands/WandCap.java delete mode 100644 src/api/java/thaumcraft/api/wands/WandRod.java delete mode 100644 src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java rename {resources => src/main/resources}/assets/natura/lang/de_DE.lang (100%) rename {resources => src/main/resources}/assets/natura/lang/en_US.lang (100%) rename {resources => src/main/resources}/assets/natura/lang/it_IT.lang (100%) rename {resources => src/main/resources}/assets/natura/lang/ko_KR.lang (100%) rename {resources => src/main/resources}/assets/natura/lang/pl_PL.lang (100%) rename {resources => src/main/resources}/assets/natura/lang/ru_RU.lang (100%) rename {resources => src/main/resources}/assets/natura/lang/zh_CN.lang (100%) rename {resources => src/main/resources}/assets/natura/textures/armor/imp_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/armor/imp_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/air_sulfur.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_flowering_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_flowering_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_fruit_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_fruit_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_gold_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_leaves_gold_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/apple_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/barley_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/barley_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/barley_3.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/barley_4.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/birch_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/birch_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blackberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blackberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blackberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blackberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blightberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blightberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blightberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blightberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_heart_small.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_lower_left.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_lower_right.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_side_left.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_side_right.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_upper_left.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_upper_right.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/bloodwood_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blueberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blueberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blueberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/blueberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_activator.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_activator_powered.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_detector.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_detector_powered.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_golden.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_golden_powered.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_normal.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/brail_normal_turned.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cloud_dark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cloud_gray.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cloud_sulfur.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cloud_white.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_amber.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_magenta.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_red.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_silver.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_brick_yellow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_amber.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_magenta.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_red.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_silver.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corrupt_stone_yellow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_amber.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_amber.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_magenta.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_red.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_silver.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_side_yellow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_amber.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_magenta.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_red.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_silver.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_grass_top_yellow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_magenta.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_red.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_silver.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/corruptor_yellow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cotton_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cotton_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cotton_3.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cotton_4.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/cotton_5.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_flowering_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_flowering_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_fruit_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_fruit_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/darkwood_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/duskberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/duskberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/duskberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/duskberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/eucalyptus_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/flower_bluebells.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/fusewood_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/geoberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/geoberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/geoberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/geoberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ghostwood_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/glass_heat.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/glass_heat_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/glass_soul.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/glass_soul_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/glass_soulbak.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/grass_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/heatsand.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/hopseed_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/infernal_stone.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/maple_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_amber.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_inside_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_inside_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_inside_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_skin_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_skin_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_skin_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_stem_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_stem_green.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/mushroom_stem_purple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ndispenser_front_horizontal.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ndispenser_front_vertical.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ndropper_front_horizontal.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/ndropper_front_vertical.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nfurnace_off.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nfurnace_on.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nfurnace_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nfurnace_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nhopper_inside.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nhopper_outside.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nhopper_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/nlever.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/oak_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/obelisk.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/obelisk_active.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/pine_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/pine_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/pine_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/piston_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/piston_inner.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/piston_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/piston_top_normal.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/piston_top_sticky.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_planks_dark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_planks_light.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/purpleheart_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/raspberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/raspberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/raspberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/raspberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_root.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwood_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwoodbark_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/redwoodbark_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/saguaro_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/saguaro_fruit.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/saguaro_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/saguaro_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_ladder.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/sakura_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_3.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_4.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_5.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_6.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_7.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silt_8.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/silverbell_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/skyberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/skyberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/skyberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/skyberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/spruce_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/stingberry_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/stingberry_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/stingberry_ripe_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/stingberry_ripe_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tainted_farmland_dry.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tainted_farmland_heated.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tainted_soil.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/thornvine.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/tiger_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_bark.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_bookshelf.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_door_bottom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_door_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_heart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_leaves_fancy.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_leaves_fast.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_planks.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_sapling.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_trapdoor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_window.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_workbench_face.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_workbench_side.png (100%) rename {resources => src/main/resources}/assets/natura/textures/blocks/willow_workbench_top.png (100%) rename {resources => src/main/resources}/assets/natura/textures/boats/mapleboat.png (100%) rename {resources => src/main/resources}/assets/natura/textures/boats/purpleboat.png (100%) rename {resources => src/main/resources}/assets/natura/textures/boats/silverboat.png (100%) rename {resources => src/main/resources}/assets/natura/textures/boats/tigerboat.png (100%) rename {resources => src/main/resources}/assets/natura/textures/boats/willowboat.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/armor_imp_body.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/armor_imp_boots.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/armor_imp_helmet.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/armor_imp_leggings.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/barley_flour.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/barley_plant.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/barley_seeds.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_black.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_blight.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_dusk.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_geo.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_medley.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_rasp.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_sky.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/berry_sting.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/birch_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_bow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_bow_drawn_0.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_bow_drawn_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_bow_drawn_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_bowl.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_hatchet.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_kama.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_pickaxe.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_shovel.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/bloodwood_sword.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/cotton_plant.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/cotton_seeds.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_bow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_bow_drawn_0.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_bow_drawn_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_bow_drawn_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_bowl.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_hatchet.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_kama.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_pickaxe.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_shovel.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/darkwood_sword.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/dye_blue.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/eucalyptus_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/eucalyptus_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/flamestring.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/flint_and_blaze.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fruit_potashapple.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_bow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_bow_drawn_0.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_bow_drawn_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_bow_drawn_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_bowl.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_hatchet.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_kama.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_pickaxe.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_shovel.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/fusewood_sword.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_bow.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_bow_drawn_0.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_bow_drawn_1.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_bow_drawn_2.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_bowl.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_fletching.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_hatchet.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_kama.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_pickaxe.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_shovel.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/ghostwood_sword.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/hopseed_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/hopseed_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/impmeat_cooked.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/impmeat_raw.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/leather_imp.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/maple_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/netherquartz_hatchet.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/netherquartz_kama.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/netherquartz_pickaxe.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/netherquartz_shovel.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/netherquartz_sword.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/nhopper.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/purpleheart_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/redwood_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/redwood_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/redwoodbark_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/saguaro_fruit_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/saguaro_seeds.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/sakura_door_item.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/sakura_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_barley.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_blank.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_bone.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_carrot.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_cotton.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_melon.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_netherwart.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_potato.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_pumpkin.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/seedbag_wheat.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/silverbell_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/spruce_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/stew_glowshroom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/stew_mushroom.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/sulfur.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/tiger_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/waterdrop.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/wheat_flour.png (100%) rename {resources => src/main/resources}/assets/natura/textures/items/willow_stick.png (100%) rename {resources => src/main/resources}/assets/natura/textures/misc/bluegrasscolor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/misc/orangegrasscolor.png (100%) rename {resources => src/main/resources}/assets/natura/textures/mob/creeperunstable.png (100%) rename {resources => src/main/resources}/assets/natura/textures/mob/flamespider.png (100%) rename {resources => src/main/resources}/assets/natura/textures/mob/imp.png (100%) rename {resources => src/main/resources}/mcmod.info (100%) rename {resources => src/main/resources}/pack.mcmeta (100%) diff --git a/src/api/java/mcp/mobius/waila/api/IWailaBlock.java b/src/api/java/mcp/mobius/waila/api/IWailaBlock.java deleted file mode 100644 index 8b4dd131..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaBlock.java +++ /dev/null @@ -1,34 +0,0 @@ -package mcp.mobius.waila.api; - -import java.util.List; - -import net.minecraft.item.ItemStack; - -@Deprecated -public interface IWailaBlock { - /* - * Use this method to return an item stack in case the default lookup system fails. - * Return null if you want to use the default lookup system. - * You get the world, the player and the location of the block. With that, it is easy to gather information & tile entities - */ - ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config); - - /* Waila HUD is divided into 3 zones. The head corresponds to the item name, - * body to where you mostly want to put informations, and I reserve the tail for modname display - */ - - /* Those 2 methods works exactly the same way, except they are related to a different zone in Waila HUD. - * You get in input world, player and the block location. You also get the itemstack as returned by the default lookup system or getWailaStack(). - * ConfigHandler provides the current Waila config state so you can show/hide elements depending on the configuration. Refer the ConfigHandler class for more info. - * currenttip represents the current list of text lines in the tooltip zone. - * For example, getWailaHead() will have the current item name as currenttip. - * You can modify the tips, add more, remove some, etc. - * When you are done, just returns the currenttip and it will display in Waila. - * - * Always return the currenttip is you don't want to modify the current zone. - */ - - List getWailaHead(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config); - List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config); - List getWailaTail(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaBlockDecorator.java b/src/api/java/mcp/mobius/waila/api/IWailaBlockDecorator.java deleted file mode 100644 index 935d475f..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaBlockDecorator.java +++ /dev/null @@ -1,9 +0,0 @@ -package mcp.mobius.waila.api; - -import net.minecraft.item.ItemStack; - -public interface IWailaBlockDecorator { - - void decorateBlock(ItemStack itemStack, IWailaDataAccessor accessor, IWailaConfigHandler config); - -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaConfigHandler.java b/src/api/java/mcp/mobius/waila/api/IWailaConfigHandler.java deleted file mode 100644 index faede63f..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaConfigHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package mcp.mobius.waila.api; - -import java.util.HashMap; -import java.util.Set; - -public interface IWailaConfigHandler { - /* Returns a set of all the currently loaded modules in the config handler */ - public Set getModuleNames(); - - /* Returns all the currently available options for a given module */ - public HashMap getConfigKeys(String modName); - - /* Add a new option to a given module - * - * modName is the name of the module to add the option to (ie : Buildcraft, IndustrialCraft2, etc) - * key is the config key (ie : bc.tankcontent, ic2.inputvalue) - * name is the human readable name of the option (ie : "Tank content", "Max EU Input") - * */ - //public void addConfig(String modName, String key, String name); - - /* Returns the current value of an option (true/false) with a default value defvalue if not set*/ - public boolean getConfig(String key, boolean defvalue); - - /* Returns the current value of an option (true/false) with a default value true if not set*/ - public boolean getConfig(String key); - - //public void setConfig(String key, boolean value); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaDataAccessor.java b/src/api/java/mcp/mobius/waila/api/IWailaDataAccessor.java deleted file mode 100644 index 02886248..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaDataAccessor.java +++ /dev/null @@ -1,33 +0,0 @@ -package mcp.mobius.waila.api; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -/* The Accessor is used to get some basic data out of the game without having to request - * direct access to the game engine. - * It will also return things that are unmodified by the overriding systems (like getWailaStack). - */ - -public interface IWailaDataAccessor { - - World getWorld(); - EntityPlayer getPlayer(); - Block getBlock(); - int getBlockID(); - int getMetadata(); - TileEntity getTileEntity(); - MovingObjectPosition getPosition(); - Vec3 getRenderingPosition(); - NBTTagCompound getNBTData(); - int getNBTInteger(NBTTagCompound tag, String keyname); - double getPartialFrame(); - ForgeDirection getSide(); - ItemStack getStack(); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaDataProvider.java b/src/api/java/mcp/mobius/waila/api/IWailaDataProvider.java deleted file mode 100644 index 4859d9cd..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaDataProvider.java +++ /dev/null @@ -1,33 +0,0 @@ -package mcp.mobius.waila.api; - -import java.util.List; - -import net.minecraft.item.ItemStack; - -public interface IWailaDataProvider{ - /* - * Use this method to return an item stack in case the default lookup system fails. - * Return null if you want to use the default lookup system. - * You get the world, the player and the location of the block. With that, it is easy to gather information & tile entities - */ - ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config); - - /* Waila HUD is divided into 3 zones. The head corresponds to the item name, - * body to where you mostly want to put informations, and I reserve the tail for modname display - */ - - /* Those 2 methods works exactly the same way, except they are related to a different zone in Waila HUD. - * You get in input world, player and the block location. You also get the itemstack as returned by the default lookup system or getWailaStack(). - * ConfigHandler provides the current Waila config state so you can show/hide elements depending on the configuration. Refer the ConfigHandler class for more info. - * currenttip represents the current list of text lines in the tooltip zone. - * For example, getWailaHead() will have the current item name as currenttip. - * You can modify the tips, add more, remove some, etc. - * When you are done, just returns the currenttip and it will display in Waila. - * - * Always return the currenttip is you don't want to modify the current zone. - */ - - List getWailaHead(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config); - List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config); - List getWailaTail(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaEntityAccessor.java b/src/api/java/mcp/mobius/waila/api/IWailaEntityAccessor.java deleted file mode 100644 index 788067af..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaEntityAccessor.java +++ /dev/null @@ -1,24 +0,0 @@ -package mcp.mobius.waila.api; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -/* The Accessor is used to get some basic data out of the game without having to request - * direct access to the game engine. - * It will also return things that are unmodified by the overriding systems (like getWailaStack). - */ - -public interface IWailaEntityAccessor { - World getWorld(); - EntityPlayer getPlayer(); - Entity getEntity(); - MovingObjectPosition getPosition(); - Vec3 getRenderingPosition(); - NBTTagCompound getNBTData(); - int getNBTInteger(NBTTagCompound tag, String keyname); - double getPartialFrame(); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaEntityProvider.java b/src/api/java/mcp/mobius/waila/api/IWailaEntityProvider.java deleted file mode 100644 index 9548289a..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaEntityProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -package mcp.mobius.waila.api; - -import java.util.List; - -import net.minecraft.entity.Entity; - -public interface IWailaEntityProvider { - - /* A way to get an override on the entity returned by the raytracing */ - Entity getWailaOverride(IWailaEntityAccessor accessor, IWailaConfigHandler config); - - /* The classical HEAD/BODY/TAIL text getters */ - List getWailaHead(Entity entity, List currenttip, IWailaEntityAccessor accessor, IWailaConfigHandler config); - List getWailaBody(Entity entity, List currenttip, IWailaEntityAccessor accessor, IWailaConfigHandler config); - List getWailaTail(Entity entity, List currenttip, IWailaEntityAccessor accessor, IWailaConfigHandler config); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaFMPAccessor.java b/src/api/java/mcp/mobius/waila/api/IWailaFMPAccessor.java deleted file mode 100644 index be44b7ba..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaFMPAccessor.java +++ /dev/null @@ -1,26 +0,0 @@ -package mcp.mobius.waila.api; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -/* The Accessor is used to get some basic data out of the game without having to request - * direct access to the game engine. - * It will also return things that are unmodified by the overriding systems (like getWailaStack). - */ - -public interface IWailaFMPAccessor { - World getWorld(); - EntityPlayer getPlayer(); - TileEntity getTileEntity(); - MovingObjectPosition getPosition(); - NBTTagCompound getNBTData(); - NBTTagCompound getFullNBTData(); - int getNBTInteger(NBTTagCompound tag, String keyname); - double getPartialFrame(); - Vec3 getRenderingPosition(); - String getID(); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaFMPDecorator.java b/src/api/java/mcp/mobius/waila/api/IWailaFMPDecorator.java deleted file mode 100644 index 839af31f..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaFMPDecorator.java +++ /dev/null @@ -1,7 +0,0 @@ -package mcp.mobius.waila.api; - -import net.minecraft.item.ItemStack; - -public interface IWailaFMPDecorator { - void decorateBlock(ItemStack itemStack, IWailaFMPAccessor accessor, IWailaConfigHandler config); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaFMPProvider.java b/src/api/java/mcp/mobius/waila/api/IWailaFMPProvider.java deleted file mode 100644 index 232c83ef..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaFMPProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package mcp.mobius.waila.api; - -import java.util.List; - -import net.minecraft.item.ItemStack; - -public interface IWailaFMPProvider { - /* The classical HEAD/BODY/TAIL text getters */ - List getWailaHead(ItemStack itemStack, List currenttip, IWailaFMPAccessor accessor, IWailaConfigHandler config); - List getWailaBody(ItemStack itemStack, List currenttip, IWailaFMPAccessor accessor, IWailaConfigHandler config); - List getWailaTail(ItemStack itemStack, List currenttip, IWailaFMPAccessor accessor, IWailaConfigHandler config); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaRegistrar.java b/src/api/java/mcp/mobius/waila/api/IWailaRegistrar.java deleted file mode 100644 index 162aeb63..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaRegistrar.java +++ /dev/null @@ -1,44 +0,0 @@ -package mcp.mobius.waila.api; - -public interface IWailaRegistrar { - /* Add a config option in the section modname with displayed text configtext and access key keyname */ - public void addConfig(String modname, String keyname, String configtext); - public void addConfigRemote(String modname, String keyname, String configtext); - public void addConfig(String modname, String keyname); - public void addConfigRemote(String modname, String keyname); - - /* Register a stack overrider for the given blockID */ - public void registerStackProvider(IWailaDataProvider dataProvider, Class block); - - /* Same thing, but works on a class hierarchy instead */ - public void registerHeadProvider (IWailaDataProvider dataProvider, Class block); - public void registerBodyProvider (IWailaDataProvider dataProvider, Class block); - public void registerTailProvider (IWailaDataProvider dataProvider, Class block); - - /* Entity text registration methods */ - public void registerHeadProvider (IWailaEntityProvider dataProvider, Class entity); - public void registerBodyProvider (IWailaEntityProvider dataProvider, Class entity); - public void registerTailProvider (IWailaEntityProvider dataProvider, Class entity); - public void registerOverrideEntityProvider (IWailaEntityProvider dataProvider, Class entity); - - /* FMP Providers */ - public void registerHeadProvider(IWailaFMPProvider dataProvider, String name); - public void registerBodyProvider(IWailaFMPProvider dataProvider, String name); - public void registerTailProvider(IWailaFMPProvider dataProvider, String name); - - /* The block decorators */ - public void registerDecorator (IWailaBlockDecorator decorator, Class block); - public void registerDecorator (IWailaFMPDecorator decorator, String name); - - /* Selective NBT key syncing. Will register a key to sync over the network for the given class (block, te or ent). - * Accept * as a ending wildcard - * registerNBTKey("bob.*", MyBlock.class) - * registerNBTKey("data.life", MyEntity.class) - * registerNBTKey("*", MyTileEntity.class) will reproduce the full tag syncing from 1.4.5 - * */ - public void registerSyncedNBTKey(String key, Class target); - - /* UNUSED FOR NOW (Will be used for the ingame wiki */ - public void registerDocTextFile (String filename); - public void registerShortDataProvider (IWailaSummaryProvider dataProvider, Class item); -} diff --git a/src/api/java/mcp/mobius/waila/api/IWailaSummaryProvider.java b/src/api/java/mcp/mobius/waila/api/IWailaSummaryProvider.java deleted file mode 100644 index f7906498..00000000 --- a/src/api/java/mcp/mobius/waila/api/IWailaSummaryProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package mcp.mobius.waila.api; - -import java.util.LinkedHashMap; - -import net.minecraft.item.ItemStack; - -public interface IWailaSummaryProvider { - /* This interface is used to control the display data in the description screen */ - - /* BASIC TOOLS & ITEMS DATA */ - //EnumToolMaterial getMaterial(ItemStack stack); - //String getMaterialName(ItemStack stack); - //String getEffectiveBlock(ItemStack stack); - //int getHarvestLevel(ItemStack stack); - //float getEfficiencyOnProperMaterial(ItemStack stack); - //int getEnchantability(ItemStack stack); - //int getDamageVsEntity(ItemStack stack); - //int getDurability(ItemStack stack); - - LinkedHashMap getSummary(ItemStack stack, LinkedHashMap currentSummary, IWailaConfigHandler config); -} diff --git a/src/api/java/mcp/mobius/waila/api/SpecialChars.java b/src/api/java/mcp/mobius/waila/api/SpecialChars.java deleted file mode 100644 index 5bd92a82..00000000 --- a/src/api/java/mcp/mobius/waila/api/SpecialChars.java +++ /dev/null @@ -1,40 +0,0 @@ -package mcp.mobius.waila.api; - -public class SpecialChars { - - public static String MCStyle = "\u00A7"; - - public static String BLACK = MCStyle + "0"; - public static String DBLUE = MCStyle + "1"; - public static String DGREEN = MCStyle + "2"; - public static String DAQUA = MCStyle + "3"; - public static String DRED = MCStyle + "4"; - public static String DPURPLE = MCStyle + "5"; - public static String GOLD = MCStyle + "6"; - public static String GRAY = MCStyle + "7"; - public static String DGRAY = MCStyle + "8"; - public static String BLUE = MCStyle + "9"; - public static String GREEN = MCStyle + "a"; - public static String AQUA = MCStyle + "b"; - public static String RED = MCStyle + "c"; - public static String LPURPLE = MCStyle + "d"; - public static String YELLOW = MCStyle + "e"; - public static String WHITE = MCStyle + "f"; - - public static String OBF = MCStyle + "k"; - public static String BOLD = MCStyle + "l"; - public static String STRIKE = MCStyle + "m"; - public static String UNDER = MCStyle + "n"; - public static String ITALIC = MCStyle + "o"; - public static String RESET = MCStyle + "r"; - - public static String WailaStyle = "\u00A4"; - public static String WailaIcon = "\u00A5"; - public static String TAB = WailaStyle + WailaStyle +"a"; - public static String ALIGNRIGHT = WailaStyle + WailaStyle +"b"; - public static String ALIGNCENTER = WailaStyle + WailaStyle +"c"; - public static String HEART = WailaStyle + WailaIcon +"a"; - public static String HHEART = WailaStyle + WailaIcon +"b"; - public static String EHEART = WailaStyle + WailaIcon +"c"; - -} diff --git a/src/api/java/mcp/mobius/waila/api/package-info.java b/src/api/java/mcp/mobius/waila/api/package-info.java deleted file mode 100644 index 981b27bd..00000000 --- a/src/api/java/mcp/mobius/waila/api/package-info.java +++ /dev/null @@ -1,3 +0,0 @@ -@API(apiVersion="1.0",owner="Waila",provides="WailaAPI") -package mcp.mobius.waila.api; -import cpw.mods.fml.common.API; diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java b/src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java deleted file mode 100644 index 8eff88d4..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/FactoryRegistry.java +++ /dev/null @@ -1,113 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.event.FMLInterModComms; -import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; - -/** - * @author PowerCrystals - * - * Class used to register plants and other farming-related things with MFR. Will do nothing if MFR does not exist. - * - */ -public class FactoryRegistry -{ - /* - * This may be called at any time during pre-init, init or post-init, assuming all blocks and items - * that are being accessed from the registry have been appropriately registered. - * Possible messages: - * - * // Registration: - * addLaserPreferredOre | NBTTag with an ItemStack saved on it, with the color on the "value" attribute, - * | A ValuedItem with item and value set. - * registerAutoSpawnerBlacklist | The String identifier of an entity, - * | A subclass of EntityLivingBase. - * registerFertilizable | An instance of IFactoryFertilizable. - * registerFertilizer | An instance of IFactoryFertilizer. - * registerFruitLog | The String identifier of a block. - * registerGrindable | An instance of IFactoryGrindable. - * registerGrinderBlacklist | A subclass of EntityLivingBase. - * registerHarvestable | An instance of IFactoryHarvestable. - * registerLaserOre | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute, - * | A ValuedItem with item and value set. - * registerLiquidDrinkHandler | A ValuedItem with key and object set; ILiquidDrinkHandler expected. - * registerMobEggHandler | An instance of IMobEggHandler. - * registerPickableFruit | An instance of IFactoryFruit. - * registerPlantable | An instance of IFactoryPlantable. - * registerRanchable | An instance of IFactoryRanchable. - * registerRedNetLogicCircuit | An instance of IRedNetLogicCircuit. - * registerRubberTreeBiome | The biomeName field of a biome to white list for rubber trees to spawn in. - * registerSafariNetBlacklist | A subclass of EntityLivingBase. - * registerSafariNetHandler | An instance of ISafariNetHandler. - * registerSludgeDrop | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute, - * | A ValuedItem with item and value set. - * registerSpawnHandler | An instance of IMobSpawnHandler. - * registerVillagerTradeMob | An instance of IRandomMobProvider. - * - * // Simple implementations: - * { Harvestables - * registerHarvestable_Standard | The String identifier of a block. - * registerHarvestable_Log | The String identifier of a block. - * registerHarvestable_Leaves | The String identifier of a block. - * registerHarvestable_Vine | The String identifier of a block. - * registerHarvestable_Shrub | The String identifier of a block. - * registerHarvestable_Mushroom | The String identifier of a block. - * registerHarvestable_Crop | An ItemStack of a block, with a damage value indicating the meta value to harvest at. - * | A ValuedItem with value and object set; Block expected. - * registerHarvestable_Gourd | An NBTTag with the stem and fruit attributes, both String identifiers of blocks. - * } - * { Plantables - * registerPlantable_Standard | An NBTTag with the seed (Item, String identifier), and - * crop (Block, String identifier) attributes set, optionally - * also having the meta (Integer, placed metadata value) attribute set. - * No special checks for location, just sustainability. - * registerPlantable_Crop | An NBTTag with the seed (Item, String identifier), and - * crop (Block, String identifier) attributes set, optionally - * also having the meta (Integer, placed metadata value) attribute set. - * Will automatically hoe dirt and grass into farmland when planting. - * registerPlantable_Sapling | An NBTTag with the sapling (Block, String identifier), and optionally - * the seed (Item, String identifier) attributes set. - * } - * { Fertilizer - * registerFertilizer | An NBTTag with the fert (Item, String identifier), meta (Integer), and - * type (Integer, index into FertilizerType.values()) attributes set. - * } - * { Fertilizables - * registerFertilizable_Grass | The String identifier of a block. Will bonemeal the block and expect - * tall grass be planted above and around it, must be IGrowable. Works with - * the GrowPlant and Grass type fertilizers, not recommended for crop plants. - * registerFertilizable_Gourd | The String identifier of a block. Must be IGrowable, and expects identical - * behavior to vanilla stems. Works with the GrowPlant fertilizers. - * registerFertilizable_Crop | An NBTTag with the plant (Block, String identifier, IGrowable), and - * meta (Integer, max growth phase) attributes set, optionally also having - * the type (Integer, index into FertilizerType) attribute set. - * registerFertilizable_Cocoa | An NBTTag with the plant (Block, String identifier), and optionally also - * the type (Integer, index into FertilizerType) attributes set. - * Expects metadata of the block to exactly match cocoa pods. - * registerFertilizable_Standard | An NBTTag with the plant (Block, String identifier, IGrowable), and - * optionally also the type (Integer, index into FertilizerType) attributes set. - * Expects the block to change when successfully grown (e.g., saplings). - * } - */ - public static void sendMessage(String message, Object value) - { - if (!Loader.isModLoaded("MineFactoryReloaded") || - Loader.instance().activeModContainer() == null) - return; - try - { - Method m = FMLInterModComms.class.getDeclaredMethod("enqueueMessage", Object.class, String.class, IMCMessage.class); - m.setAccessible(true); - Constructor c = IMCMessage.class.getDeclaredConstructor(String.class, Object.class); - c.setAccessible(true); - m.invoke(null, Loader.instance().activeModContainer(), "MineFactoryReloaded", c.newInstance(message, value)); - } - catch(Exception e) - { - e.printStackTrace(); - } - } -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java b/src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java deleted file mode 100644 index 63ae32e6..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/FertilizerType.java +++ /dev/null @@ -1,27 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -/** - * @author PowerCrystals - * - * Determines what kind of action a given fertilizer can perform. Your IFactoryFertilizable instances should check this before - * performing any action to maintain future compatibility. - */ -public enum FertilizerType -{ - /** - * The fertilizer will fertilize nothing. - */ - None, - /** - * The fertilizer will fertilize grass. - */ - Grass, - /** - * The fertilizer will grow a plant. - */ - GrowPlant, - /** - * The fertilizer will grow magical crops. - */ - GrowMagicalCrop, -} \ No newline at end of file diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java b/src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java deleted file mode 100644 index a56208ee..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/HarvestType.java +++ /dev/null @@ -1,44 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -/** - * @author PowerCrystals - * - * Determines what algorithm the Harvester uses when it encounters this IFactoryHarvestable in the world. - */ -public enum HarvestType -{ - /** - * Just break the single block - no special action needed. e.g. Carrots, flowers, wheat. - */ - Normal, - /** - * Search for harvestable blocks adjacent to this block but leave this block. e.g. Pumpkin, melon - */ - Gourd, - /** - * Search for identical blocks above. - */ - Column, - /** - * Search for identical blocks above but leave the bottom one for the future. e.g. Cactus, sugarcane. - */ - LeaveBottom, - /** - * This block is the base of a tree and the harvester should enter tree-cutting mode. - */ - Tree, - /** - * This block is the base of the tree and the harvester should enter tree-cutting mode. - * The tree is searched for in the negative y axis instead. - */ - TreeFlipped, - /** - * This block is part of a tree as above. - */ - TreeLeaf, - /** - * This block is part of a tree as above, but fruits are cut before logs. e.g. cocoa - * The tree is not searched for. - */ - TreeFruit -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java b/src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java deleted file mode 100644 index ac718c2b..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IDeepStorageUnit.java +++ /dev/null @@ -1,29 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.item.ItemStack; - -public interface IDeepStorageUnit -{ - /** - * @return A populated ItemStack with stackSize for the full amount of materials in the DSU. - * May have a stackSize > getMaxStackSize(). May have a stackSize of 0 (indicating locked contents). - */ - ItemStack getStoredItemType(); - - /** - * Sets the total amount of the item currently being stored, or zero if all items are to be removed. - */ - void setStoredItemCount(int amount); - - /** - * Sets the type of the stored item and initializes the number of stored items to amount. - * Will overwrite any existing stored items. - */ - void setStoredItemType(ItemStack type, int amount); - - /** - * @return The maximum number of items the DSU can hold. - * May change based on the current type stored. - */ - int getMaxStoredCount(); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java deleted file mode 100644 index a690df51..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizable.java +++ /dev/null @@ -1,41 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.world.World; - -/** - * @author PowerCrystals - * - * Defines a fertilizable block, and the process to fertilize it. You can assume that you will never have to check that block ID matches the one returned by - * getFertilizableBlockId(). - */ -public interface IFactoryFertilizable -{ - /** - * @return The block this instance is managing. - */ - public Block getPlant(); - - /** - * @param world The world this block belongs to. - * @param x The X coordinate of this block. - * @param y The Y coordinate of this block. - * @param z The Z coordinate of this block. - * @param fertilizerType The kind of fertilizer being used. - * @return True if the block at (x,y,z) can be fertilized with the given type of fertilizer. - */ - public boolean canFertilize(World world, int x, int y, int z, FertilizerType fertilizerType); - - /** - * @param world The world this block belongs to. - * @param rand A Random instance to use when fertilizing, if necessary. - * @param x The X coordinate of this block. - * @param y The Y coordinate of this block. - * @param z The Z coordinate of this block. - * @param fertilizerType The kind of fertilizer being used. - * @return True if fertilization was successful. If false, the Fertilizer will not consume a fertilizer item and will not drain power. - */ - public boolean fertilize(World world, Random rand, int x, int y, int z, FertilizerType fertilizerType); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java deleted file mode 100644 index f230ccc4..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFertilizer.java +++ /dev/null @@ -1,29 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -/** - * @author PowerCrystals - * - * Defines a fertilizer item for use in the Fertilizer. - */ -public interface IFactoryFertilizer -{ - /** - * @return The ID of this fertilizer item. - */ - Item getFertilizer(); - - /** - * @return The type of fertilizer this is. - */ - FertilizerType getFertilizerType(ItemStack stack); - - /** - * Called when a fertilization is successful. If you set the ItemStack size to 0, it will be deleted by the fertilizer. - * - * @param fertilizer The ItemStack used to fertilize. - */ - void consume(ItemStack fertilizer); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java deleted file mode 100644 index 44c0d4bb..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryFruit.java +++ /dev/null @@ -1,75 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * Defines a fruit entry for the Fruit Picker. - * - * @author powercrystals - * - */ -public interface IFactoryFruit -{ - /** - * @return The block this fruit has in the world. - */ - public Block getPlant(); - - /** - * Used to determine if this fruit can be picked (is it ripe yet, etc) - * @param world The world where the fruit is being picked - * @param x The x-coordinate of the fruit - * @param y The y-coordinate of the fruit - * @param z The z-coordinate of the fruit - * @return True if the fruit can be picked - */ - public boolean canBePicked(World world, int x, int y, int z); - - /** - * @return Whether or not the Fruit Picker should break the block when harvesting. If false, no changes will be performed by the Fruit Picker itself. - */ - public boolean breakBlock(); - - /** - * Called by the Fruit Picker to determine what block to replace the picked block with. Only ID and meta/damage will be used. - * At the time this method is called, the fruit still exists. Do not pass an item ID as the return value. - * @param world The world where the fruit is being picked - * @param x The x-coordinate of the fruit - * @param y The y-coordinate of the fruit - * @param z The z-coordinate of the fruit - * @return The block to replace the fruit block with, or null for air. - */ - public ReplacementBlock getReplacementBlock(World world, int x, int y, int z); - - /** - * Called by the Fruit Picker before the fruit is picked. - * @param world The world where the fruit is being picked - * @param x The x-coordinate of the fruit - * @param y The y-coordinate of the fruit - * @param z The z-coordinate of the fruit - */ - public void prePick(World world, int x, int y, int z); - - /** - * Called by the Fruit Picker to determine what drops to generate. At the time this method is called, the fruit still exists. - * @param world The world where the fruit is being picked - * @param x The x-coordinate of the fruit - * @param y The y-coordinate of the fruit - * @param z The z-coordinate of the fruit - */ - public List getDrops(World world, Random rand, int x, int y, int z); - - /** - * Called by the Fruit Picker after the fruit is picked. - * @param world The world where the fruit is being picked - * @param x The x-coordinate of the fruit - * @param y The y-coordinate of the fruit - * @param z The z-coordinate of the fruit - */ - public void postPick(World world, int x, int y, int z); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java deleted file mode 100644 index edfb8c99..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryGrindable.java +++ /dev/null @@ -1,35 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.world.World; - -/** - * @author PowerCrystals - * - * Defines a grindable entity for the Grinder. - */ -public interface IFactoryGrindable -{ - /** - * @return The class that this grindable instance is handling. This must be a subtype of EntityLivingBase or the entity will never - * be noticed by the Grinder. - */ - public Class getGrindableEntity(); - - /** - * @param world The world this entity is in. - * @param entity The entity instance being ground. - * @param random A Random instance. - * @return The drops generated when this entity is killed. - */ - public List grind(World world, EntityLivingBase entity, Random random); - - /** - * @param entity The entity instance being ground. - * @return Whether this entity has been fully processed or not. - */ - public boolean processEntity(EntityLivingBase entity); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java deleted file mode 100644 index d4e620a8..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryHarvestable.java +++ /dev/null @@ -1,71 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import java.util.List; -import java.util.Map; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * @author PowerCrystals - * - * Defines a harvestable block for the Harvester. - */ -public interface IFactoryHarvestable -{ - /** - * @return The block this harvestable instance is managing. - */ - public Block getPlant(); - - /** - * @return The type of harvest the Harvester should perform on this block. - */ - public HarvestType getHarvestType(); - - /** - * @return Whether or not the Harvester should break the block when harvesting. If false, no changes will be performed by the Harvester itself. - */ - public boolean breakBlock(); - - /** - * @param world The world this block is in. - * @param harvesterSettings The harvester's current settings. Do not modify these. - * @param x The X coordinate of the block being harvested. - * @param y The Y coordinate of the block being harvested. - * @param z The Z coordinate of the block being harvested. - * @return True if this block can be harvested. - */ - public boolean canBeHarvested(World world, Map harvesterSettings, int x, int y, int z); - - /** - * @param world The world this block is in. - * @param rand A Random instance to use when generating drops. - * @param harvesterSettings The harvester's current settings. Do not modify these. - * @param x The X coordinate of the block being harvested. - * @param y The Y coordinate of the block being harvested. - * @param z The Z coordinate of the block being harvested. - * @return The drops generated by breaking this block. For a default implementation, calling Block.getBlockDropped() is usually sufficient. - */ - public List getDrops(World world, Random rand, Map harvesterSettings, int x, int y, int z); - - /** - * Called before the block is going to be harvested. Usually empty. - * @param world The world this block is in. - * @param x The X coordinate of the block being harvested. - * @param y The Y coordinate of the block being harvested. - * @param z The Z coordinate of the block being harvested. - */ - public void preHarvest(World world, int x, int y, int z); - - /** - * Called after the block is going to be harvested. Used to re-till soil, for example. - * @param world The world this block is in. - * @param x The X coordinate of the block being harvested. - * @param y The Y coordinate of the block being harvested. - * @param z The Z coordinate of the block being harvested. - */ - public void postHarvest(World world, int x, int y, int z); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java deleted file mode 100644 index 26ded7ab..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryLaserTarget.java +++ /dev/null @@ -1,25 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraftforge.common.util.ForgeDirection; - -/** - * @author skyboy - * - * Defines a target for the Laser Drill Precharger - */ -public interface IFactoryLaserTarget -{ - /** - * @param from The direction the laser is coming from - * @return true if the precharger can form a beam from this side - */ - public boolean canFormBeamWith(ForgeDirection from); - - /** - * @param from The direction the energy is coming from - * @param energy The amount of energy being transferred - * @param simulate true if this transaction will only be simulated - * @return The amount of energy not consumed - */ - public int addEnergy(ForgeDirection from, int energy, boolean simulate); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java deleted file mode 100644 index acec9ab3..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryPlantable.java +++ /dev/null @@ -1,65 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * @author PowerCrystals - * - * Defines a plantable object for use in the Planter. - */ -public interface IFactoryPlantable -{ - /** - * @return The item this plantable is managing. - */ - public Item getSeed(); - - /** - * @param stack The stack being planted. - * @param forFermenting True if this stack will be converted to biofuel - * @return True if this plantable can be planted (useful for metadata items). - */ - public boolean canBePlanted(ItemStack stack, boolean forFermenting); - - /** - * @param world The world instance this block or item will be placed into. - * @param x The destination X coordinate. - * @param y The destination Y coordinate. - * @param z The destination Z coordinate. - * @param stack The stack being planted. - * @return The block that will be placed into the world. - */ - public ReplacementBlock getPlantedBlock(World world, int x, int y, int z, ItemStack stack); - - /** - * @param world The world instance this block or item will be placed into. - * @param x The destination X coordinate. - * @param y The destination Y coordinate. - * @param z The destination Z coordinate. - * @param stack The stack being planted. - * @return True if this plantable can be placed at the provided coordinates. - */ - public boolean canBePlantedHere(World world, int x, int y, int z, ItemStack stack); - - /** - * Called before planting is performed. Used to till soil, for example. - * @param world The world instance this block or item will be placed into. - * @param x The destination X coordinate. - * @param y The destination Y coordinate. - * @param z The destination Z coordinate. - * @param stack The stack being planted. - */ - public void prePlant(World world, int x, int y, int z, ItemStack stack); - - /** - * Called after planting is performed. Usually empty. - * @param world The world instance this block or item will be placed into. - * @param x The destination X coordinate. - * @param y The destination Y coordinate. - * @param z The destination Z coordinate. - * @param stack The stack being planted. - */ - public void postPlant(World world, int x, int y, int z, ItemStack stack); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java b/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java deleted file mode 100644 index 27c173fa..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IFactoryRanchable.java +++ /dev/null @@ -1,28 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.inventory.IInventory; -import net.minecraft.world.World; - -/** - * @author PowerCrystals - * - * Defines a ranchable entity for use in the Rancher. - */ -public interface IFactoryRanchable -{ - /** - * @return The entity being ranched. Must be a subtype of EntityLivingBase. - */ - public Class getRanchableEntity(); - - /** - * @param world The world this entity is in. - * @param entity The entity instance being ranched. - * @param rancher The rancher instance doing the ranching. Used to access the Rancher's inventory when milking cows, for example. - * @return A list of drops. - */ - public List ranch(World world, EntityLivingBase entity, IInventory rancher); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java deleted file mode 100644 index 31eba004..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/ILiquidDrinkHandler.java +++ /dev/null @@ -1,8 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.entity.EntityLivingBase; - -public interface ILiquidDrinkHandler -{ - public void onDrink(EntityLivingBase player); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IMFRHammer.java b/src/api/java/powercrystals/minefactoryreloaded/api/IMFRHammer.java deleted file mode 100644 index 00fcbe9c..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IMFRHammer.java +++ /dev/null @@ -1,9 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -/** - * @author PowerCrystals - * Defines a tool that can rotate MFR machines. Implement on an Item class. Requires no additional work on your part. - */ -public interface IMFRHammer -{ -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java deleted file mode 100644 index 01693a73..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IMobEggHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.entity.EntityList.EntityEggInfo; -import net.minecraft.item.ItemStack; - -/** - * @author PowerCrystals - * - * Defines a class that MFR will use to local egg info for a given mob. This is used to color the Safari Net based on the captured mob. - */ -public interface IMobEggHandler -{ - /** - * @param safariNet The Safari Net that is looking for egg info. - * @return An EntityEggInfo, or null if this instance cannot handle this mob. - */ - public EntityEggInfo getEgg(ItemStack safariNet); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java deleted file mode 100644 index 46e295ea..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IMobSpawnHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.entity.EntityLivingBase; - -/** - * @author skyboy - * - * Defines a handler for mob spawns from the autospawner. - * Added primarily to solve item duping on exact spawn & entity inventories - */ -public interface IMobSpawnHandler -{ - /** - * @return The class that this instance is handling. - */ - public Class getMobClass(); - - /** - * @param entity The entity instance being spawned. Typically your regular spawn code 100% handles this - */ - public void onMobSpawn(EntityLivingBase entity); - - /** - * @param entity The entity instance being exact-copied. Clear your inventories & etc. here - */ - public void onMobExactSpawn(EntityLivingBase entity); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java b/src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java deleted file mode 100644 index 74dae7e8..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/INeedleAmmo.java +++ /dev/null @@ -1,13 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface INeedleAmmo -{ - public boolean onHitEntity(ItemStack stac, EntityPlayer owner, Entity hit, double distance); - public void onHitBlock(ItemStack stac, EntityPlayer owner, World world, int x, int y, int z, int side, double distance); - public float getSpread(ItemStack stack); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java b/src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java deleted file mode 100644 index b03d6f08..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/IRandomMobProvider.java +++ /dev/null @@ -1,11 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import java.util.List; - -import net.minecraft.world.World; - - -public interface IRandomMobProvider -{ - public List getRandomMobs(World world); -} \ No newline at end of file diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java b/src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java deleted file mode 100644 index 2a4457bb..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/ISafariNetHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -/** - * @author PowerCrystals - * - * Defines an object that can display information about a captured mob in a Safari net. - */ -public interface ISafariNetHandler -{ - /** - * @return The class of mob that this handler applies to. - */ - public Class validFor(); - - /** - * @param safariNetStack The Safari Net that is requesting information. - * @param player The player holding the Safari Net. - * @param infoList The current list of information strings. Add yours to this. - * @param advancedTooltips True if the advanced tooltips option is on. - */ - public void addInformation(ItemStack safariNetStack, EntityPlayer player, List infoList, boolean advancedTooltips); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java b/src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java deleted file mode 100644 index 5e876e80..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/ISyringe.java +++ /dev/null @@ -1,46 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * @author PowerCrystals - * - * Defines a syringe for use in the Vet machine. - */ -public interface ISyringe -{ - /** - * Called when the vet is deciding if it should use this syringe. - * @param world The world instance. - * @param entity The entity being injected. - * @param syringe The syringe ItemStack. - * @return True if the entity can be injected by this syringe. - */ - public boolean canInject(World world, EntityLivingBase entity, ItemStack syringe); - - /** - * Called to perform an injection. - * @param world The world instance. - * @param entity The entity being injected. - * @param syringe The syringe ItemStack. - * @return True if injection was successful. - */ - public boolean inject(World world, EntityLivingBase entity, ItemStack syringe); - - /** - * Called to check if a syringe is empty - * @param syringe The syringe ItemStack. - * @return True if the syringe is empty - */ - public boolean isEmpty(ItemStack syringe); - - /** - * Called to get the empty syringe - * Note: this will replace the syringe, max stacksize should be 1 - * @param syringe The syringe ItemStack. - * @return An empty syringe ItemStack - */ - public ItemStack getEmptySyringe(ItemStack syringe); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java b/src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java deleted file mode 100644 index 7f5dd7cc..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/MobDrop.java +++ /dev/null @@ -1,21 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.WeightedRandom; - -public class MobDrop extends WeightedRandom.Item -{ - private ItemStack _stack; - - public MobDrop(int weight, ItemStack stack) - { - super(weight); - _stack = stack; - } - - public ItemStack getStack() - { - if(_stack == null) return null; - return _stack.copy(); - } -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java b/src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java deleted file mode 100644 index 86791cc5..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/RanchedItem.java +++ /dev/null @@ -1,68 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -/** - * @author skyboy026 - * - * Defines an ItemStack or a FluidStack that is the result of an entity being ranched - */ -public final class RanchedItem { - private final ItemStack item; - private final FluidStack fluid; - - public RanchedItem(Block item, int amount, int meta) - { - this(new ItemStack(item, amount, meta)); - } - - public RanchedItem(Block item, int amount) - { - this(new ItemStack(item, amount)); - } - - public RanchedItem(Block item) - { - this(new ItemStack(item)); - } - - public RanchedItem(Item item, int amount, int meta) - { - this(new ItemStack(item, amount, meta)); - } - - public RanchedItem(Item item, int amount) - { - this(new ItemStack(item, amount)); - } - - public RanchedItem(Item item) - { - this(new ItemStack(item)); - } - - public RanchedItem(ItemStack item) - { - this.item = item; - fluid = null; - } - - public RanchedItem(FluidStack fluid) - { - this.fluid = fluid; - item = null; - } - - public boolean hasFluid() - { - return item == null & fluid != null; - } - - public Object getResult() - { - return item == null ? fluid : item; - } -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java b/src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java deleted file mode 100644 index 2ffa56b1..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/RandomMob.java +++ /dev/null @@ -1,28 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.entity.Entity; -import net.minecraft.util.WeightedRandom; - -public class RandomMob extends WeightedRandom.Item -{ - private Entity _mob; - public final boolean shouldInit; - - public RandomMob(Entity savedMob, int weight, boolean init) - { - super(weight); - _mob = savedMob; - shouldInit = init; - } - - public RandomMob(Entity savedMob, int weight) - { - this(savedMob, weight, true); - } - - public Entity getMob() - { - if(_mob == null) return null; - return _mob; - } -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java b/src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java deleted file mode 100644 index 88cd7a86..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/ReplacementBlock.java +++ /dev/null @@ -1,137 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -public class ReplacementBlock -{ - protected byte _hasMeta; - protected int _meta; - protected final Block _block; - protected final NBTTagCompound _tileTag; - - /** - * Called to replace a block in the world. - * @param world The world object - * @param x The X coord - * @param y The Y coord - * @param z The Z coord - * @param stack The ItemStack being used to replace the block (may be null) - * @return True if the block was set successfully - */ - public boolean replaceBlock(World world, int x, int y, int z, ItemStack stack) - { - int meta = getMeta(world, x, y, z, stack); - if (world.setBlock(x, y, z, _block, meta, 3)) - { - if (hasTag(stack) && _block.hasTileEntity(meta)) - { - TileEntity tile = world.getTileEntity(x, y, z); - if (tile != null) - tile.readFromNBT(getTag(world, x, y, z, stack)); - } - return true; - } - return false; - } - - /** - * Called to get the metadata of the replacement block in the world. - * @param world The world object - * @param x The X coord - * @param y The Y coord - * @param z The Z coord - * @param stack The ItemStack being used to replace the block (may be null) - * @return The metadata of the block - */ - protected int getMeta(World world, int x, int y, int z, ItemStack stack) - { - int m = 0; - if (_hasMeta > 0) - { - if (_hasMeta > 1) - return _meta; - m = stack.getItemDamage(); - Item item = stack.getItem(); - if (item instanceof ItemBlock) - m = ((ItemBlock)item).getMetadata(m); - } - return m; - } - - /** - * Called to set the metdata of this ReplacementBlock to a fixed value - * @param meta The metadata of the block - * @return This instance - */ - public ReplacementBlock setMeta(int meta) - { - if (meta >= 0) - { - _hasMeta = 2; - _meta = meta; - } - return this; - } - - /** - * Called to set the metdata of this ReplacementBlock to a value read from an ItemStack - * @param meta The metadata of the block - * @return This instance - */ - public ReplacementBlock setMeta(boolean hasMeta) - { - _hasMeta = (byte) (hasMeta ? 1 : 0); - return this; - } - - /** - * Called to get the NBTTagCompound a TileEntity will read its state from - * @param world The world object - * @param x The X coord - * @param y The Y coord - * @param z The Z coord - * @param stack The ItemStack being used to replace the block (may be null) - * @return The NBTTagCompound a TileEntity will read its state from - */ - protected NBTTagCompound getTag(World world, int x, int y, int z, ItemStack stack) - { - return _tileTag; - } - - /** - * Called to see if a TileEntity should have its state set - * @param stack The ItemStack being used to replace the block (may be null) - * @return True if the TileEntity should have its state set - */ - protected boolean hasTag(ItemStack stack) - { - return _tileTag != null; - } - - public ReplacementBlock(Item block) - { - this(Block.getBlockFromItem(block)); - } - - public ReplacementBlock(Item block, NBTTagCompound tag) - { - this(Block.getBlockFromItem(block), tag); - } - - public ReplacementBlock(Block block) - { - this(block, null); - } - - public ReplacementBlock(Block block, NBTTagCompound tag) - { - _block = block; - _tileTag = tag; - } -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java b/src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java deleted file mode 100644 index 3d075fa3..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/ValuedItem.java +++ /dev/null @@ -1,72 +0,0 @@ -package powercrystals.minefactoryreloaded.api; - -import net.minecraft.item.ItemStack; - -public class ValuedItem -{ - public final int value; - public final ItemStack item; - public final String key; - public final Object object; - - public ValuedItem(int v, ItemStack i) - { - value = v; - item = i; - key = null; - object = null; - } - - public ValuedItem(String v, Object i) - { - value = -1; - item = null; - key = v; - object = i; - } - - /** - * Presently unused but included so that if they do get used in the future, - * people including this in their jar and loading before MFR don't destroy everyone - */ - - public ValuedItem(int v, Object i) - { - value = v; - item = null; - key = null; - object = i; - } - - public ValuedItem(String v, ItemStack i) - { - value = -1; - item = i; - key = v; - object = null; - } - - public ValuedItem(int v, String k, ItemStack i) - { - value = v; - item = i; - key = k; - object = null; - } - - public ValuedItem(int v, String k, Object i) - { - value = v; - item = null; - key = k; - object = i; - } - - public ValuedItem(int v, String k, ItemStack i, Object o) - { - value = v; - item = i; - key = k; - object = o; - } -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInfo.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInfo.java deleted file mode 100644 index 0fc75c78..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInfo.java +++ /dev/null @@ -1,28 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -/** - * Defines a Block that can print information about itself using the RedNet Meter. This must be implemented on your Block class. - */ -public interface IRedNetInfo -{ - /** - * This function appends information to a list provided to it. - * - * @param world Reference to the world. - * @param x X coordinate of the block. - * @param y Y coordinate of the block. - * @param z Z coordinate of the block. - * @param side The side of the block that is being queried. - * @param player Player doing the querying - this can be NULL. - * @param info The list that the information should be appended to. - */ - public void getRedNetInfo(IBlockAccess world, int x, int y, int z, - ForgeDirection side, EntityPlayer player, List info); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java deleted file mode 100644 index a814af3c..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetInputNode.java +++ /dev/null @@ -1,52 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet; - -import powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection; - -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -/** - * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. - *

- * Note that when you implement this, the RedNet network makes several assumptions about your code - - * It will not clamp values to 0 <= x <= 15. This means you must be able to accept any possible integer - * without crashing, even negatives. It will also assume that calling the onInput(s)Changed() methods - * are sufficient, and will not issue block updates. In Single mode, it will call onInputChanged. - *

- * RedNet cables have their subnets indicated to the user by colored bands on the cable. - * The color of a given subnet is the same as the wool with metadata equal to the subnet number. - *

- * For reference:
- * 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray, - * 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black - */ -public interface IRedNetInputNode extends IRedNetConnection -{ - /** - * Called when the input values to this block change. Only called if your block is connected in "All" mode. - * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates - * on the next tick. - * - * @param world The world this block is in. - * @param x This block's X coordinate. - * @param y This block's Y coordinate. - * @param z This block's Z coordinate. - * @param side The side the input values are being changed on. - * @param inputValues The new set of input values. This array will be 16 elements long. Do not alter or cache. - */ - public void onInputsChanged(World world, int x, int y, int z, ForgeDirection side, int[] inputValues); - - /** - * Called when the input value to this block changes. Only called if your block is connected in "Single" mode. - * Do not issue a network value update from inside this method call; it will be ignored. Issue your updates - * on the next tick. - * - * @param world The world this block is in. - * @param x This block's X coordinate. - * @param y This block's Y coordinate. - * @param z This block's Z coordinate. - * @param side The side the input values are being changed on. - * @param inputValue The new input value - */ - public void onInputChanged(World world, int x, int y, int z, ForgeDirection side, int inputValue); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java deleted file mode 100644 index 981ce06b..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicCircuit.java +++ /dev/null @@ -1,19 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet; - -import net.minecraft.nbt.NBTTagCompound; - -public interface IRedNetLogicCircuit -{ - public byte getInputCount(); - - public byte getOutputCount(); - - public int[] recalculateOutputValues(long worldTime, int[] inputValues); - - public String getUnlocalizedName(); - public String getInputPinLabel(int pin); - public String getOutputPinLabel(int pin); - - public void readFromNBT(NBTTagCompound tag); - public void writeToNBT(NBTTagCompound tag); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java deleted file mode 100644 index dd05969e..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetLogicPoint.java +++ /dev/null @@ -1,36 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet; - -/** - * - * @author skyboy - */ -public interface IRedNetLogicPoint -{ - /** - * - * @param out - * @return - */ - public void transformOutput(int[] out); - - /** - * - * @param out - * @return - */ - public void transformOutput(int out); - - /** - * - * @param in - * @return - */ - public int[] transformInput(int[] in); - - /** - * - * @param in - * @return - */ - public int transformInput(int in); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java deleted file mode 100644 index c9fb0bf8..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetNetworkContainer.java +++ /dev/null @@ -1,32 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet; - -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -/** - * - * You should not implement this yourself. Instead, use this to look for cables to notify from your IRedNetOmniNode as this does not - * require a block update. This will be implemented on the cable's Block class. - * - */ -public interface IRedNetNetworkContainer -{ - /** - * Tells the network to recalculate all subnets. - * @param world The world this cable is in. - * @param x The x-coordinate of this cable. - * @param x The y-coordinate of this cable. - * @param x The z-coordinate of this cable. - */ - public void updateNetwork(World world, int x, int y, int z, ForgeDirection from); - - /** - * Tells the network to recalculate a specific subnet. - * @param world The world this cable is in. - * @param x The x-coordinate of this cable. - * @param x The y-coordinate of this cable. - * @param x The z-coordinate of this cable. - * @param subnet The subnet to recalculate. - */ - public void updateNetwork(World world, int x, int y, int z, int subnet, ForgeDirection from); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java deleted file mode 100644 index f2bdf397..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOmniNode.java +++ /dev/null @@ -1,22 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet; - -/** - * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. - *

- * Note that when you implement this, the RedNet network makes several assumptions about your code - - * It will not clamp values to 0 <= x <= 15. This means you must be able to accept any possible integer - * without crashing, even negatives. It will also assume that calling the onInput(s)Changed() methods - * are sufficient, and will not issue block updates. It will never call the vanilla redstone output - * methods, and will only query the methods contained in this interface. - *

- * RedNet cables have their subnets indicated to the user by colored bands on the cable. - * The color of a given subnet is the same as the wool with metadata equal to the subnet number. - *

- * For reference:
- * 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray, - * 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black - */ -public interface IRedNetOmniNode extends IRedNetInputNode, IRedNetOutputNode -{ - // this is merely provided for convenience -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java deleted file mode 100644 index 34281875..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/IRedNetOutputNode.java +++ /dev/null @@ -1,51 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet; - -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection; - -/** - * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. - *

- * Note that when you implement this, the RedNet network makes several assumptions about your code - - * It will never call the vanilla redstone output methods, querying only the methods contained in - * this interface, and will not issue block updates. - *

- * RedNet cables have their subnets indicated to the user by colored bands on the cable. - * The color of a given subnet is the same as the wool with metadata equal to the subnet number. - *

- * For reference:
- * 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray, - * 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black - */ -public interface IRedNetOutputNode extends IRedNetConnection -{ - /** - * Returns the output values of this RedNet node. - * This array must be 16 elements long. - * Only called if your block is connected in "All" mode. - * - * @param world The world this block is in. - * @param x This block's X coordinate. - * @param y This block's Y coordinate. - * @param z This block's Z coordinate. - * @param side The side the output values are required for. - * @return The output values. - */ - public int[] getOutputValues(World world, int x, int y, int z, ForgeDirection side); - - /** - * Returns the output value of this RedNet node for a given subnet. - * Must be the same as getOutputValues(world, x, y, z, side)[subnet]. - * - * @param world The world this block is in. - * @param x This block's X coordinate. - * @param y This block's Y coordinate. - * @param z This block's Z coordinate. - * @param side The side the output value is required for. - * @param subnet The subnet to get the output value for (0-15). - * @return The output value. - */ - public int getOutputValue(World world, int x, int y, int z, ForgeDirection side, int subnet); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java deleted file mode 100644 index 003800d8..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetConnection.java +++ /dev/null @@ -1,26 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet.connectivity; - -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -/** - * Defines a Block that can connect to RedNet cables. This must be implemented on your Block class. - */ -public interface IRedNetConnection -{ - /** - * Returns the connection type of this Block. If this value must be changed - * while the block is alive, it must notify neighbors of a change. - *

- * For nodes that want to interact with rednet, - * see IRedNetInputNode, IRedNetOutputNode, and IRedNetOmniNode - * - * @param world The world this block is in. - * @param x This block's X coordinate. - * @param y This block's Y coordinate. - * @param z This block's Z coordinate. - * @param side The side that connection information is required for. - * @return The connection type. - */ - public RedNetConnectionType getConnectionType(World world, int x, int y, int z, ForgeDirection side); -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java deleted file mode 100644 index 89de12b1..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetDecorative.java +++ /dev/null @@ -1,11 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet.connectivity; - -/** - * This must be implemented on your Block class. - *

- * RedNet cables will treat your block similar to a vanilla block that's not redstone active. - */ -public interface IRedNetDecorative -{ - -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java deleted file mode 100644 index 16225a74..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedNetNoConnection.java +++ /dev/null @@ -1,13 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet.connectivity; - -/** - * This must be implemented on your Block class. - *

- * RedNet cables will not connect to your block. - *
- * This behavior can be overridden in subclasses by IRedNetConnection - */ -public interface IRedNetNoConnection -{ - -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedstoneAlike.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedstoneAlike.java deleted file mode 100644 index f3784cfb..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/IRedstoneAlike.java +++ /dev/null @@ -1,10 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet.connectivity; - -/** - * This must be implemented on your Block class. - *

- * RedNet cables will treat your block similar to a redstone dust, and subtract one from the power value. - */ -public interface IRedstoneAlike { - -} diff --git a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java b/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java deleted file mode 100644 index 08ba24c1..00000000 --- a/src/api/java/powercrystals/minefactoryreloaded/api/rednet/connectivity/RedNetConnectionType.java +++ /dev/null @@ -1,86 +0,0 @@ -package powercrystals.minefactoryreloaded.api.rednet.connectivity; - -import java.util.HashMap; -import java.util.Map; - -/** - * Defines how RedNet cable connects to a block - *

- * None: RedNet will never connect to this block (if this is all you want: use IRedNetNoConnection) - *

- * CableSingle: Connections will use the cable renderer with a single band, best used for whole blocks - *
- * PlateSingle: Connections will use the plate renderer with a single band, used for conveyers and rails - *

- * CableAll: Connections permit access to all 16 bands - *
- * PlateAll: Connections permit access to all 16 bands - *

- * Forced connection modes are best used for decoration blocks: RedNet will not connect normally, - * but will if the user forces it. Typically, IRedNetDecorative is desired for this instead - *

- * ForcedCableSingle: Connections permit access to a single band, only when the cable is in forced connection mode - *
- * ForcedPlateSingle: Connections permit access to a single band, only when the cable is in forced connection mode - *

- * ForcedCableAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode - *
- * ForcedPlateAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode - *

- * The decorative nodes are for when you want rednet to decide how to connect to your block, - * but also need to receive full updates from the network. - *

- * DecorativeSingle: Connections permit access to a single band, using standard connection logic - *
- * DecorativeAll: Connections permit access to all 16 bands, using standard connection logic - *
- * ForcedDecorativeSingle: Connections permit access to a single band, only when the cable is in forced connection mode - *
- * ForcedDecorativeAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode - */ -public enum RedNetConnectionType -{ - None, // 0; 0000000 - CableSingle, // 11; 0001011 - PlateSingle, // 13; 0001101 - CableAll, // 19; 0010011 - PlateAll, // 21; 0010101 - ForcedCableSingle, // 43; 0101011 - ForcedPlateSingle, // 45; 0101101 - ForcedCableAll, // 51; 0110011 - ForcedPlateAll, // 53; 0110101 - DecorativeSingle, // NA; 0001001 - DecorativeAll, // NA; 0010001 - ForcedDecorativeSingle, // NA; 0101001 - ForcedDecorativeAll; // NA; 0110001 - - public final boolean isConnected = this.ordinal() != 0; // 0 bit (mask: 1) - public final boolean isSingleSubnet = this.name().endsWith("Single"); // 3 bit (mask: 8) - public final boolean isAllSubnets = this.name().endsWith("All"); // 4 bit (mask: 16) - public final boolean isPlate = this.name().contains("Plate"); // 2 bit (mask: 4) - public final boolean isCable = this.name().contains("Cable"); // 1 bit (mask: 2) - public final boolean isConnectionForced = this.name().startsWith("Forced"); // 5 bit (mask: 32) - public final boolean isDecorative = this.name().contains("Decorative"); - public final short flags = toFlags(isConnected, isCable, isPlate, - isSingleSubnet, isAllSubnets, isConnectionForced); - - public static final RedNetConnectionType fromFlags(short flags) - { - return connections.get(flags); - } - - private static final short toFlags(boolean ...flags) - { - short ret = 0; - for (int i = flags.length; i --> 0;) - ret |= (flags[i] ? 1 : 0) << i; - return ret; - } - - private static final Map connections = new HashMap(); - - static { - for (RedNetConnectionType type : RedNetConnectionType.values()) - connections.put(type.flags, type); - } -} diff --git a/src/api/java/thaumcraft/api/IGoggles.java b/src/api/java/thaumcraft/api/IGoggles.java deleted file mode 100644 index 2f53d816..00000000 --- a/src/api/java/thaumcraft/api/IGoggles.java +++ /dev/null @@ -1,22 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -/** - * - * @author Azanor - * - * Equipped head slot items that extend this class will be able to perform most functions that - * goggles of revealing can apart from view nodes which is handled by IRevealer. - * - */ - -public interface IGoggles { - - /* - * If this method returns true things like block essentia contents will be shown. - */ - public boolean showIngamePopups(ItemStack itemstack, EntityLivingBase player); - -} diff --git a/src/api/java/thaumcraft/api/IRepairable.java b/src/api/java/thaumcraft/api/IRepairable.java deleted file mode 100644 index 48c6dff9..00000000 --- a/src/api/java/thaumcraft/api/IRepairable.java +++ /dev/null @@ -1,13 +0,0 @@ -package thaumcraft.api; - - - -/** - * @author Azanor - * Items, armor and tools with this interface can receive the Repair enchantment. - * Repairs 1 point of durability every 10 seconds (2 for repair II) - */ -public interface IRepairable { - - -} diff --git a/src/api/java/thaumcraft/api/IRepairableExtended.java b/src/api/java/thaumcraft/api/IRepairableExtended.java deleted file mode 100644 index 33827124..00000000 --- a/src/api/java/thaumcraft/api/IRepairableExtended.java +++ /dev/null @@ -1,17 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - - - -/** - * @author Azanor - * Items, armor and tools with this interface can receive the Repair enchantment. - * Repairs 1 point of durability every 10 seconds (2 for repair II) - */ -public interface IRepairableExtended extends IRepairable { - - public boolean doRepair(ItemStack stack, EntityPlayer player, int enchantlevel); - -} diff --git a/src/api/java/thaumcraft/api/IRunicArmor.java b/src/api/java/thaumcraft/api/IRunicArmor.java deleted file mode 100644 index 5dd31100..00000000 --- a/src/api/java/thaumcraft/api/IRunicArmor.java +++ /dev/null @@ -1,22 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.item.ItemStack; - -/** - * - * @author Azanor - * - * Armor or bauble slot items that implement this interface can provide runic shielding. - * Recharging, hardening, etc. is handled internally by thaumcraft. - * - */ - -public interface IRunicArmor { - - /** - * returns how much charge this item can provide. This is the base shielding value - any hardening is stored and calculated internally. - */ - public int getRunicCharge(ItemStack itemstack); - - -} diff --git a/src/api/java/thaumcraft/api/IScribeTools.java b/src/api/java/thaumcraft/api/IScribeTools.java deleted file mode 100644 index 8800fa57..00000000 --- a/src/api/java/thaumcraft/api/IScribeTools.java +++ /dev/null @@ -1,14 +0,0 @@ -package thaumcraft.api; - - -/** - * - * @author Azanor - * - * Interface used to identify scribing tool items used in research table - * - */ - -public interface IScribeTools { - -} diff --git a/src/api/java/thaumcraft/api/IVisDiscountGear.java b/src/api/java/thaumcraft/api/IVisDiscountGear.java deleted file mode 100644 index 3793ea3e..00000000 --- a/src/api/java/thaumcraft/api/IVisDiscountGear.java +++ /dev/null @@ -1,20 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import thaumcraft.api.aspects.Aspect; - - - - -/** - * @author Azanor - * ItemArmor with this interface will grant a discount to the vis cost of actions the wearer performs with casting wands. - * The amount returned is the percentage by which the cost is discounted. There is a built-int max discount of 50%, but - * individual items really shouldn't have a discount more than 5% - */ -public interface IVisDiscountGear { - - int getVisDiscount(ItemStack stack, EntityPlayer player, Aspect aspect); - -} diff --git a/src/api/java/thaumcraft/api/ItemApi.java b/src/api/java/thaumcraft/api/ItemApi.java deleted file mode 100644 index 25dda282..00000000 --- a/src/api/java/thaumcraft/api/ItemApi.java +++ /dev/null @@ -1,70 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import cpw.mods.fml.common.FMLLog; - -/** - * @author Azanor - * - * This is used to gain access to the items in my mod. - * I only give some examples and it will probably still - * require a bit of work for you to get hold of everything you need. - * - */ -public class ItemApi { - - public static ItemStack getItem(String itemString, int meta) { - ItemStack item = null; - - try { - String itemClass = "thaumcraft.common.config.ConfigItems"; - Object obj = Class.forName(itemClass).getField(itemString).get(null); - if (obj instanceof Item) { - item = new ItemStack((Item) obj,1,meta); - } else if (obj instanceof ItemStack) { - item = (ItemStack) obj; - } - } catch (Exception ex) { - FMLLog.warning("[Thaumcraft] Could not retrieve item identified by: " + itemString); - } - - return item; - } - - public static ItemStack getBlock(String itemString, int meta) { - ItemStack item = null; - - try { - String itemClass = "thaumcraft.common.config.ConfigBlocks"; - Object obj = Class.forName(itemClass).getField(itemString).get(null); - if (obj instanceof Block) { - item = new ItemStack((Block) obj,1,meta); - } else if (obj instanceof ItemStack) { - item = (ItemStack) obj; - } - } catch (Exception ex) { - FMLLog.warning("[Thaumcraft] Could not retrieve block identified by: " + itemString); - } - - return item; - } - - /** - * - * Some examples - * - * Casting Wands: - * itemWandCasting - * - * Resources: - * itemEssence, itemWispEssence, itemResource, itemShard, itemNugget, - * itemNuggetChicken, itemNuggetBeef, itemNuggetPork, itemTripleMeatTreat - * - * Research: - * itemResearchNotes, itemInkwell, itemThaumonomicon - * - */ - -} diff --git a/src/api/java/thaumcraft/api/ItemRunic.java b/src/api/java/thaumcraft/api/ItemRunic.java deleted file mode 100644 index 80251f59..00000000 --- a/src/api/java/thaumcraft/api/ItemRunic.java +++ /dev/null @@ -1,21 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -public class ItemRunic extends Item implements IRunicArmor { - - int charge; - - public ItemRunic (int charge) - { - super(); - this.charge = charge; - } - - @Override - public int getRunicCharge(ItemStack itemstack) { - return charge; - } - -} diff --git a/src/api/java/thaumcraft/api/LICENSE b/src/api/java/thaumcraft/api/LICENSE deleted file mode 100644 index 11823298..00000000 --- a/src/api/java/thaumcraft/api/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Azanor - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/api/java/thaumcraft/api/README.md b/src/api/java/thaumcraft/api/README.md deleted file mode 100644 index b88c1cc6..00000000 --- a/src/api/java/thaumcraft/api/README.md +++ /dev/null @@ -1,10 +0,0 @@ -thaumcraft-api -============== - -Thaumcraft Api - - - -This is just to create an easy to access place for the api code. - -I will still place the zips on the minecraft forum post for the "official" version of the api - the code here will usually be for dev versions. diff --git a/src/api/java/thaumcraft/api/ThaumcraftApi.java b/src/api/java/thaumcraft/api/ThaumcraftApi.java deleted file mode 100644 index bbd7a43c..00000000 --- a/src/api/java/thaumcraft/api/ThaumcraftApi.java +++ /dev/null @@ -1,536 +0,0 @@ -package thaumcraft.api; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.Item.ToolMaterial; -import net.minecraft.item.ItemArmor.ArmorMaterial; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.oredict.OreDictionary; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.crafting.CrucibleRecipe; -import thaumcraft.api.crafting.InfusionEnchantmentRecipe; -import thaumcraft.api.crafting.InfusionRecipe; -import thaumcraft.api.crafting.ShapedArcaneRecipe; -import thaumcraft.api.crafting.ShapelessArcaneRecipe; -import thaumcraft.api.research.IScanEventHandler; -import thaumcraft.api.research.ResearchCategories; -import thaumcraft.api.research.ResearchCategoryList; -import thaumcraft.api.research.ResearchItem; -import thaumcraft.api.research.ResearchPage; - - -/** - * @author Azanor - * - * - * IMPORTANT: If you are adding your own aspects to items it is a good idea to do it AFTER Thaumcraft adds its aspects, otherwise odd things may happen. - * - */ -public class ThaumcraftApi { - - //Materials - public static ToolMaterial toolMatThaumium = EnumHelper.addToolMaterial("THAUMIUM", 3, 400, 7F, 2, 22); - public static ToolMaterial toolMatVoid = EnumHelper.addToolMaterial("VOID", 4, 150, 8F, 3, 10); - public static ToolMaterial toolMatElemental = EnumHelper.addToolMaterial("THAUMIUM_ELEMENTAL", 3, 1500, 10F, 3, 18); - public static ArmorMaterial armorMatThaumium = EnumHelper.addArmorMaterial("THAUMIUM", 25, new int[] { 2, 6, 5, 2 }, 25); - public static ArmorMaterial armorMatSpecial = EnumHelper.addArmorMaterial("SPECIAL", 25, new int[] { 1, 3, 2, 1 }, 25); - public static ArmorMaterial armorMatThaumiumFortress = EnumHelper.addArmorMaterial("FORTRESS", 40, new int[] { 3, 7, 6, 3 }, 25); - public static ArmorMaterial armorMatVoid = EnumHelper.addArmorMaterial("VOID", 10, new int[] { 3, 7, 6, 3 }, 10); - public static ArmorMaterial armorMatVoidFortress = EnumHelper.addArmorMaterial("VOIDFORTRESS", 18, new int[] { 4, 8, 7, 4 }, 10); - - //Enchantment references - public static int enchantFrugal; - public static int enchantPotency; - public static int enchantWandFortune; - public static int enchantHaste; - public static int enchantRepair; - - //Miscellaneous - /** - * Portable Hole Block-id Blacklist. - * Simply add the block-id's of blocks you don't want the portable hole to go through. - */ - public static ArrayList portableHoleBlackList = new ArrayList(); - - - //RESEARCH///////////////////////////////////////// - public static ArrayList scanEventhandlers = new ArrayList(); - public static ArrayList scanEntities = new ArrayList(); - public static class EntityTagsNBT { - public EntityTagsNBT(String name, Object value) { - this.name = name; - this.value = value; - } - public String name; - public Object value; - } - public static class EntityTags { - public EntityTags(String entityName, AspectList aspects, EntityTagsNBT... nbts) { - this.entityName = entityName; - this.nbts = nbts; - this.aspects = aspects; - } - public String entityName; - public EntityTagsNBT[] nbts; - public AspectList aspects; - } - - /** - * not really working atm, so ignore it for now - * @param scanEventHandler - */ - public static void registerScanEventhandler(IScanEventHandler scanEventHandler) { - scanEventhandlers.add(scanEventHandler); - } - - /** - * This is used to add aspects to entities which you can then scan using a thaumometer. - * Also used to calculate vis drops from mobs. - * @param entityName - * @param aspects - * @param nbt you can specify certain nbt keys and their values - * to differentiate between mobs.
For example the normal and wither skeleton: - *
ThaumcraftApi.registerEntityTag("Skeleton", (new AspectList()).add(Aspect.DEATH, 5)); - *
ThaumcraftApi.registerEntityTag("Skeleton", (new AspectList()).add(Aspect.DEATH, 8), new NBTTagByte("SkeletonType",(byte) 1)); - */ - public static void registerEntityTag(String entityName, AspectList aspects, EntityTagsNBT... nbt ) { - scanEntities.add(new EntityTags(entityName,aspects,nbt)); - } - - //RECIPES///////////////////////////////////////// - private static ArrayList craftingRecipes = new ArrayList(); - private static HashMap smeltingBonus = new HashMap(); - - /** - * This method is used to determine what bonus items are generated when the infernal furnace smelts items - * @param in The input of the smelting operation. e.g. new ItemStack(Block.oreGold) - * @param out The bonus item that can be produced from the smelting operation e.g. new ItemStack(nuggetGold,0,0). - * Stacksize should be 0 unless you want to guarantee that at least 1 item is always produced. - */ - public static void addSmeltingBonus(ItemStack in, ItemStack out) { - smeltingBonus.put( - Arrays.asList(in.getItem(),in.getItemDamage()), - new ItemStack(out.getItem(),0,out.getItemDamage())); - } - - /** - * This method is used to determine what bonus items are generated when the infernal furnace smelts items - * @param in The ore dictionary input of the smelting operation. e.g. "oreGold" - * @param out The bonus item that can be produced from the smelting operation e.g. new ItemStack(nuggetGold,0,0). - * Stacksize should be 0 unless you want to guarantee that at least 1 item is always produced. - */ - public static void addSmeltingBonus(String in, ItemStack out) { - smeltingBonus.put( in, new ItemStack(out.getItem(),0,out.getItemDamage())); - } - - /** - * Returns the bonus item produced from a smelting operation in the infernal furnace - * @param in The input of the smelting operation. e.g. new ItemStack(oreGold) - * @return the The bonus item that can be produced - */ - public static ItemStack getSmeltingBonus(ItemStack in) { - ItemStack out = smeltingBonus.get(Arrays.asList(in.getItem(),in.getItemDamage())); - if (out==null) { - out = smeltingBonus.get(Arrays.asList(in.getItem(),OreDictionary.WILDCARD_VALUE)); - } - if (out==null) { - String od = OreDictionary.getOreName( OreDictionary.getOreID(in)); - out = smeltingBonus.get(od); - } - return out; - } - - public static List getCraftingRecipes() { - return craftingRecipes; - } - - /** - * @param research the research key required for this recipe to work. Leave blank if it will work without research - * @param result the recipe output - * @param aspects the vis cost per aspect. - * @param recipe The recipe. Format is exactly the same as vanilla recipes. Input itemstacks are NBT sensitive. - */ - public static ShapedArcaneRecipe addArcaneCraftingRecipe(String research, ItemStack result, AspectList aspects, Object ... recipe) - { - ShapedArcaneRecipe r= new ShapedArcaneRecipe(research, result, aspects, recipe); - craftingRecipes.add(r); - return r; - } - - /** - * @param research the research key required for this recipe to work. Leave blank if it will work without research - * @param result the recipe output - * @param aspects the vis cost per aspect - * @param recipe The recipe. Format is exactly the same as vanilla shapeless recipes. Input itemstacks are NBT sensitive. - */ - public static ShapelessArcaneRecipe addShapelessArcaneCraftingRecipe(String research, ItemStack result, AspectList aspects, Object ... recipe) - { - ShapelessArcaneRecipe r = new ShapelessArcaneRecipe(research, result, aspects, recipe); - craftingRecipes.add(r); - return r; - } - - /** - * @param research the research key required for this recipe to work. Leave blank if it will work without research - * @param result the recipe output. It can either be an itemstack or an nbt compound tag that will be added to the central item - * @param instability a number that represents the N in 1000 chance for the infusion altar to spawn an - * instability effect each second while the crafting is in progress - * @param aspects the essentia cost per aspect. - * @param aspects input the central item to be infused - * @param recipe An array of items required to craft this. Input itemstacks are NBT sensitive. - * Infusion crafting components are automatically "fuzzy" and the oredict will be checked for possible matches. - * - */ - public static InfusionRecipe addInfusionCraftingRecipe(String research, Object result, int instability, AspectList aspects, ItemStack input,ItemStack[] recipe) - { - if (!(result instanceof ItemStack || result instanceof Object[])) return null; - InfusionRecipe r= new InfusionRecipe(research, result, instability, aspects, input, recipe); - craftingRecipes.add(r); - return r; - } - - /** - * @param research the research key required for this recipe to work. Leave blank if it will work without research - * @param enchantment the enchantment that will be applied to the item - * @param instability a number that represents the N in 1000 chance for the infusion altar to spawn an - * instability effect each second while the crafting is in progress - * @param aspects the essentia cost per aspect. - * @param recipe An array of items required to craft this. Input itemstacks are NBT sensitive. - * Infusion crafting components are automatically "fuzzy" and the oredict will be checked for possible matches. - * - */ - public static InfusionEnchantmentRecipe addInfusionEnchantmentRecipe(String research, Enchantment enchantment, int instability, AspectList aspects, ItemStack[] recipe) - { - InfusionEnchantmentRecipe r= new InfusionEnchantmentRecipe(research, enchantment, instability, aspects, recipe); - craftingRecipes.add(r); - return r; - } - - /** - * @param stack the recipe result - * @return the recipe - */ - public static InfusionRecipe getInfusionRecipe(ItemStack res) { - for (Object r:getCraftingRecipes()) { - if (r instanceof InfusionRecipe) { - if (((InfusionRecipe)r).getRecipeOutput() instanceof ItemStack) { - if (((ItemStack) ((InfusionRecipe)r).getRecipeOutput()).isItemEqual(res)) - return (InfusionRecipe)r; - } - } - } - return null; - } - - - /** - * @param key the research key required for this recipe to work. - * @param result the output result - * @param catalyst an itemstack of the catalyst or a string if it is an ore dictionary item - * @param cost the vis cost - * @param tags the aspects required to craft this - */ - public static CrucibleRecipe addCrucibleRecipe(String key, ItemStack result, Object catalyst, AspectList tags) { - CrucibleRecipe rc = new CrucibleRecipe(key, result, catalyst, tags); - getCraftingRecipes().add(rc); - return rc; - } - - - /** - * @param stack the recipe result - * @return the recipe - */ - public static CrucibleRecipe getCrucibleRecipe(ItemStack stack) { - for (Object r:getCraftingRecipes()) { - if (r instanceof CrucibleRecipe) { - if (((CrucibleRecipe)r).getRecipeOutput().isItemEqual(stack)) - return (CrucibleRecipe)r; - } - } - return null; - } - - /** - * @param hash the unique recipe code - * @return the recipe - */ - public static CrucibleRecipe getCrucibleRecipeFromHash(int hash) { - for (Object r:getCraftingRecipes()) { - if (r instanceof CrucibleRecipe) { - if (((CrucibleRecipe)r).hash==hash) - return (CrucibleRecipe)r; - } - } - return null; - } - - /** - * Used by the thaumonomicon drilldown feature. - * @param stack the item - * @return the thaumcraft recipe key that produces that item. - */ - private static HashMap keyCache = new HashMap(); - - public static Object[] getCraftingRecipeKey(EntityPlayer player, ItemStack stack) { - int[] key = new int[] {Item.getIdFromItem(stack.getItem()),stack.getItemDamage()}; - if (keyCache.containsKey(key)) { - if (keyCache.get(key)==null) return null; - if (ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), (String)(keyCache.get(key))[0])) - return keyCache.get(key); - else - return null; - } - for (ResearchCategoryList rcl:ResearchCategories.researchCategories.values()) { - for (ResearchItem ri:rcl.research.values()) { - if (ri.getPages()==null) continue; - for (int a=0;a objectTags = new ConcurrentHashMap(); - - /** - * Checks to see if the passed item/block already has aspects associated with it. - * @param id - * @param meta - * @return - */ - public static boolean exists(Item item, int meta) { - AspectList tmp = ThaumcraftApi.objectTags.get(Arrays.asList(item,meta)); - if (tmp==null) { - tmp = ThaumcraftApi.objectTags.get(Arrays.asList(item,OreDictionary.WILDCARD_VALUE)); - if (meta==OreDictionary.WILDCARD_VALUE && tmp==null) { - int index=0; - do { - tmp = ThaumcraftApi.objectTags.get(Arrays.asList(item,index)); - index++; - } while (index<16 && tmp==null); - } - if (tmp==null) return false; - } - - return true; - } - - /** - * Used to assign apsects to the given item/block. Here is an example of the declaration for cobblestone:

- * ThaumcraftApi.registerObjectTag(new ItemStack(Blocks.cobblestone), (new AspectList()).add(Aspect.ENTROPY, 1).add(Aspect.EARTH, 1)); - * @param item the item passed. Pass OreDictionary.WILDCARD_VALUE if all damage values of this item/block should have the same aspects - * @param aspects A ObjectTags object of the associated aspects - */ - public static void registerObjectTag(ItemStack item, AspectList aspects) { - if (aspects==null) aspects=new AspectList(); - try { - objectTags.put(Arrays.asList(item.getItem(),item.getItemDamage()), aspects); - } catch (Exception e) {} - } - - - /** - * Used to assign apsects to the given item/block. Here is an example of the declaration for cobblestone:

- * ThaumcraftApi.registerObjectTag(new ItemStack(Blocks.cobblestone), new int[]{0,1}, (new AspectList()).add(Aspect.ENTROPY, 1).add(Aspect.EARTH, 1)); - * @param item - * @param meta A range of meta values if you wish to lump several item meta's together as being the "same" item (i.e. stair orientations) - * @param aspects A ObjectTags object of the associated aspects - */ - public static void registerObjectTag(ItemStack item, int[] meta, AspectList aspects) { - if (aspects==null) aspects=new AspectList(); - try { - objectTags.put(Arrays.asList(item.getItem(),meta), aspects); - } catch (Exception e) {} - } - - /** - * Used to assign apsects to the given ore dictionary item. - * @param oreDict the ore dictionary name - * @param aspects A ObjectTags object of the associated aspects - */ - public static void registerObjectTag(String oreDict, AspectList aspects) { - if (aspects==null) aspects=new AspectList(); - ArrayList ores = OreDictionary.getOres(oreDict); - if (ores!=null && ores.size()>0) { - for (ItemStack ore:ores) { - try { - objectTags.put(Arrays.asList(ore.getItem(), ore.getItemDamage()), aspects); - } catch (Exception e) {} - } - } - } - - /** - * Used to assign aspects to the given item/block. - * Attempts to automatically generate aspect tags by checking registered recipes. - * Here is an example of the declaration for pistons:

- * ThaumcraftApi.registerComplexObjectTag(new ItemStack(Blocks.cobblestone), (new AspectList()).add(Aspect.MECHANISM, 2).add(Aspect.MOTION, 4)); - * IMPORTANT - this should only be used if you are not happy with the default aspects the object would be assigned. - * @param item, pass OreDictionary.WILDCARD_VALUE to meta if all damage values of this item/block should have the same aspects - * @param aspects A ObjectTags object of the associated aspects - */ - public static void registerComplexObjectTag(ItemStack item, AspectList aspects ) { - if (!exists(item.getItem(),item.getItemDamage())) { - AspectList tmp = ThaumcraftApiHelper.generateTags(item.getItem(), item.getItemDamage()); - if (tmp != null && tmp.size()>0) { - for(Aspect tag:tmp.getAspects()) { - aspects.add(tag, tmp.getAmount(tag)); - } - } - registerObjectTag(item,aspects); - } else { - AspectList tmp = ThaumcraftApiHelper.getObjectAspects(item); - for(Aspect tag:aspects.getAspects()) { - tmp.merge(tag, tmp.getAmount(tag)); - } - registerObjectTag(item,tmp); - } - } - - //WARP /////////////////////////////////////////////////////////////////////////////////////// - private static HashMap warpMap = new HashMap(); - - /** - * This method is used to determine how much warp is gained if the item is crafted - * @param craftresult The item crafted - * @param amount how much warp is gained - */ - public static void addWarpToItem(ItemStack craftresult, int amount) { - warpMap.put(Arrays.asList(craftresult.getItem(),craftresult.getItemDamage()),amount); - } - - /** - * This method is used to determine how much warp is gained if the sent item is crafted - * @param in The item crafted - * @param amount how much warp is gained - */ - public static void addWarpToResearch(String research, int amount) { - warpMap.put(research, amount); - } - - /** - * Returns how much warp is gained from the item or research passed in - * @param in itemstack or string - * @return how much warp it will give - */ - public static int getWarp(Object in) { - if (in==null) return 0; - if (in instanceof ItemStack && warpMap.containsKey(Arrays.asList(((ItemStack)in).getItem(),((ItemStack)in).getItemDamage()))) { - return warpMap.get(Arrays.asList(((ItemStack)in).getItem(),((ItemStack)in).getItemDamage())); - } else - if (in instanceof String && warpMap.containsKey((String)in)) { - return warpMap.get((String)in); - } - return 0; - } - - //CROPS ////////////////////////////////////////////////////////////////////////////////////////// - - /** - * To define mod crops you need to use FMLInterModComms in your @Mod.Init method. - * There are two 'types' of crops you can add. Standard crops and clickable crops. - * - * Standard crops work like normal vanilla crops - they grow until a certain metadata - * value is reached and you harvest them by destroying the block and collecting the blocks. - * You need to create and ItemStack that tells the golem what block id and metadata represents - * the crop when fully grown. Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the metadata won't get - * checked. - * Example for vanilla wheat: - * FMLInterModComms.sendMessage("Thaumcraft", "harvestStandardCrop", new ItemStack(Block.crops,1,7)); - * - * Clickable crops are crops that you right click to gather their bounty instead of destroying them. - * As for standard crops, you need to create and ItemStack that tells the golem what block id - * and metadata represents the crop when fully grown. The golem will trigger the blocks onBlockActivated method. - * Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the metadata won't get checked. - * Example (this will technically do nothing since clicking wheat does nothing, but you get the idea): - * FMLInterModComms.sendMessage("Thaumcraft", "harvestClickableCrop", new ItemStack(Block.crops,1,7)); - * - * Stacked crops (like reeds) are crops that you wish the bottom block should remain after harvesting. - * As for standard crops, you need to create and ItemStack that tells the golem what block id - * and metadata represents the crop when fully grown. Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the actualy md won't get - * checked. If it has the order upgrade it will only harvest if the crop is more than one block high. - * Example: - * FMLInterModComms.sendMessage("Thaumcraft", "harvestStackedCrop", new ItemStack(Block.reed,1,7)); - */ - - //NATIVE CLUSTERS ////////////////////////////////////////////////////////////////////////////////// - - /** - * You can define certain ores that will have a chance to produce native clusters via FMLInterModComms - * in your @Mod.Init method using the "nativeCluster" string message. - * The format should be: - * "[ore item/block id],[ore item/block metadata],[cluster item/block id],[cluster item/block metadata],[chance modifier float]" - * - * NOTE: The chance modifier is a multiplier applied to the default chance for that cluster to be produced (default 27.5% for a pickaxe of the core) - * - * Example for vanilla iron ore to produce one of my own native iron clusters (assuming default id's) at double the default chance: - * FMLInterModComms.sendMessage("Thaumcraft", "nativeCluster","15,0,25016,16,2.0"); - */ - - //LAMP OF GROWTH BLACKLIST /////////////////////////////////////////////////////////////////////////// - /** - * You can blacklist crops that should not be effected by the Lamp of Growth via FMLInterModComms - * in your @Mod.Init method using the "lampBlacklist" itemstack message. - * Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the metadata won't get checked. - * Example for vanilla wheat: - * FMLInterModComms.sendMessage("Thaumcraft", "lampBlacklist", new ItemStack(Block.crops,1,OreDictionary.WILDCARD_VALUE)); - */ - - //DIMENSION BLACKLIST /////////////////////////////////////////////////////////////////////////// - /** - * You can blacklist a dimension to not spawn certain thaumcraft features - * in your @Mod.Init method using the "dimensionBlacklist" string message in the format "[dimension]:[level]" - * The level values are as follows: - * [0] stop all tc spawning and generation - * [1] allow ore and node generation - * [2] allow mob spawning - * [3] allow ore and node gen + mob spawning - * Example: - * FMLInterModComms.sendMessage("Thaumcraft", "dimensionBlacklist", "15:1"); - */ - - //BIOME BLACKLIST /////////////////////////////////////////////////////////////////////////// - /** - * You can blacklist a biome to not spawn certain thaumcraft features - * in your @Mod.Init method using the "biomeBlacklist" string message in the format "[biome id]:[level]" - * The level values are as follows: - * [0] stop all tc spawning and generation - * [1] allow ore and node generation - * [2] allow mob spawning - * [3] allow ore and node gen + mob spawning - * Example: - * FMLInterModComms.sendMessage("Thaumcraft", "biomeBlacklist", "180:2"); - */ -} diff --git a/src/api/java/thaumcraft/api/ThaumcraftApiHelper.java b/src/api/java/thaumcraft/api/ThaumcraftApiHelper.java deleted file mode 100644 index 7f95dc44..00000000 --- a/src/api/java/thaumcraft/api/ThaumcraftApiHelper.java +++ /dev/null @@ -1,293 +0,0 @@ -package thaumcraft.api; - -import java.lang.reflect.Method; -import java.util.HashMap; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.aspects.IEssentiaTransport; -import cpw.mods.fml.common.FMLLog; - -public class ThaumcraftApiHelper { - - public static AspectList cullTags(AspectList temp) { - AspectList temp2 = new AspectList(); - for (Aspect tag:temp.getAspects()) { - if (tag!=null) - temp2.add(tag, temp.getAmount(tag)); - } - while (temp2!=null && temp2.size()>10) { - Aspect lowest = null; - int low = Integer.MAX_VALUE; - for (Aspect tag:temp2.getAspects()) { - if (tag==null) continue; - if (temp2.getAmount(tag) allAspects= new HashMap(); - private static HashMap allCompoundAspects= new HashMap(); - - public static AspectList getAllAspects(int amount) { - if (allAspects.get(amount)==null) { - AspectList al = new AspectList(); - for (Aspect aspect:Aspect.aspects.values()) { - al.add(aspect, amount); - } - allAspects.put(amount, al); - } - return allAspects.get(amount); - } - - public static AspectList getAllCompoundAspects(int amount) { - if (allCompoundAspects.get(amount)==null) { - AspectList al = new AspectList(); - for (Aspect aspect:Aspect.getCompoundAspects()) { - al.add(aspect, amount); - } - allCompoundAspects.put(amount, al); - } - return allCompoundAspects.get(amount); - } - - static Method consumeVisFromWand; - /** - * Use to subtract vis from a wand for most operations - * Wands store vis differently so "real" vis costs need to be multiplied by 100 before calling this method - * @param wand the wand itemstack - * @param player the player using the wand - * @param cost the cost of the operation. - * @param doit actually subtract the vis from the wand if true - if false just simulate the result - * @param crafting is this a crafting operation or not - if - * false then things like frugal and potency will apply to the costs - * @return was the vis successfully subtracted - */ - public static boolean consumeVisFromWand(ItemStack wand, EntityPlayer player, - AspectList cost, boolean doit, boolean crafting) { - boolean ot = false; - try { - if(consumeVisFromWand == null) { - Class fake = Class.forName("thaumcraft.common.items.wands.ItemWandCasting"); - consumeVisFromWand = fake.getMethod("consumeAllVis", - ItemStack.class, EntityPlayer.class, AspectList.class, boolean.class, boolean.class); - } - ot = (Boolean) consumeVisFromWand.invoke( - consumeVisFromWand.getDeclaringClass().cast(wand.getItem()), wand, player, cost, doit, crafting); - } catch(Exception ex) { - FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.items.wands.ItemWandCasting method consumeAllVis"); - } - return ot; - } - - static Method consumeVisFromWandCrafting; - /** - * Subtract vis for use by a crafting mechanic. Costs are calculated slightly - * differently and things like the frugal enchant is ignored - * Must NOT be multiplied by 100 - send the actual vis cost - * @param wand the wand itemstack - * @param player the player using the wand - * @param cost the cost of the operation. - * @param doit actually subtract the vis from the wand if true - if false just simulate the result - * @return was the vis successfully subtracted - */ - public static boolean consumeVisFromWandCrafting(ItemStack wand, EntityPlayer player, - AspectList cost, boolean doit) { - boolean ot = false; - try { - if(consumeVisFromWandCrafting == null) { - Class fake = Class.forName("thaumcraft.common.items.wands.ItemWandCasting"); - consumeVisFromWandCrafting = fake.getMethod("consumeAllVisCrafting", - ItemStack.class, EntityPlayer.class, AspectList.class, boolean.class); - } - ot = (Boolean) consumeVisFromWandCrafting.invoke( - consumeVisFromWandCrafting.getDeclaringClass().cast(wand.getItem()), wand, player, cost, doit); - } catch(Exception ex) { - FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.items.wands.ItemWandCasting method consumeAllVisCrafting"); - } - return ot; - } - - static Method consumeVisFromInventory; - /** - * Subtract vis from a wand the player is carrying. Works like consumeVisFromWand in that actual vis - * costs should be multiplied by 100. The costs are handled like crafting however and things like - * frugal don't effect them - * @param player the player using the wand - * @param cost the cost of the operation. - * @return was the vis successfully subtracted - */ - public static boolean consumeVisFromInventory(EntityPlayer player, AspectList cost) { - boolean ot = false; - try { - if(consumeVisFromInventory == null) { - Class fake = Class.forName("thaumcraft.common.items.wands.WandManager"); - consumeVisFromInventory = fake.getMethod("consumeVisFromInventory", - EntityPlayer.class, AspectList.class); - } - ot = (Boolean) consumeVisFromInventory.invoke(null, player, cost); - } catch(Exception ex) { - FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.items.wands.WandManager method consumeVisFromInventory"); - } - return ot; - } - - - static Method addWarpToPlayer; - /** - * This adds permanents or temporary warp to a player. It will automatically be synced clientside - * @param player the player using the wand - * @param amount how much warp to add - * @param amount how much warp to add. Negative amounts are only valid for temporary warp - * @param temporary add temporary warp instead of permanent - * @param amount how much warp to add - */ - public static void addWarpToPlayer(EntityPlayer player, int amount, boolean temporary) { - boolean ot = false; - try { - if(addWarpToPlayer == null) { - Class fake = Class.forName("thaumcraft.common.Thaumcraft"); - addWarpToPlayer = fake.getMethod("addWarpToPlayer", - EntityPlayer.class, int.class, boolean.class); - } - addWarpToPlayer.invoke(null, player, amount, temporary); - } catch(Exception ex) { - FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.Thaumcraft method addWarpToPlayer"); - } - } -} diff --git a/src/api/java/thaumcraft/api/TileThaumcraft.java b/src/api/java/thaumcraft/api/TileThaumcraft.java deleted file mode 100644 index 56ccae87..00000000 --- a/src/api/java/thaumcraft/api/TileThaumcraft.java +++ /dev/null @@ -1,63 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.tileentity.TileEntity; - -/** - * - * @author azanor - * - * Custom tile entity class I use for most of my tile entities. Setup in such a way that only - * the nbt data within readCustomNBT / writeCustomNBT will be sent to the client when the tile - * updates. Apart from all the normal TE data that gets sent that is. - * - */ -public class TileThaumcraft extends TileEntity { - - //NBT stuff - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) - { - super.readFromNBT(nbttagcompound); - readCustomNBT(nbttagcompound); - } - - public void readCustomNBT(NBTTagCompound nbttagcompound) - { - //TODO - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) - { - super.writeToNBT(nbttagcompound); - writeCustomNBT(nbttagcompound); - } - - public void writeCustomNBT(NBTTagCompound nbttagcompound) - { - //TODO - } - - //Client Packet stuff - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - this.writeCustomNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, -999, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - super.onDataPacket(net, pkt); - this.readCustomNBT(pkt.func_148857_g()); - } - - - - -} diff --git a/src/api/java/thaumcraft/api/WorldCoordinates.java b/src/api/java/thaumcraft/api/WorldCoordinates.java deleted file mode 100644 index 6c620af5..00000000 --- a/src/api/java/thaumcraft/api/WorldCoordinates.java +++ /dev/null @@ -1,117 +0,0 @@ -package thaumcraft.api; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; - -public class WorldCoordinates implements Comparable -{ - public int x; - - /** the y coordinate */ - public int y; - - /** the z coordinate */ - public int z; - - public int dim; - - public WorldCoordinates() {} - - public WorldCoordinates(int par1, int par2, int par3, int d) - { - this.x = par1; - this.y = par2; - this.z = par3; - this.dim = d; - } - - public WorldCoordinates(TileEntity tile) - { - this.x = tile.xCoord; - this.y = tile.yCoord; - this.z = tile.zCoord; - this.dim = tile.getWorldObj().provider.dimensionId; - } - - public WorldCoordinates(WorldCoordinates par1ChunkCoordinates) - { - this.x = par1ChunkCoordinates.x; - this.y = par1ChunkCoordinates.y; - this.z = par1ChunkCoordinates.z; - this.dim = par1ChunkCoordinates.dim; - } - - public boolean equals(Object par1Obj) - { - if (!(par1Obj instanceof WorldCoordinates)) - { - return false; - } - else - { - WorldCoordinates coordinates = (WorldCoordinates)par1Obj; - return this.x == coordinates.x && this.y == coordinates.y && this.z == coordinates.z && this.dim == coordinates.dim ; - } - } - - public int hashCode() - { - return this.x + this.y << 8 + this.z << 16 + this.dim << 24; - } - - /** - * Compare the coordinate with another coordinate - */ - public int compareWorldCoordinate(WorldCoordinates par1) - { - return this.dim == par1.dim ? ( - this.y == par1.y ? (this.z == par1.z ? this.x - par1.x : this.z - par1.z) : this.y - par1.y) : -1; - } - - public void set(int par1, int par2, int par3, int d) - { - this.x = par1; - this.y = par2; - this.z = par3; - this.dim = d; - } - - /** - * Returns the squared distance between this coordinates and the coordinates given as argument. - */ - public float getDistanceSquared(int par1, int par2, int par3) - { - float f = (float)(this.x - par1); - float f1 = (float)(this.y - par2); - float f2 = (float)(this.z - par3); - return f * f + f1 * f1 + f2 * f2; - } - - /** - * Return the squared distance between this coordinates and the ChunkCoordinates given as argument. - */ - public float getDistanceSquaredToWorldCoordinates(WorldCoordinates par1ChunkCoordinates) - { - return this.getDistanceSquared(par1ChunkCoordinates.x, par1ChunkCoordinates.y, par1ChunkCoordinates.z); - } - - public int compareTo(Object par1Obj) - { - return this.compareWorldCoordinate((WorldCoordinates)par1Obj); - } - - public void readNBT(NBTTagCompound nbt) { - this.x = nbt.getInteger("w_x"); - this.y = nbt.getInteger("w_y"); - this.z = nbt.getInteger("w_z"); - this.dim = nbt.getInteger("w_d"); - } - - public void writeNBT(NBTTagCompound nbt) { - nbt.setInteger("w_x",x); - nbt.setInteger("w_y",y); - nbt.setInteger("w_z",z); - nbt.setInteger("w_d",dim); - } - -} diff --git a/src/api/java/thaumcraft/api/aspects/Aspect.java b/src/api/java/thaumcraft/api/aspects/Aspect.java deleted file mode 100644 index 3c33a4a7..00000000 --- a/src/api/java/thaumcraft/api/aspects/Aspect.java +++ /dev/null @@ -1,201 +0,0 @@ -package thaumcraft.api.aspects; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedHashMap; - -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; - -import org.apache.commons.lang3.text.WordUtils; - -public class Aspect { - - String tag; - Aspect[] components; - int color; - private String chatcolor; - ResourceLocation image; - int blend; - - /** - * Use this constructor to register your own aspects. - * @param tag the key that will be used to reference this aspect, as well as its latin display name - * @param color color to display the tag in - * @param components the aspects this one is formed from - * @param image ResourceLocation pointing to a 32x32 icon of the aspect - * @param blend GL11 blendmode (1 or 771). Used for rendering nodes. Default is 1 - */ - public Aspect(String tag, int color, Aspect[] components, ResourceLocation image, int blend) { - if (aspects.containsKey(tag)) throw new IllegalArgumentException(tag+" already registered!"); - this.tag = tag; - this.components = components; - this.color = color; - this.image = image; - this.blend = blend; - aspects.put(tag, this); - } - - /** - * Shortcut constructor I use for the default aspects - you shouldn't be using this. - */ - public Aspect(String tag, int color, Aspect[] components) { - this(tag,color,components,new ResourceLocation("thaumcraft","textures/aspects/"+tag.toLowerCase()+".png"),1); - } - - /** - * Shortcut constructor I use for the default aspects - you shouldn't be using this. - */ - public Aspect(String tag, int color, Aspect[] components, int blend) { - this(tag,color,components,new ResourceLocation("thaumcraft","textures/aspects/"+tag.toLowerCase()+".png"),blend); - } - - /** - * Shortcut constructor I use for the primal aspects - - * you shouldn't use this as making your own primal aspects will break all the things. - */ - public Aspect(String tag, int color, String chatcolor, int blend) { - this(tag,color,(Aspect[])null, blend); - this.setChatcolor(chatcolor); - } - - public int getColor() { - return color; - } - - public String getName() { - return WordUtils.capitalizeFully(tag); - } - - public String getLocalizedDescription() { - return StatCollector.translateToLocal("tc.aspect."+tag); - } - - public String getTag() { - return tag; - } - - public void setTag(String tag) { - this.tag = tag; - } - - public Aspect[] getComponents() { - return components; - } - - public void setComponents(Aspect[] components) { - this.components = components; - } - - public ResourceLocation getImage() { - return image; - } - - public static Aspect getAspect(String tag) { - return aspects.get(tag); - } - - public int getBlend() { - return blend; - } - - public void setBlend(int blend) { - this.blend = blend; - } - - public boolean isPrimal() { - return getComponents()==null || getComponents().length!=2; - } - - /////////////////////////////// - public static ArrayList getPrimalAspects() { - ArrayList primals = new ArrayList(); - Collection pa = aspects.values(); - for (Aspect aspect:pa) { - if (aspect.isPrimal()) primals.add(aspect); - } - return primals; - } - - public static ArrayList getCompoundAspects() { - ArrayList compounds = new ArrayList(); - Collection pa = aspects.values(); - for (Aspect aspect:pa) { - if (!aspect.isPrimal()) compounds.add(aspect); - } - return compounds; - } - - public String getChatcolor() { - return chatcolor; - } - - public void setChatcolor(String chatcolor) { - this.chatcolor = chatcolor; - } - - - /////////////////////////////// - public static LinkedHashMap aspects = new LinkedHashMap(); - - //PRIMAL - public static final Aspect AIR = new Aspect("aer",0xffff7e,"e",1); - public static final Aspect EARTH = new Aspect("terra",0x56c000,"2",1); - public static final Aspect FIRE = new Aspect("ignis",0xff5a01,"c",1); - public static final Aspect WATER = new Aspect("aqua",0x3cd4fc,"3",1); - public static final Aspect ORDER = new Aspect("ordo",0xd5d4ec,"7",1); - public static final Aspect ENTROPY = new Aspect("perditio",0x404040,"8",771); - - //SECONDARY - public static final Aspect VOID = new Aspect("vacuos",0x888888, new Aspect[] {AIR, ENTROPY},771); - public static final Aspect LIGHT = new Aspect("lux",0xfff663, new Aspect[] {AIR, FIRE}); - public static final Aspect WEATHER = new Aspect("tempestas",0xFFFFFF, new Aspect[] {AIR, WATER}); - public static final Aspect MOTION = new Aspect("motus",0xcdccf4, new Aspect[] {AIR, ORDER}); - public static final Aspect COLD = new Aspect("gelum",0xe1ffff, new Aspect[] {FIRE, ENTROPY}); - public static final Aspect CRYSTAL = new Aspect("vitreus",0x80ffff, new Aspect[] {EARTH, ORDER}); - public static final Aspect LIFE = new Aspect("victus",0xde0005, new Aspect[] {WATER, EARTH}); - public static final Aspect POISON = new Aspect("venenum",0x89f000, new Aspect[] {WATER, ENTROPY}); - public static final Aspect ENERGY = new Aspect("potentia",0xc0ffff, new Aspect[] {ORDER, FIRE}); - public static final Aspect EXCHANGE = new Aspect("permutatio",0x578357, new Aspect[] {ENTROPY, ORDER}); -// public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {AIR, EARTH}); -// public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {FIRE, EARTH}); -// public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {FIRE, WATER}); -// public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {ORDER, WATER}); -// public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {EARTH, ENTROPY}); - - //TERTIARY - public static final Aspect METAL = new Aspect("metallum",0xb5b5cd, new Aspect[] {EARTH, CRYSTAL}); - public static final Aspect DEATH = new Aspect("mortuus",0x887788, new Aspect[] {LIFE, ENTROPY}); - public static final Aspect FLIGHT = new Aspect("volatus",0xe7e7d7, new Aspect[] {AIR, MOTION}); - public static final Aspect DARKNESS = new Aspect("tenebrae",0x222222, new Aspect[] {VOID, LIGHT}); - public static final Aspect SOUL = new Aspect("spiritus",0xebebfb, new Aspect[] {LIFE, DEATH}); - public static final Aspect HEAL = new Aspect("sano",0xff2f34, new Aspect[] {LIFE, ORDER}); - public static final Aspect TRAVEL = new Aspect("iter",0xe0585b, new Aspect[] {MOTION, EARTH}); - public static final Aspect ELDRITCH = new Aspect("alienis",0x805080, new Aspect[] {VOID, DARKNESS}); - public static final Aspect MAGIC = new Aspect("praecantatio",0x9700c0, new Aspect[] {VOID, ENERGY}); - public static final Aspect AURA = new Aspect("auram",0xffc0ff, new Aspect[] {MAGIC, AIR}); - public static final Aspect TAINT = new Aspect("vitium",0x800080, new Aspect[] {MAGIC, ENTROPY}); - public static final Aspect SLIME = new Aspect("limus",0x01f800, new Aspect[] {LIFE, WATER}); - public static final Aspect PLANT = new Aspect("herba",0x01ac00, new Aspect[] {LIFE, EARTH}); - public static final Aspect TREE = new Aspect("arbor",0x876531, new Aspect[] {AIR, PLANT}); - public static final Aspect BEAST = new Aspect("bestia",0x9f6409, new Aspect[] {MOTION, LIFE}); - public static final Aspect FLESH = new Aspect("corpus",0xee478d, new Aspect[] {DEATH, BEAST}); - public static final Aspect UNDEAD = new Aspect("exanimis",0x3a4000, new Aspect[] {MOTION, DEATH}); - public static final Aspect MIND = new Aspect("cognitio",0xffc2b3, new Aspect[] {EARTH, SOUL}); - public static final Aspect SENSES = new Aspect("sensus",0x0fd9ff, new Aspect[] {AIR, SOUL}); - public static final Aspect MAN = new Aspect("humanus",0xffd7c0, new Aspect[] {BEAST, MIND}); - public static final Aspect CROP = new Aspect("messis",0xe1b371, new Aspect[] {PLANT, MAN}); - public static final Aspect MINE = new Aspect("perfodio",0xdcd2d8, new Aspect[] {MAN, EARTH}); - public static final Aspect TOOL = new Aspect("instrumentum",0x4040ee, new Aspect[] {MAN, ORDER}); - public static final Aspect HARVEST = new Aspect("meto",0xeead82, new Aspect[] {CROP, TOOL}); - public static final Aspect WEAPON = new Aspect("telum",0xc05050, new Aspect[] {TOOL, ENTROPY}); - public static final Aspect ARMOR = new Aspect("tutamen",0x00c0c0, new Aspect[] {TOOL, EARTH}); - public static final Aspect HUNGER = new Aspect("fames",0x9a0305, new Aspect[] {LIFE, VOID}); - public static final Aspect GREED = new Aspect("lucrum",0xe6be44, new Aspect[] {MAN, HUNGER}); - public static final Aspect CRAFT = new Aspect("fabrico",0x809d80, new Aspect[] {MAN, TOOL}); - public static final Aspect CLOTH = new Aspect("pannus",0xeaeac2, new Aspect[] {TOOL, BEAST}); - public static final Aspect MECHANISM = new Aspect("machina",0x8080a0, new Aspect[] {MOTION, TOOL}); - public static final Aspect TRAP = new Aspect("vinculum",0x9a8080, new Aspect[] {MOTION, ENTROPY}); - - -} diff --git a/src/api/java/thaumcraft/api/aspects/AspectList.java b/src/api/java/thaumcraft/api/aspects/AspectList.java deleted file mode 100644 index 6b9dfcef..00000000 --- a/src/api/java/thaumcraft/api/aspects/AspectList.java +++ /dev/null @@ -1,256 +0,0 @@ -package thaumcraft.api.aspects; - -import java.io.Serializable; -import java.util.LinkedHashMap; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import thaumcraft.api.ThaumcraftApiHelper; - -public class AspectList implements Serializable { - - public LinkedHashMap aspects = new LinkedHashMap();//aspects associated with this object - - - /** - * this creates a new aspect list with preloaded values based off the aspects of the given item. - * @param the itemstack of the given item - */ - public AspectList(ItemStack stack) { - try { - AspectList temp = ThaumcraftApiHelper.getObjectAspects(stack); - if (temp!=null) - for (Aspect tag:temp.getAspects()) { - add(tag,temp.getAmount(tag)); - } - } catch (Exception e) {} - } - - public AspectList() { - } - - public AspectList copy() { - AspectList out = new AspectList(); - for (Aspect a:this.getAspects()) - out.add(a, this.getAmount(a)); - return out; - } - - /** - * @return the amount of different aspects in this collection - */ - public int size() { - return aspects.size(); - } - - /** - * @return the amount of total vis in this collection - */ - public int visSize() { - int q = 0; - - for (Aspect as:aspects.keySet()) { - q+=this.getAmount(as); - } - - return q; - } - - /** - * @return an array of all the aspects in this collection - */ - public Aspect[] getAspects() { - Aspect[] q = new Aspect[1]; - return aspects.keySet().toArray(q); - } - - /** - * @return an array of all the aspects in this collection - */ - public Aspect[] getPrimalAspects() { - AspectList t = new AspectList(); - for (Aspect as:aspects.keySet()) { - if (as.isPrimal()) { - t.add(as,1); - } - } - Aspect[] q = new Aspect[1]; - return t.aspects.keySet().toArray(q); - } - - /** - * @return an array of all the aspects in this collection sorted by name - */ - public Aspect[] getAspectsSorted() { - try { - Aspect[] out = aspects.keySet().toArray(new Aspect[1]); - boolean change=false; - do { - change=false; - for(int a=0;a0) { - out[a] = e2; - out[a+1] = e1; - change = true; - break; - } - } - } while (change==true); - return out; - } catch (Exception e) { - return this.getAspects(); - } - } - - /** - * @return an array of all the aspects in this collection sorted by amount - */ - public Aspect[] getAspectsSortedAmount() { - try { - Aspect[] out = aspects.keySet().toArray(new Aspect[1]); - boolean change=false; - do { - change=false; - for(int a=0;a0 && e2>0 && e2>e1) { - Aspect ea = out[a]; - Aspect eb = out[a+1]; - out[a] = eb; - out[a+1] = ea; - change = true; - break; - } - } - } while (change==true); - return out; - } catch (Exception e) { - return this.getAspects(); - } - } - - /** - * @param key - * @return the amount associated with the given aspect in this collection - */ - public int getAmount(Aspect key) { - return aspects.get(key)==null?0:aspects.get(key); - } - - /** - * Reduces the amount of an aspect in this collection by the given amount. - * @param key - * @param amount - * @return - */ - public boolean reduce(Aspect key, int amount) { - if (getAmount(key)>=amount) { - int am = getAmount(key)-amount; - aspects.put(key, am); - return true; - } - return false; - } - - /** - * Reduces the amount of an aspect in this collection by the given amount. - * If reduced to 0 or less the aspect will be removed completely. - * @param key - * @param amount - * @return - */ - public AspectList remove(Aspect key, int amount) { - int am = getAmount(key)-amount; - if (am<=0) aspects.remove(key); else - this.aspects.put(key, am); - return this; - } - - /** - * Simply removes the aspect from the list - * @param key - * @param amount - * @return - */ - public AspectList remove(Aspect key) { - aspects.remove(key); - return this; - } - - /** - * Adds this aspect and amount to the collection. - * If the aspect exists then its value will be increased by the given amount. - * @param aspect - * @param amount - * @return - */ - public AspectList add(Aspect aspect, int amount) { - if (this.aspects.containsKey(aspect)) { - int oldamount = this.aspects.get(aspect); - amount+=oldamount; - } - this.aspects.put( aspect, amount ); - return this; - } - - - /** - * Adds this aspect and amount to the collection. - * If the aspect exists then only the highest of the old or new amount will be used. - * @param aspect - * @param amount - * @return - */ - public AspectList merge(Aspect aspect, int amount) { - if (this.aspects.containsKey(aspect)) { - int oldamount = this.aspects.get(aspect); - if (amount0?aspects:null; - } - return null; - } - - @Override - public void setAspects(ItemStack itemstack, AspectList aspects) { - if (!itemstack.hasTagCompound()) itemstack.setTagCompound(new NBTTagCompound()); - aspects.writeToNBT(itemstack.getTagCompound()); - } -*/ \ No newline at end of file diff --git a/src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java b/src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java deleted file mode 100644 index fecbc160..00000000 --- a/src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java +++ /dev/null @@ -1,100 +0,0 @@ -package thaumcraft.api.aspects; - -import net.minecraftforge.common.util.ForgeDirection; - - -/** - * @author Azanor - * This interface is used by tiles that use or transport vis. - * Only tiles that implement this interface will be able to connect to vis conduits or other thaumic devices - */ -public interface IEssentiaTransport { - /** - * Is this tile able to connect to other vis users/sources on the specified side? - * @param face - * @return - */ - public boolean isConnectable(ForgeDirection face); - - /** - * Is this side used to input essentia? - * @param face - * @return - */ - boolean canInputFrom(ForgeDirection face); - - /** - * Is this side used to output essentia? - * @param face - * @return - */ - boolean canOutputTo(ForgeDirection face); - - /** - * Sets the amount of suction this block will apply - * @param suction - */ - public void setSuction(Aspect aspect, int amount); - - /** - * Returns the type of suction this block is applying. - * @param loc - * the location from where the suction is being checked - * @return - * a return type of null indicates the suction is untyped and the first thing available will be drawn - */ - public Aspect getSuctionType(ForgeDirection face); - - /** - * Returns the strength of suction this block is applying. - * @param loc - * the location from where the suction is being checked - * @return - */ - public int getSuctionAmount(ForgeDirection face); - - /** - * remove the specified amount of essentia from this transport tile - * @return how much was actually taken - */ - public int takeEssentia(Aspect aspect, int amount, ForgeDirection face); - - /** - * add the specified amount of essentia to this transport tile - * @return how much was actually added - */ - public int addEssentia(Aspect aspect, int amount, ForgeDirection face); - - /** - * What type of essentia this contains - * @param face - * @return - */ - public Aspect getEssentiaType(ForgeDirection face); - - /** - * How much essentia this block contains - * @param face - * @return - */ - public int getEssentiaAmount(ForgeDirection face); - - - - /** - * Essentia will not be drawn from this container unless the suction exceeds this amount. - * @return the amount - */ - public int getMinimumSuction(); - - /** - * Return true if you want the conduit to extend a little further into the block. - * Used by jars and alembics that have smaller than normal hitboxes - * @return - */ - boolean renderExtendedTube(); - - - -} - diff --git a/src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java b/src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java deleted file mode 100644 index 83f6e160..00000000 --- a/src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java +++ /dev/null @@ -1,111 +0,0 @@ -package thaumcraft.api.crafting; - -import java.util.ArrayList; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; -import thaumcraft.api.ThaumcraftApiHelper; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; - -public class CrucibleRecipe { - - private ItemStack recipeOutput; - - public Object catalyst; - public AspectList aspects; - public String key; - - public int hash; - - public CrucibleRecipe(String researchKey, ItemStack result, Object cat, AspectList tags) { - recipeOutput = result; - this.aspects = tags; - this.key = researchKey; - this.catalyst = cat; - if (cat instanceof String) { - this.catalyst = OreDictionary.getOres((String) cat); - } - String hc = researchKey + result.toString(); - for (Aspect tag:tags.getAspects()) { - hc += tag.getTag()+tags.getAmount(tag); - } - if (cat instanceof ItemStack) { - hc += ((ItemStack)cat).toString(); - } else - if (cat instanceof ArrayList && ((ArrayList)catalyst).size()>0) { - for (ItemStack is :(ArrayList)catalyst) { - hc += is.toString(); - } - } - - hash = hc.hashCode(); - } - - - - public boolean matches(AspectList itags, ItemStack cat) { - if (catalyst instanceof ItemStack && - !ThaumcraftApiHelper.itemMatches((ItemStack) catalyst,cat,false)) { - return false; - } else - if (catalyst instanceof ArrayList && ((ArrayList)catalyst).size()>0) { - ItemStack[] ores = ((ArrayList)catalyst).toArray(new ItemStack[]{}); - if (!ThaumcraftApiHelper.containsMatch(false, new ItemStack[]{cat},ores)) return false; - } - if (itags==null) return false; - for (Aspect tag:aspects.getAspects()) { - if (itags.getAmount(tag))catalyst).size()>0) { - ItemStack[] ores = ((ArrayList)catalyst).toArray(new ItemStack[]{}); - if (ThaumcraftApiHelper.containsMatch(false, new ItemStack[]{cat},ores)) return true; - } - return false; - } - - public AspectList removeMatching(AspectList itags) { - AspectList temptags = new AspectList(); - temptags.aspects.putAll(itags.aspects); - - for (Aspect tag:aspects.getAspects()) { - temptags.remove(tag, aspects.getAmount(tag)); -// if (!temptags.remove(tag, aspects.getAmount(tag))) return null; - } - - itags = temptags; - return itags; - } - - public ItemStack getRecipeOutput() { - return recipeOutput; - } - - -// @Override -// public int hashCode() { -// String hash = ""; -// if (catalyst instanceof ItemStack) { -// hash += ((ItemStack)catalyst).toString(); -// } else if (catalyst instanceof ArrayList && ((ArrayList)catalyst).size()>0) { -// for (ItemStack s:(ArrayList)catalyst) { -// hash += s.toString(); -// } -// } else { -// hash += catalyst.hashCode(); -// } -// hash += getRecipeOutput().toString(); -// for (Aspect a:aspects.getAspectsSorted()) { -// hash += a.getTag() + aspects.getAmount(a); -// } -// return hash.hashCode(); -// } - -} diff --git a/src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java b/src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java deleted file mode 100644 index bb5036d2..00000000 --- a/src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java +++ /dev/null @@ -1,35 +0,0 @@ -package thaumcraft.api.crafting; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import thaumcraft.api.aspects.AspectList; - -public interface IArcaneRecipe -{ - - - /** - * Used to check if a recipe matches current crafting inventory - * @param player - */ - boolean matches(IInventory var1, World world, EntityPlayer player); - - /** - * Returns an Item that is the result of this recipe - */ - ItemStack getCraftingResult(IInventory var1); - - /** - * Returns the size of the recipe area - */ - int getRecipeSize(); - - ItemStack getRecipeOutput(); - AspectList getAspects(); - AspectList getAspects(IInventory var1); - String getResearch(); - - -} diff --git a/src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java b/src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java deleted file mode 100644 index d137ff24..00000000 --- a/src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java +++ /dev/null @@ -1,19 +0,0 @@ -package thaumcraft.api.crafting; - -import net.minecraft.world.World; - -/** - * - * @author Azanor - * - * Blocks that implement this interface act as infusion crafting stabilisers like candles and skulls - * - */ -public interface IInfusionStabiliser { - - /** - * returns true if the block can stabilise things - */ - public boolean canStabaliseInfusion(World world, int x, int y, int z); - -} diff --git a/src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java b/src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java deleted file mode 100644 index 6fb4d63d..00000000 --- a/src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java +++ /dev/null @@ -1,156 +0,0 @@ -package thaumcraft.api.crafting; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Map; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import thaumcraft.api.ThaumcraftApiHelper; -import thaumcraft.api.aspects.AspectList; - -public class InfusionEnchantmentRecipe -{ - - public AspectList aspects; - public String research; - public ItemStack[] components; - public Enchantment enchantment; - public int recipeXP; - public int instability; - - public InfusionEnchantmentRecipe(String research, Enchantment input, int inst, - AspectList aspects2, ItemStack[] recipe) { - this.research = research; - this.enchantment = input; - this.aspects = aspects2; - this.components = recipe; - this.instability = inst; - this.recipeXP = Math.max(1, input.getMinEnchantability(1)/3); - } - - /** - * Used to check if a recipe matches current crafting inventory - * @param player - */ - public boolean matches(ArrayList input, ItemStack central, World world, EntityPlayer player) { - if (research.length()>0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research)) { - return false; - } - - if (!enchantment.canApply(central) || !central.getItem().isItemTool(central)) { - return false; - } - - Map map1 = EnchantmentHelper.getEnchantments(central); - Iterator iterator = map1.keySet().iterator(); - while (iterator.hasNext()) - { - int j1 = ((Integer)iterator.next()).intValue(); - Enchantment ench = Enchantment.enchantmentsList[j1]; - if (j1 == enchantment.effectId && - EnchantmentHelper.getEnchantmentLevel(j1, central)>=ench.getMaxLevel()) - return false; - if (enchantment.effectId != ench.effectId && - (!enchantment.canApplyTogether(ench) || - !ench.canApplyTogether(enchantment))) { - return false; - } - } - - ItemStack i2 = null; - - ArrayList ii = new ArrayList(); - for (ItemStack is:input) { - ii.add(is.copy()); - } - - for (ItemStack comp:components) { - boolean b=false; - for (int a=0;a stack0.getMaxStackSize() ? false : t1)); - } - - - public Enchantment getEnchantment() { - return enchantment; - - } - - public AspectList getAspects() { - return aspects; - - } - - public String getResearch() { - return research; - - } - - public int calcInstability(ItemStack recipeInput) { - int i = 0; - Map map1 = EnchantmentHelper.getEnchantments(recipeInput); - Iterator iterator = map1.keySet().iterator(); - while (iterator.hasNext()) - { - int j1 = ((Integer)iterator.next()).intValue(); - i += EnchantmentHelper.getEnchantmentLevel(j1, recipeInput); - } - return (i/2) + instability; - } - - public int calcXP(ItemStack recipeInput) { - return recipeXP * (1+EnchantmentHelper.getEnchantmentLevel(enchantment.effectId, recipeInput)); - } - - public float getEssentiaMod(ItemStack recipeInput) { - float mod = EnchantmentHelper.getEnchantmentLevel(enchantment.effectId, recipeInput); - Map map1 = EnchantmentHelper.getEnchantments(recipeInput); - Iterator iterator = map1.keySet().iterator(); - while (iterator.hasNext()) - { - int j1 = ((Integer)iterator.next()).intValue(); - if (j1 != enchantment.effectId) - mod += EnchantmentHelper.getEnchantmentLevel(j1, recipeInput) * .1f; - } - return mod; - } - -} diff --git a/src/api/java/thaumcraft/api/crafting/InfusionRecipe.java b/src/api/java/thaumcraft/api/crafting/InfusionRecipe.java deleted file mode 100644 index fef0a347..00000000 --- a/src/api/java/thaumcraft/api/crafting/InfusionRecipe.java +++ /dev/null @@ -1,128 +0,0 @@ -package thaumcraft.api.crafting; - -import java.util.ArrayList; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import thaumcraft.api.ThaumcraftApiHelper; -import thaumcraft.api.aspects.AspectList; - -public class InfusionRecipe -{ - protected AspectList aspects; - protected String research; - private ItemStack[] components; - private ItemStack recipeInput; - protected Object recipeOutput; - protected int instability; - - public InfusionRecipe(String research, Object output, int inst, - AspectList aspects2, ItemStack input, ItemStack[] recipe) { - this.research = research; - this.recipeOutput = output; - this.recipeInput = input; - this.aspects = aspects2; - this.components = recipe; - this.instability = inst; - } - - /** - * Used to check if a recipe matches current crafting inventory - * @param player - */ - public boolean matches(ArrayList input, ItemStack central, World world, EntityPlayer player) { - if (getRecipeInput()==null) return false; - - if (research.length()>0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research)) { - return false; - } - - ItemStack i2 = central.copy(); - if (getRecipeInput().getItemDamage()==OreDictionary.WILDCARD_VALUE) { - i2.setItemDamage(OreDictionary.WILDCARD_VALUE); - } - - if (!areItemStacksEqual(i2, getRecipeInput(), true)) return false; - - ArrayList ii = new ArrayList(); - for (ItemStack is:input) { - ii.add(is.copy()); - } - - for (ItemStack comp:getComponents()) { - boolean b=false; - for (int a=0;a stack0.getMaxStackSize() ? false : t1)); - } - - - public Object getRecipeOutput() { - return getRecipeOutput(this.getRecipeInput()); - } - - public AspectList getAspects() { - return getAspects(this.getRecipeInput()); - } - - public int getInstability() { - return getInstability(this.getRecipeInput()); - } - - public String getResearch() { - return research; - } - - public ItemStack getRecipeInput() { - return recipeInput; - } - - public ItemStack[] getComponents() { - return components; - } - - public Object getRecipeOutput(ItemStack input) { - return recipeOutput; - } - - public AspectList getAspects(ItemStack input) { - return aspects; - } - - public int getInstability(ItemStack input) { - return instability; - } -} diff --git a/src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java b/src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java deleted file mode 100644 index 40c7bc27..00000000 --- a/src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java +++ /dev/null @@ -1,261 +0,0 @@ -package thaumcraft.api.crafting; - -import java.util.ArrayList; -import java.util.HashMap; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import thaumcraft.api.ThaumcraftApiHelper; -import thaumcraft.api.aspects.AspectList; - -public class ShapedArcaneRecipe implements IArcaneRecipe -{ - //Added in for future ease of change, but hard coded for now. - private static final int MAX_CRAFT_GRID_WIDTH = 3; - private static final int MAX_CRAFT_GRID_HEIGHT = 3; - - public ItemStack output = null; - public Object[] input = null; - public AspectList aspects = null; - public String research; - public int width = 0; - public int height = 0; - private boolean mirrored = true; - - public ShapedArcaneRecipe(String research, Block result, AspectList aspects, Object... recipe){ this(research, new ItemStack(result), aspects, recipe); } - public ShapedArcaneRecipe(String research, Item result, AspectList aspects, Object... recipe){ this(research, new ItemStack(result), aspects, recipe); } - public ShapedArcaneRecipe(String research, ItemStack result, AspectList aspects, Object... recipe) - { - output = result.copy(); - this.research = research; - this.aspects = aspects; - String shape = ""; - - int idx = 0; - - if (recipe[idx] instanceof Boolean) - { - mirrored = (Boolean)recipe[idx]; - if (recipe[idx+1] instanceof Object[]) - { - recipe = (Object[])recipe[idx+1]; - } - else - { - idx = 1; - } - } - - if (recipe[idx] instanceof String[]) - { - String[] parts = ((String[])recipe[idx++]); - - for (String s : parts) - { - width = s.length(); - shape += s; - } - - height = parts.length; - } - else - { - while (recipe[idx] instanceof String) - { - String s = (String)recipe[idx++]; - shape += s; - width = s.length(); - height++; - } - } - - if (width * height != shape.length()) - { - String ret = "Invalid shaped ore recipe: "; - for (Object tmp : recipe) - { - ret += tmp + ", "; - } - ret += output; - throw new RuntimeException(ret); - } - - HashMap itemMap = new HashMap(); - - for (; idx < recipe.length; idx += 2) - { - Character chr = (Character)recipe[idx]; - Object in = recipe[idx + 1]; - - if (in instanceof ItemStack) - { - itemMap.put(chr, ((ItemStack)in).copy()); - } - else if (in instanceof Item) - { - itemMap.put(chr, new ItemStack((Item)in)); - } - else if (in instanceof Block) - { - itemMap.put(chr, new ItemStack((Block)in, 1, OreDictionary.WILDCARD_VALUE)); - } - else if (in instanceof String) - { - itemMap.put(chr, OreDictionary.getOres((String)in)); - } - else - { - String ret = "Invalid shaped ore recipe: "; - for (Object tmp : recipe) - { - ret += tmp + ", "; - } - ret += output; - throw new RuntimeException(ret); - } - } - - input = new Object[width * height]; - int x = 0; - for (char chr : shape.toCharArray()) - { - input[x++] = itemMap.get(chr); - } - } - - @Override - public ItemStack getCraftingResult(IInventory var1){ return output.copy(); } - - @Override - public int getRecipeSize(){ return input.length; } - - @Override - public ItemStack getRecipeOutput(){ return output; } - - @Override - public boolean matches(IInventory inv, World world, EntityPlayer player) - { - if (research.length()>0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research)) { - return false; - } - for (int x = 0; x <= MAX_CRAFT_GRID_WIDTH - width; x++) - { - for (int y = 0; y <= MAX_CRAFT_GRID_HEIGHT - height; ++y) - { - if (checkMatch(inv, x, y, false)) - { - return true; - } - - if (mirrored && checkMatch(inv, x, y, true)) - { - return true; - } - } - } - - return false; - } - - private boolean checkMatch(IInventory inv, int startX, int startY, boolean mirror) - { - for (int x = 0; x < MAX_CRAFT_GRID_WIDTH; x++) - { - for (int y = 0; y < MAX_CRAFT_GRID_HEIGHT; y++) - { - int subX = x - startX; - int subY = y - startY; - Object target = null; - - if (subX >= 0 && subY >= 0 && subX < width && subY < height) - { - if (mirror) - { - target = input[width - subX - 1 + subY * width]; - } - else - { - target = input[subX + subY * width]; - } - } - - ItemStack slot = ThaumcraftApiHelper.getStackInRowAndColumn(inv, x, y); - - if (target instanceof ItemStack) - { - if (!checkItemEquals((ItemStack)target, slot)) - { - return false; - } - } - else if (target instanceof ArrayList) - { - boolean matched = false; - - for (ItemStack item : (ArrayList)target) - { - matched = matched || checkItemEquals(item, slot); - } - - if (!matched) - { - return false; - } - } - else if (target == null && slot != null) - { - return false; - } - } - } - - return true; - } - - private boolean checkItemEquals(ItemStack target, ItemStack input) - { - if (input == null && target != null || input != null && target == null) - { - return false; - } - return (target.getItem() == input.getItem() && - (!target.hasTagCompound() || ItemStack.areItemStackTagsEqual(target, input)) && - (target.getItemDamage() == OreDictionary.WILDCARD_VALUE|| target.getItemDamage() == input.getItemDamage())); - } - - public ShapedArcaneRecipe setMirrored(boolean mirror) - { - mirrored = mirror; - return this; - } - - /** - * Returns the input for this recipe, any mod accessing this value should never - * manipulate the values in this array as it will effect the recipe itself. - * @return The recipes input vales. - */ - public Object[] getInput() - { - return this.input; - } - - @Override - public AspectList getAspects() { - return aspects; - } - - @Override - public AspectList getAspects(IInventory inv) { - return aspects; - } - - @Override - public String getResearch() { - return research; - } -} diff --git a/src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java b/src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java deleted file mode 100644 index 3d4ed508..00000000 --- a/src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java +++ /dev/null @@ -1,157 +0,0 @@ -package thaumcraft.api.crafting; - -import java.util.ArrayList; -import java.util.Iterator; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import thaumcraft.api.ThaumcraftApiHelper; -import thaumcraft.api.aspects.AspectList; - -public class ShapelessArcaneRecipe implements IArcaneRecipe -{ - private ItemStack output = null; - private ArrayList input = new ArrayList(); - - public AspectList aspects = null; - public String research; - - public ShapelessArcaneRecipe(String research, Block result, AspectList aspects, Object... recipe){ this(research,new ItemStack(result),aspects, recipe); } - public ShapelessArcaneRecipe(String research, Item result, AspectList aspects, Object... recipe){ this(research,new ItemStack(result),aspects, recipe); } - - public ShapelessArcaneRecipe(String research, ItemStack result, AspectList aspects, Object... recipe) - { - output = result.copy(); - this.research = research; - this.aspects = aspects; - for (Object in : recipe) - { - if (in instanceof ItemStack) - { - input.add(((ItemStack)in).copy()); - } - else if (in instanceof Item) - { - input.add(new ItemStack((Item)in)); - } - else if (in instanceof Block) - { - input.add(new ItemStack((Block)in)); - } - else if (in instanceof String) - { - input.add(OreDictionary.getOres((String)in)); - } - else - { - String ret = "Invalid shapeless ore recipe: "; - for (Object tmp : recipe) - { - ret += tmp + ", "; - } - ret += output; - throw new RuntimeException(ret); - } - } - } - - @Override - public int getRecipeSize(){ return input.size(); } - - @Override - public ItemStack getRecipeOutput(){ return output; } - - @Override - public ItemStack getCraftingResult(IInventory var1){ return output.copy(); } - - @Override - public boolean matches(IInventory var1, World world, EntityPlayer player) - { - if (research.length()>0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research)) { - return false; - } - - ArrayList required = new ArrayList(input); - - for (int x = 0; x < 9; x++) - { - ItemStack slot = var1.getStackInSlot(x); - - if (slot != null) - { - boolean inRecipe = false; - Iterator req = required.iterator(); - - while (req.hasNext()) - { - boolean match = false; - - Object next = req.next(); - - if (next instanceof ItemStack) - { - match = checkItemEquals((ItemStack)next, slot); - } - else if (next instanceof ArrayList) - { - for (ItemStack item : (ArrayList)next) - { - match = match || checkItemEquals(item, slot); - } - } - - if (match) - { - inRecipe = true; - required.remove(next); - break; - } - } - - if (!inRecipe) - { - return false; - } - } - } - - return required.isEmpty(); - } - - private boolean checkItemEquals(ItemStack target, ItemStack input) - { - return (target.getItem() == input.getItem() && - (!target.hasTagCompound() || ItemStack.areItemStackTagsEqual(target, input)) && - (target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage())); - } - - /** - * Returns the input for this recipe, any mod accessing this value should never - * manipulate the values in this array as it will effect the recipe itself. - * @return The recipes input vales. - */ - public ArrayList getInput() - { - return this.input; - } - - @Override - public AspectList getAspects() { - return aspects; - } - - @Override - public AspectList getAspects(IInventory inv) { - return aspects; - } - - @Override - public String getResearch() { - return research; - } -} diff --git a/src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java b/src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java deleted file mode 100644 index 1562d052..00000000 --- a/src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java +++ /dev/null @@ -1,32 +0,0 @@ -package thaumcraft.api.damagesource; - -import net.minecraft.entity.Entity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSourceIndirect; - -public class DamageSourceIndirectThaumcraftEntity extends EntityDamageSourceIndirect { - - private boolean fireDamage; - private float hungerDamage; - private boolean isUnblockable; - - - public DamageSourceIndirectThaumcraftEntity(String par1Str, - Entity par2Entity, Entity par3Entity) { - super(par1Str, par2Entity, par3Entity); - } - - - public DamageSource setFireDamage() - { - this.fireDamage = true; - return this; - } - - public DamageSource setDamageBypassesArmor() - { - this.isUnblockable = true; - this.hungerDamage = 0.0F; - return this; - } -} diff --git a/src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java b/src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java deleted file mode 100644 index bb55672b..00000000 --- a/src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java +++ /dev/null @@ -1,47 +0,0 @@ -package thaumcraft.api.damagesource; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSource; - -public class DamageSourceThaumcraft extends DamageSource -{ - - public static DamageSource taint = new DamageSourceThaumcraft("taint").setDamageBypassesArmor().setMagicDamage(); - public static DamageSource tentacle = new DamageSourceThaumcraft("tentacle"); - public static DamageSource swarm = new DamageSourceThaumcraft("swarm"); - public static DamageSource dissolve = new DamageSourceThaumcraft("dissolve").setDamageBypassesArmor(); - - protected DamageSourceThaumcraft(String par1Str) { - super(par1Str); - } - - /** This kind of damage can be blocked or not. */ - private boolean isUnblockable = false; - private boolean isDamageAllowedInCreativeMode = false; - private float hungerDamage = 0.3F; - - /** This kind of damage is based on fire or not. */ - private boolean fireDamage; - - /** This kind of damage is based on a projectile or not. */ - private boolean projectile; - - /** - * Whether this damage source will have its damage amount scaled based on the current difficulty. - */ - private boolean difficultyScaled; - private boolean magicDamage = false; - private boolean explosion = false; - - public static DamageSource causeSwarmDamage(EntityLivingBase par0EntityLiving) - { - return new EntityDamageSource("swarm", par0EntityLiving); - } - - public static DamageSource causeTentacleDamage(EntityLivingBase par0EntityLiving) - { - return new EntityDamageSource("tentacle", par0EntityLiving); - } - -} diff --git a/src/api/java/thaumcraft/api/entities/ITaintedMob.java b/src/api/java/thaumcraft/api/entities/ITaintedMob.java deleted file mode 100644 index 83fb1fcb..00000000 --- a/src/api/java/thaumcraft/api/entities/ITaintedMob.java +++ /dev/null @@ -1,5 +0,0 @@ -package thaumcraft.api.entities; - -public interface ITaintedMob { - -} diff --git a/src/api/java/thaumcraft/api/nodes/INode.java b/src/api/java/thaumcraft/api/nodes/INode.java deleted file mode 100644 index 8c71414d..00000000 --- a/src/api/java/thaumcraft/api/nodes/INode.java +++ /dev/null @@ -1,53 +0,0 @@ -package thaumcraft.api.nodes; - -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.aspects.IAspectContainer; - -public interface INode extends IAspectContainer { - - /** - * Unique identifier to distinguish nodes. Normal node id's are based on world id and coordinates - * @return - */ - public String getId(); - - public AspectList getAspectsBase(); - - /** - * Return the type of node - * @return - */ - public NodeType getNodeType(); - - /** - * Set the type of node - * @return - */ - public void setNodeType(NodeType nodeType); - - /** - * Return the node modifier - * @return - */ - public void setNodeModifier(NodeModifier nodeModifier); - - /** - * Set the node modifier - * @return - */ - public NodeModifier getNodeModifier(); - - /** - * Return the maximum capacity of each aspect the node can hold - * @return - */ - public int getNodeVisBase(Aspect aspect); - - /** - * Set the maximum capacity of each aspect the node can hold - * @return - */ - public void setNodeVisBase(Aspect aspect, short nodeVisBase); - -} diff --git a/src/api/java/thaumcraft/api/nodes/IRevealer.java b/src/api/java/thaumcraft/api/nodes/IRevealer.java deleted file mode 100644 index 14a19b54..00000000 --- a/src/api/java/thaumcraft/api/nodes/IRevealer.java +++ /dev/null @@ -1,22 +0,0 @@ -package thaumcraft.api.nodes; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -/** - * - * @author Azanor - * - * Equipped head slot items that extend this class will make nodes visible in world. - * - */ - -public interface IRevealer { - - /* - * If this method returns true the nodes will be visible. - */ - public boolean showNodes(ItemStack itemstack, EntityLivingBase player); - - -} diff --git a/src/api/java/thaumcraft/api/nodes/NodeModifier.java b/src/api/java/thaumcraft/api/nodes/NodeModifier.java deleted file mode 100644 index 885b8678..00000000 --- a/src/api/java/thaumcraft/api/nodes/NodeModifier.java +++ /dev/null @@ -1,6 +0,0 @@ -package thaumcraft.api.nodes; - -public enum NodeModifier -{ - BRIGHT, PALE, FADING -} \ No newline at end of file diff --git a/src/api/java/thaumcraft/api/nodes/NodeType.java b/src/api/java/thaumcraft/api/nodes/NodeType.java deleted file mode 100644 index 355324b5..00000000 --- a/src/api/java/thaumcraft/api/nodes/NodeType.java +++ /dev/null @@ -1,6 +0,0 @@ -package thaumcraft.api.nodes; - -public enum NodeType -{ - NORMAL, UNSTABLE, DARK, TAINTED, HUNGRY, PURE -} \ No newline at end of file diff --git a/src/api/java/thaumcraft/api/potions/PotionFluxTaint.java b/src/api/java/thaumcraft/api/potions/PotionFluxTaint.java deleted file mode 100644 index b950de0e..00000000 --- a/src/api/java/thaumcraft/api/potions/PotionFluxTaint.java +++ /dev/null @@ -1,67 +0,0 @@ -package thaumcraft.api.potions; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.util.ResourceLocation; -import thaumcraft.api.damagesource.DamageSourceThaumcraft; -import thaumcraft.api.entities.ITaintedMob; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class PotionFluxTaint extends Potion -{ - public static PotionFluxTaint instance = null; // will be instantiated at runtime - private int statusIconIndex = -1; - - public PotionFluxTaint(int par1, boolean par2, int par3) - { - super(par1,par2,par3); - setIconIndex(0, 0); - } - - public static void init() - { - instance.setPotionName("potion.fluxtaint"); - instance.setIconIndex(3, 1); - instance.setEffectiveness(0.25D); - } - - @Override - public boolean isBadEffect() { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public int getStatusIconIndex() { - Minecraft.getMinecraft().renderEngine.bindTexture(rl); - return super.getStatusIconIndex(); - } - - static final ResourceLocation rl = new ResourceLocation("thaumcraft","textures/misc/potions.png"); - - @Override - public void performEffect(EntityLivingBase target, int par2) { - if (target instanceof ITaintedMob) { - target.heal(1); - } else - if (!target.isEntityUndead() && !(target instanceof EntityPlayer)) - { - target.attackEntityFrom(DamageSourceThaumcraft.taint, 1); - } - else - if (!target.isEntityUndead() && (target.getMaxHealth() > 1 || (target instanceof EntityPlayer))) - { - target.attackEntityFrom(DamageSourceThaumcraft.taint, 1); - } - } - - public boolean isReady(int par1, int par2) - { - int k = 40 >> par2; - return k > 0 ? par1 % k == 0 : true; - } - -} diff --git a/src/api/java/thaumcraft/api/potions/PotionVisExhaust.java b/src/api/java/thaumcraft/api/potions/PotionVisExhaust.java deleted file mode 100644 index cd7fc18c..00000000 --- a/src/api/java/thaumcraft/api/potions/PotionVisExhaust.java +++ /dev/null @@ -1,48 +0,0 @@ -package thaumcraft.api.potions; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.Potion; -import net.minecraft.util.ResourceLocation; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class PotionVisExhaust extends Potion -{ - public static PotionVisExhaust instance = null; // will be instantiated at runtime - private int statusIconIndex = -1; - - public PotionVisExhaust(int par1, boolean par2, int par3) - { - super(par1,par2,par3); - setIconIndex(0, 0); - } - - public static void init() - { - instance.setPotionName("potion.visexhaust"); - instance.setIconIndex(5, 1); - instance.setEffectiveness(0.25D); - } - - @Override - public boolean isBadEffect() { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public int getStatusIconIndex() { - Minecraft.getMinecraft().renderEngine.bindTexture(rl); - return super.getStatusIconIndex(); - } - - static final ResourceLocation rl = new ResourceLocation("thaumcraft","textures/misc/potions.png"); - - @Override - public void performEffect(EntityLivingBase target, int par2) { - - } - - -} diff --git a/src/api/java/thaumcraft/api/research/IScanEventHandler.java b/src/api/java/thaumcraft/api/research/IScanEventHandler.java deleted file mode 100644 index d0efac5f..00000000 --- a/src/api/java/thaumcraft/api/research/IScanEventHandler.java +++ /dev/null @@ -1,9 +0,0 @@ -package thaumcraft.api.research; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IScanEventHandler { - ScanResult scanPhenomena(ItemStack stack, World world, EntityPlayer player); -} diff --git a/src/api/java/thaumcraft/api/research/ResearchCategories.java b/src/api/java/thaumcraft/api/research/ResearchCategories.java deleted file mode 100644 index 82309b36..00000000 --- a/src/api/java/thaumcraft/api/research/ResearchCategories.java +++ /dev/null @@ -1,101 +0,0 @@ -package thaumcraft.api.research; - -import java.util.Collection; -import java.util.LinkedHashMap; - -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; - -import org.apache.logging.log4j.Level; - -import cpw.mods.fml.common.FMLLog; - -public class ResearchCategories { - - //Research - public static LinkedHashMap researchCategories = new LinkedHashMap (); - - /** - * @param key - * @return the research item linked to this key - */ - public static ResearchCategoryList getResearchList(String key) { - return researchCategories.get(key); - } - - /** - * @param key - * @return the name of the research category linked to this key. - * Must be stored as localization information in the LanguageRegistry. - */ - public static String getCategoryName(String key) { - return StatCollector.translateToLocal("tc.research_category."+key); - } - - /** - * @param key the research key - * @return the ResearchItem object. - */ - public static ResearchItem getResearch(String key) { - Collection rc = researchCategories.values(); - for (Object cat:rc) { - Collection rl = ((ResearchCategoryList)cat).research.values(); - for (Object ri:rl) { - if ((((ResearchItem)ri).key).equals(key)) return (ResearchItem)ri; - } - } - return null; - } - - /** - * This should only be done at the PostInit stage - * @param key the key used for this category - * @param icon the icon to be used for the research category tab - * @param background the resource location of the background image to use for this category - * @return the name of the research linked to this key - */ - public static void registerCategory(String key, ResourceLocation icon, ResourceLocation background) { - if (getResearchList(key)==null) { - ResearchCategoryList rl = new ResearchCategoryList(icon, background); - researchCategories.put(key, rl); - } - } - - public static void addResearch(ResearchItem ri) { - ResearchCategoryList rl = getResearchList(ri.category); - if (rl!=null && !rl.research.containsKey(ri.key)) { - - if (!ri.isVirtual()) { - for (ResearchItem rr:rl.research.values()) { - if (rr.displayColumn == ri.displayColumn && rr.displayRow == ri.displayRow) { - FMLLog.log(Level.FATAL, "[Thaumcraft] Research ["+ri.getName()+"] not added as it overlaps with existing research ["+rr.getName()+"]"); - return; - } - } - } - - - rl.research.put(ri.key, ri); - - if (ri.displayColumn < rl.minDisplayColumn) - { - rl.minDisplayColumn = ri.displayColumn; - } - - if (ri.displayRow < rl.minDisplayRow) - { - rl.minDisplayRow = ri.displayRow; - } - - if (ri.displayColumn > rl.maxDisplayColumn) - { - rl.maxDisplayColumn = ri.displayColumn; - } - - if (ri.displayRow > rl.maxDisplayRow) - { - rl.maxDisplayRow = ri.displayRow; - } - } - } -} diff --git a/src/api/java/thaumcraft/api/research/ResearchCategoryList.java b/src/api/java/thaumcraft/api/research/ResearchCategoryList.java deleted file mode 100644 index 7eed0101..00000000 --- a/src/api/java/thaumcraft/api/research/ResearchCategoryList.java +++ /dev/null @@ -1,37 +0,0 @@ -package thaumcraft.api.research; - -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.util.ResourceLocation; - -public class ResearchCategoryList { - - /** Is the smallest column used on the GUI. */ - public int minDisplayColumn; - - /** Is the smallest row used on the GUI. */ - public int minDisplayRow; - - /** Is the biggest column used on the GUI. */ - public int maxDisplayColumn; - - /** Is the biggest row used on the GUI. */ - public int maxDisplayRow; - - /** display variables **/ - public ResourceLocation icon; - public ResourceLocation background; - - public ResearchCategoryList(ResourceLocation icon, ResourceLocation background) { - this.icon = icon; - this.background = background; - } - - //Research - public Map research = new HashMap(); - - - - -} diff --git a/src/api/java/thaumcraft/api/research/ResearchItem.java b/src/api/java/thaumcraft/api/research/ResearchItem.java deleted file mode 100644 index 55b3820c..00000000 --- a/src/api/java/thaumcraft/api/research/ResearchItem.java +++ /dev/null @@ -1,367 +0,0 @@ -package thaumcraft.api.research; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; - -public class ResearchItem -{ - /** - * A short string used as a key for this research. Must be unique - */ - public final String key; - - /** - * A short string used as a reference to the research category to which this must be added. - */ - public final String category; - - /** - * The aspect tags and their values required to complete this research - */ - public final AspectList tags; - - /** - * This links to any research that needs to be completed before this research can be discovered or learnt. - */ - public String[] parents = null; - - /** - * Like parent above, but a line will not be displayed in the thaumonomicon linking them. Just used to prevent clutter. - */ - public String[] parentsHidden = null; - /** - * any research linked to this that will be unlocked automatically when this research is complete - */ - public String[] siblings = null; - - /** - * the horizontal position of the research icon - */ - public final int displayColumn; - - /** - * the vertical position of the research icon - */ - public final int displayRow; - - /** - * the icon to be used for this research - */ - public final ItemStack icon_item; - - /** - * the icon to be used for this research - */ - public final ResourceLocation icon_resource; - - /** - * How large the research grid is. Valid values are 1 to 3. - */ - private int complexity; - - /** - * Special research has a spiky border. Used for important research milestones. - */ - private boolean isSpecial; - - /** - * Research that can be directly purchased with RP in normal research difficulty. - */ - private boolean isSecondary; - - /** - * This indicates if the research should use a circular icon border. Usually used for "passive" research - * that doesn't have recipes and grants passive effects, or that unlock automatically. - */ - private boolean isRound; - - /** - * Stub research cannot be discovered by normal means, but can be unlocked via the sibling system. - */ - private boolean isStub; - - /** - * This indicated that the research is completely hidden and cannot be discovered by any - * player-controlled means. The recipes will never show up in the thaumonomicon. - * Usually used to unlock "hidden" recipes via sibling unlocking, like - * the various cap and rod combos for wands. - */ - private boolean isVirtual; - - @Deprecated - private boolean isLost; - - /** - * Concealed research does not display in the thaumonomicon until parent researches are discovered. - */ - private boolean isConcealed; - - /** - * Hidden research can only be discovered via scanning or knowledge fragments - */ - private boolean isHidden; - - /** - * These research items will automatically unlock for all players on game start - */ - private boolean isAutoUnlock; - - /** - * Scanning these items will have a chance of revealing hidden knowledge in the thaumonomicon - */ - private ItemStack[] itemTriggers; - - /** - * Scanning these entities will have a chance of revealing hidden knowledge in the thaumonomicon - */ - private String[] entityTriggers; - - /** - * Scanning things with these aspects will have a chance of revealing hidden knowledge in the thaumonomicon - */ - private Aspect[] aspectTriggers; - - private ResearchPage[] pages = null; - - public ResearchItem(String key, String category) - { - this.key = key; - this.category = category; - this.tags = new AspectList(); - this.icon_resource = null; - this.icon_item = null; - this.displayColumn = 0; - this.displayRow = 0; - this.setVirtual(); - - } - - public ResearchItem(String key, String category, AspectList tags, int col, int row, int complex, ResourceLocation icon) - { - this.key = key; - this.category = category; - this.tags = tags; - this.icon_resource = icon; - this.icon_item = null; - this.displayColumn = col; - this.displayRow = row; - this.complexity = complex; - if (complexity < 1) this.complexity = 1; - if (complexity > 3) this.complexity = 3; - } - - public ResearchItem(String key, String category, AspectList tags, int col, int row, int complex, ItemStack icon) - { - this.key = key; - this.category = category; - this.tags = tags; - this.icon_item = icon; - this.icon_resource = null; - this.displayColumn = col; - this.displayRow = row; - this.complexity = complex; - if (complexity < 1) this.complexity = 1; - if (complexity > 3) this.complexity = 3; - } - - public ResearchItem setSpecial() - { - this.isSpecial = true; - return this; - } - - public ResearchItem setStub() - { - this.isStub = true; - return this; - } - - @Deprecated - public ResearchItem setLost() - { - this.isLost = true; - return this; - } - - public ResearchItem setConcealed() - { - this.isConcealed = true; - return this; - } - - public ResearchItem setHidden() - { - this.isHidden = true; - return this; - } - - public ResearchItem setVirtual() - { - this.isVirtual = true; - return this; - } - - public ResearchItem setParents(String... par) - { - this.parents = par; - return this; - } - - - - public ResearchItem setParentsHidden(String... par) - { - this.parentsHidden = par; - return this; - } - - public ResearchItem setSiblings(String... sib) - { - this.siblings = sib; - return this; - } - - public ResearchItem setPages(ResearchPage... par) - { - this.pages = par; - return this; - } - - public ResearchPage[] getPages() { - return pages; - } - - public ResearchItem setItemTriggers(ItemStack... par) - { - this.itemTriggers = par; - return this; - } - - public ResearchItem setEntityTriggers(String... par) - { - this.entityTriggers = par; - return this; - } - - public ResearchItem setAspectTriggers(Aspect... par) - { - this.aspectTriggers = par; - return this; - } - - public ItemStack[] getItemTriggers() { - return itemTriggers; - } - - public String[] getEntityTriggers() { - return entityTriggers; - } - - public Aspect[] getAspectTriggers() { - return aspectTriggers; - } - - public ResearchItem registerResearchItem() - { - ResearchCategories.addResearch(this); - return this; - } - - public String getName() - { - return StatCollector.translateToLocal("tc.research_name."+key); - } - - public String getText() - { - return StatCollector.translateToLocal("tc.research_text."+key); - } - - public boolean isSpecial() - { - return this.isSpecial; - } - - public boolean isStub() - { - return this.isStub; - } - - @Deprecated - public boolean isLost() - { - return this.isLost; - } - - public boolean isConcealed() - { - return this.isConcealed; - } - - public boolean isHidden() - { - return this.isHidden; - } - - public boolean isVirtual() - { - return this.isVirtual; - } - - public boolean isAutoUnlock() { - return isAutoUnlock; - } - - public ResearchItem setAutoUnlock() - { - this.isAutoUnlock = true; - return this; - } - - public boolean isRound() { - return isRound; - } - - public ResearchItem setRound() { - this.isRound = true; - return this; - } - - public boolean isSecondary() { - return isSecondary; - } - - public ResearchItem setSecondary() { - this.isSecondary = true; - return this; - } - - public int getComplexity() { - return complexity; - } - - public ResearchItem setComplexity(int complexity) { - this.complexity = complexity; - return this; - } - - /** - * @return the aspect aspects ordinal with the highest value. Used to determine scroll color and similar things - */ - public Aspect getResearchPrimaryTag() { - Aspect aspect=null; - int highest=0; - if (tags!=null) - for (Aspect tag:tags.getAspects()) { - if (tags.getAmount(tag)>highest) { - aspect=tag; - highest=tags.getAmount(tag); - }; - } - return aspect; - } - -} diff --git a/src/api/java/thaumcraft/api/research/ResearchPage.java b/src/api/java/thaumcraft/api/research/ResearchPage.java deleted file mode 100644 index fdada843..00000000 --- a/src/api/java/thaumcraft/api/research/ResearchPage.java +++ /dev/null @@ -1,193 +0,0 @@ -package thaumcraft.api.research; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.crafting.CrucibleRecipe; -import thaumcraft.api.crafting.IArcaneRecipe; -import thaumcraft.api.crafting.InfusionEnchantmentRecipe; -import thaumcraft.api.crafting.InfusionRecipe; - -public class ResearchPage { - public static enum PageType - { - TEXT, - TEXT_CONCEALED, - IMAGE, - CRUCIBLE_CRAFTING, - ARCANE_CRAFTING, - ASPECTS, - NORMAL_CRAFTING, - INFUSION_CRAFTING, - COMPOUND_CRAFTING, - INFUSION_ENCHANTMENT, - SMELTING - } - - public PageType type = PageType.TEXT; - - public String text=null; - public String research=null; - public ResourceLocation image=null; - public AspectList aspects=null; - public Object recipe=null; - public ItemStack recipeOutput=null; - - /** - * @param text this can (but does not have to) be a reference to a localization variable, not the actual text. - */ - public ResearchPage(String text) { - this.type = PageType.TEXT; - this.text = text; - } - - /** - * @param research this page will only be displayed if the player has discovered this research - * @param text this can (but does not have to) be a reference to a localization variable, not the actual text. - */ - public ResearchPage(String research, String text) { - this.type = PageType.TEXT_CONCEALED; - this.research = research; - this.text = text; - } - - /** - * @param recipe a vanilla crafting recipe. - */ - public ResearchPage(IRecipe recipe) { - this.type = PageType.NORMAL_CRAFTING; - this.recipe = recipe; - this.recipeOutput = recipe.getRecipeOutput(); - } - - /** - * @param recipe a collection of vanilla crafting recipes. - */ - public ResearchPage(IRecipe[] recipe) { - this.type = PageType.NORMAL_CRAFTING; - this.recipe = recipe; - } - - /** - * @param recipe a collection of arcane crafting recipes. - */ - public ResearchPage(IArcaneRecipe[] recipe) { - this.type = PageType.ARCANE_CRAFTING; - this.recipe = recipe; - } - - /** - * @param recipe a collection of arcane crafting recipes. - */ - public ResearchPage(CrucibleRecipe[] recipe) { - this.type = PageType.CRUCIBLE_CRAFTING; - this.recipe = recipe; - } - - /** - * @param recipe a collection of infusion crafting recipes. - */ - public ResearchPage(InfusionRecipe[] recipe) { - this.type = PageType.INFUSION_CRAFTING; - this.recipe = recipe; - } - - /** - * @param recipe a compound crafting recipe. - */ - public ResearchPage(List recipe) { - this.type = PageType.COMPOUND_CRAFTING; - this.recipe = recipe; - } - - /** - * @param recipe an arcane worktable crafting recipe. - */ - public ResearchPage(IArcaneRecipe recipe) { - this.type = PageType.ARCANE_CRAFTING; - this.recipe = recipe; - this.recipeOutput = recipe.getRecipeOutput(); - } - - /** - * @param recipe an alchemy crafting recipe. - */ - public ResearchPage(CrucibleRecipe recipe) { - this.type = PageType.CRUCIBLE_CRAFTING; - this.recipe = recipe; - this.recipeOutput = recipe.getRecipeOutput(); - } - - /** - * @param recipe a furnace smelting crafting recipe. - */ - public ResearchPage(ItemStack input) { - this.type = PageType.SMELTING; - this.recipe = input; - this.recipeOutput = FurnaceRecipes.smelting().getSmeltingResult(input); - } - - /** - * @param recipe an infusion crafting recipe. - */ - public ResearchPage(InfusionRecipe recipe) { - this.type = PageType.INFUSION_CRAFTING; - this.recipe = recipe; - if (recipe.getRecipeOutput() instanceof ItemStack) { - this.recipeOutput = (ItemStack) recipe.getRecipeOutput(); - } else { - this.recipeOutput = recipe.getRecipeInput(); - } - } - - /** - * @param recipe an infusion crafting recipe. - */ - public ResearchPage(InfusionEnchantmentRecipe recipe) { - this.type = PageType.INFUSION_ENCHANTMENT; - this.recipe = recipe; -// if (recipe.recipeOutput instanceof ItemStack) { -// this.recipeOutput = (ItemStack) recipe.recipeOutput; -// } else { -// this.recipeOutput = recipe.recipeInput; -// } - } - - /** - * @param image - * @param caption this can (but does not have to) be a reference to a localization variable, not the actual text. - */ - public ResearchPage(ResourceLocation image, String caption) { - this.type = PageType.IMAGE; - this.image = image; - this.text = caption; - } - - /** - * This function should really not be called directly - used internally - */ - public ResearchPage(AspectList as) { - this.type = PageType.ASPECTS; - this.aspects = as; - } - - /** - * returns a localized text of the text field (if one exists). Returns the text field itself otherwise. - * @return - */ - public String getTranslatedText() { - String ret=""; - if (text != null) { - ret = StatCollector.translateToLocal(text); - if (ret.isEmpty()) ret = text; - } - return ret; - } - - -} diff --git a/src/api/java/thaumcraft/api/research/ScanResult.java b/src/api/java/thaumcraft/api/research/ScanResult.java deleted file mode 100644 index e1498f31..00000000 --- a/src/api/java/thaumcraft/api/research/ScanResult.java +++ /dev/null @@ -1,39 +0,0 @@ -package thaumcraft.api.research; - -import net.minecraft.entity.Entity; - -public class ScanResult { - public byte type = 0; //1=blocks,2=entities,3=phenomena - public int id; - public int meta; - public Entity entity; - public String phenomena; - - public ScanResult(byte type, int blockId, int blockMeta, Entity entity, - String phenomena) { - super(); - this.type = type; - this.id = blockId; - this.meta = blockMeta; - this.entity = entity; - this.phenomena = phenomena; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof ScanResult) { - ScanResult sr = (ScanResult) obj; - if (type != sr.type) - return false; - if (type == 1 - && (id != sr.id || meta != sr.meta)) - return false; - if (type == 2 && entity.getEntityId() != sr.entity.getEntityId()) - return false; - if (type == 3 && !phenomena.equals(sr.phenomena)) - return false; - } - return true; - } - -} diff --git a/src/api/java/thaumcraft/api/visnet/TileVisNode.java b/src/api/java/thaumcraft/api/visnet/TileVisNode.java deleted file mode 100644 index 84b1400d..00000000 --- a/src/api/java/thaumcraft/api/visnet/TileVisNode.java +++ /dev/null @@ -1,188 +0,0 @@ -package thaumcraft.api.visnet; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.HashMap; - -import thaumcraft.api.TileThaumcraft; -import thaumcraft.api.WorldCoordinates; -import thaumcraft.api.aspects.Aspect; - -/** - * @author Azanor - * - * The tile entity used by nodes in the vis energy network. A node is either a source (like an aura node), - * a transport relay or vis receiver (like the infernal furnace). - * - */ -public abstract class TileVisNode extends TileThaumcraft { - - WeakReference parent = null; - ArrayList> children = new ArrayList>(); - - /** - * @return the WorldCoordinates location of where this node is located - */ - public WorldCoordinates getLocation() { - return new WorldCoordinates(this); - } - - /** - * @return the number of blocks away this node will check for parent nodes to connect to. - */ - public abstract int getRange(); - - /** - * @return true if this is the source or root node of the vis network. - */ - public abstract boolean isSource(); - - /** - * This method should never be called directly. Use VisNetHandler.drainVis() instead - * @param aspect what aspect to drain - * @param vis how much to drain - * @return how much was actually drained - */ - public int consumeVis(Aspect aspect, int vis) { - if (VisNetHandler.isNodeValid(getParent())) { - int out = getParent().get().consumeVis(aspect, vis); - if (out>0) { - triggerConsumeEffect(aspect); - } - return out; - } - return 0; - } - - public void removeThisNode() { - for (WeakReference n:getChildren()) { - if (n!=null && n.get()!=null) { - n.get().removeThisNode(); - } - } - - children = new ArrayList>(); - if (VisNetHandler.isNodeValid(this.getParent())) { - this.getParent().get().nodeRefresh=true; - } - this.setParent(null); - this.parentChanged(); - - if (this.isSource()) { - HashMap> sourcelist = VisNetHandler.sources.get(worldObj.provider.dimensionId); - if (sourcelist==null) { - sourcelist = new HashMap>(); - } - sourcelist.remove(getLocation()); - VisNetHandler.sources.put( worldObj.provider.dimensionId, sourcelist ); - } - - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - - - - @Override - public void invalidate() { - removeThisNode(); - super.invalidate(); - } - - public void triggerConsumeEffect(Aspect aspect) { } - - /** - * @return - */ - public WeakReference getParent() { - return parent; - } - - /** - * @return - */ - public WeakReference getRootSource() { - return VisNetHandler.isNodeValid(getParent()) ? - getParent().get().getRootSource() : this.isSource() ? - new WeakReference(this) : null; - } - - /** - * @param parent - */ - public void setParent(WeakReference parent) { - this.parent = parent; - } - - /** - * @return - */ - public ArrayList> getChildren() { - return children; - } - - @Override - public boolean canUpdate() { - return true; - } - - protected int nodeCounter = 0; - private boolean nodeRegged = false; - public boolean nodeRefresh = false; - - @Override - public void updateEntity() { - - if (!worldObj.isRemote && ((nodeCounter++) % 40==0 || nodeRefresh)) { - //check for changes - if (!nodeRefresh && children.size()>0) { - for (WeakReference n:children) { - if (n==null || n.get()==null) { - nodeRefresh=true; - break; - } - } - } - - //refresh linked nodes - if (nodeRefresh) { - for (WeakReference n:children) { - if (n.get()!=null) { - n.get().nodeRefresh=true; - } - } - children.clear(); - parent=null; - } - - //redo stuff - if (isSource() && !nodeRegged) { - VisNetHandler.addSource(getWorldObj(), this); - nodeRegged = true; - } else - if (!isSource() && !VisNetHandler.isNodeValid(getParent())) { - setParent(VisNetHandler.addNode(getWorldObj(), this)); - nodeRefresh=true; - } - - if (nodeRefresh) { - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - parentChanged(); - } - nodeRefresh=false; - } - - } - - public void parentChanged() { } - - /** - * @return the type of shard this is attuned to: - * none -1, air 0, fire 1, water 2, earth 3, order 4, entropy 5 - * Should return -1 for most implementations - */ - public byte getAttunement() { - return -1; - } - - -} diff --git a/src/api/java/thaumcraft/api/visnet/VisNetHandler.java b/src/api/java/thaumcraft/api/visnet/VisNetHandler.java deleted file mode 100644 index cb9714c4..00000000 --- a/src/api/java/thaumcraft/api/visnet/VisNetHandler.java +++ /dev/null @@ -1,284 +0,0 @@ -package thaumcraft.api.visnet; - -import java.lang.ref.WeakReference; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; - -import net.minecraft.world.World; -import thaumcraft.api.WorldCoordinates; -import thaumcraft.api.aspects.Aspect; -import cpw.mods.fml.common.FMLLog; - -public class VisNetHandler { - - // / NODE DRAINING - /** - * This method drains vis from a relay or source near the passed in - * location. The amount received can be less than the amount requested so - * take that into account. - * - * @param world - * @param x the x position of the draining block or entity - * @param y the y position of the draining block or entity - * @param z the z position of the draining block or entity - * @param aspect what aspect to drain - * @param amount how much to drain - * @return how much was actually drained - */ - public static int drainVis(World world, int x, int y, int z, Aspect aspect, int amount) { - - int drainedAmount = 0; - - WorldCoordinates drainer = new WorldCoordinates(x, y, z, - world.provider.dimensionId); - if (!nearbyNodes.containsKey(drainer)) { - calculateNearbyNodes(world, x, y, z); - } - - ArrayList> nodes = nearbyNodes.get(drainer); - if (nodes!=null && nodes.size()>0) - for (WeakReference noderef : nodes) { - - TileVisNode node = noderef.get(); - - if (node == null) continue; - - int a = node.consumeVis(aspect, amount); - drainedAmount += a; - amount -= a; - if (a>0) { - int color = Aspect.getPrimalAspects().indexOf(aspect); - generateVisEffect(world.provider.dimensionId, x, y, z, node.xCoord, node.yCoord, node.zCoord, color); - } - if (amount <= 0) { - break; - } - } - - return drainedAmount; - } - - static Method generateVisEffect; - public static void generateVisEffect(int dim, int x, int y, int z, int x2, int y2, int z2, int color) { - try { - if(generateVisEffect == null) { - Class fake = Class.forName("thaumcraft.common.lib.Utils"); - generateVisEffect = fake.getMethod("generateVisEffect", int.class, int.class, int.class, int.class, int.class, int.class, int.class, int.class); - } - generateVisEffect.invoke(null, dim, x,y,z,x2,y2,z2,color); - } catch(Exception ex) { - FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.lib.Utils method generateVisEffect"); - } - } - - public static HashMap>> sources = new HashMap>>(); - - public static void addSource(World world, TileVisNode vs) { - HashMap> sourcelist = sources - .get(world.provider.dimensionId); - if (sourcelist == null) { - sourcelist = new HashMap>(); - } - sourcelist.put(vs.getLocation(), new WeakReference(vs)); - sources.put(world.provider.dimensionId, sourcelist); - nearbyNodes.clear(); - } - - public static boolean isNodeValid(WeakReference node) { - if (node == null || node.get() == null || node.get().isInvalid()) - return false; - return true; - } - - public static WeakReference addNode(World world, TileVisNode vn) { - WeakReference ref = new WeakReference(vn); - - HashMap> sourcelist = sources - .get(world.provider.dimensionId); - if (sourcelist == null) { - sourcelist = new HashMap>(); - return null; - } - - ArrayList nearby = new ArrayList(); - - for (WeakReference root : sourcelist.values()) { - if (!isNodeValid(root)) - continue; - - TileVisNode source = root.get(); - - float r = inRange(world, vn.getLocation(), source.getLocation(), - vn.getRange()); - if (r > 0) { - nearby.add(new Object[] { source, r - vn.getRange() * 2 }); - } - nearby = findClosestNodes(vn, source, nearby); - } - - float dist = Float.MAX_VALUE; - TileVisNode closest = null; - if (nearby.size() > 0) { - for (Object[] o : nearby) { - if ((Float) o[1] < dist) {// && canNodeBeSeen(vn,(TileVisNode) - // o[0])) { - dist = (Float) o[1]; - closest = (TileVisNode) o[0]; - } - } - } - if (closest != null) { - closest.getChildren().add(ref); - nearbyNodes.clear(); - return new WeakReference(closest); - } - - return null; - } - - public static ArrayList findClosestNodes(TileVisNode target, - TileVisNode root, ArrayList in) { - TileVisNode closestChild = null; - - for (WeakReference child : root.getChildren()) { - TileVisNode n = child.get(); - - if (n != null - && !n.equals(target) - && !n.equals(root) - && (target.getAttunement() == -1 || n.getAttunement() == -1 || n - .getAttunement() == target.getAttunement())) { - - float r2 = inRange(n.getWorldObj(), n.getLocation(), - target.getLocation(), target.getRange()); - if (r2 > 0) { - in.add(new Object[] { n, r2 }); - } - - in = findClosestNodes(target, n, in); - } - } - return in; - } - - private static float inRange(World world, WorldCoordinates cc1, - WorldCoordinates cc2, int range) { - float distance = cc1.getDistanceSquaredToWorldCoordinates(cc2); - return distance > range * range ? -1 : distance; - } - - private static HashMap>> nearbyNodes = new HashMap>>(); - - private static void calculateNearbyNodes(World world, int x, int y, int z) { - - HashMap> sourcelist = sources - .get(world.provider.dimensionId); - if (sourcelist == null) { - sourcelist = new HashMap>(); - return; - } - - ArrayList> cn = new ArrayList>(); - WorldCoordinates drainer = new WorldCoordinates(x, y, z, - world.provider.dimensionId); - - ArrayList nearby = new ArrayList(); - - for (WeakReference root : sourcelist.values()) { - - if (!isNodeValid(root)) - continue; - - TileVisNode source = root.get(); - - TileVisNode closest = null; - float range = Float.MAX_VALUE; - - float r = inRange(world, drainer, source.getLocation(), - source.getRange()); - if (r > 0) { - range = r; - closest = source; - } - - ArrayList> children = new ArrayList>(); - children = getAllChildren(source,children); - - for (WeakReference child : children) { - TileVisNode n = child.get(); - if (n != null && !n.equals(root)) { - - float r2 = inRange(n.getWorldObj(), n.getLocation(), - drainer, n.getRange()); - if (r2 > 0 && r2 < range) { - range = r2; - closest = n; - } - } - } - - if (closest != null) { - - cn.add(new WeakReference(closest)); - } - } - - nearbyNodes.put(drainer, cn); - } - - private static ArrayList> getAllChildren(TileVisNode source, ArrayList> list) { - for (WeakReference child : source.getChildren()) { - TileVisNode n = child.get(); - if (n != null) { - list.add(child); - list = getAllChildren(n,list); - } - } - return list; - } - - // public static boolean canNodeBeSeen(TileVisNode source,TileVisNode - // target) - // { - // double d = Math.sqrt(source.getDistanceFrom(target.xCoord, target.yCoord, - // target.zCoord)); - // double xd = (source.xCoord-target.xCoord) / d; - // double yd = (source.yCoord-target.yCoord) / d; - // double zd = (source.zCoord-target.zCoord) / d; - // return source.getWorldObj().rayTraceBlocks( - // Vec3.createVectorHelper(source.xCoord-xd+.5+.5, source.yCoord-yd, - // source.zCoord-zd), - // Vec3.createVectorHelper(target.xCoord+.5, target.yCoord+.5, - // target.zCoord+.5)) == null; - // } - - // public static HashMap> - // noderef = new HashMap>(); - // - // public static TileVisNode getClosestNodeWithinRadius(World world, int x, - // int y, int z, int radius) { - // TileVisNode out = null; - // WorldCoordinates wc = null; - // float cd = Float.MAX_VALUE; - // for (int sx = x - radius; sx <= x + radius; sx++) { - // for (int sy = y - radius; sy <= y + radius; sy++) { - // for (int sz = z - radius; sz <= z + radius; sz++) { - // wc = new WorldCoordinates(sx,sy,sz,world.provider.dimensionId); - // if (noderef.containsKey(wc)) { - // float d = wc.getDistanceSquared(x, y, z); - // if (dAs a guide build the sort string from two alphanumeric characters followed by - * two numeric characters based on... whatever. - */ - public String getSortingHelper(ItemStack itemstack); - - boolean onFocusBlockStartBreak(ItemStack itemstack, int x, int y, int z, EntityPlayer player); - - public boolean acceptsEnchant(int id); - - - - - -} diff --git a/src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java b/src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java deleted file mode 100644 index 4ef8c849..00000000 --- a/src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java +++ /dev/null @@ -1,16 +0,0 @@ -package thaumcraft.api.wands; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -/** - * - * @author azanor - * - * Implemented by a class that you wish to be called whenever a wand with this rod performs its - * update tick. - * - */ -public interface IWandRodOnUpdate { - void onUpdate(ItemStack itemstack, EntityPlayer player); -} diff --git a/src/api/java/thaumcraft/api/wands/IWandTriggerManager.java b/src/api/java/thaumcraft/api/wands/IWandTriggerManager.java deleted file mode 100644 index 7c299deb..00000000 --- a/src/api/java/thaumcraft/api/wands/IWandTriggerManager.java +++ /dev/null @@ -1,15 +0,0 @@ -package thaumcraft.api.wands; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IWandTriggerManager { - - /** - * This class will be called by wands with the proper parameters. It is up to you to decide what to do with them. - */ - public boolean performTrigger(World world, ItemStack wand, EntityPlayer player, - int x, int y, int z, int side, int event); - -} diff --git a/src/api/java/thaumcraft/api/wands/IWandable.java b/src/api/java/thaumcraft/api/wands/IWandable.java deleted file mode 100644 index aeb9bac7..00000000 --- a/src/api/java/thaumcraft/api/wands/IWandable.java +++ /dev/null @@ -1,25 +0,0 @@ -package thaumcraft.api.wands; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * - * @author azanor - * - * Add this to a tile entity that you wish wands to interact with in some way. - * - */ - -public interface IWandable { - - public int onWandRightClick(World world, ItemStack wandstack, EntityPlayer player, int x, int y, int z, int side, int md); - - public ItemStack onWandRightClick(World world, ItemStack wandstack, EntityPlayer player); - - public void onUsingWandTick(ItemStack wandstack, EntityPlayer player, int count); - - public void onWandStoppedUsing(ItemStack wandstack, World world, EntityPlayer player, int count); - -} diff --git a/src/api/java/thaumcraft/api/wands/ItemFocusBasic.java b/src/api/java/thaumcraft/api/wands/ItemFocusBasic.java deleted file mode 100644 index 35900520..00000000 --- a/src/api/java/thaumcraft/api/wands/ItemFocusBasic.java +++ /dev/null @@ -1,166 +0,0 @@ -package thaumcraft.api.wands; - -import java.text.DecimalFormat; -import java.util.List; -import java.util.Map; - -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import thaumcraft.api.ThaumcraftApi; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class ItemFocusBasic extends Item implements IWandFocus { - - public ItemFocusBasic () - { - super(); - maxStackSize = 1; - canRepair=false; - this.setMaxDamage(0); - } - - public IIcon icon; - - @SideOnly(Side.CLIENT) - @Override - public IIcon getIconFromDamage(int par1) { - return icon; - } - - @Override - public boolean isItemTool(ItemStack par1ItemStack) - { - return true; - } - - @Override - public boolean isDamageable() { - return true; - } - - @Override - public void addInformation(ItemStack stack,EntityPlayer player, List list, boolean par4) { - AspectList al = this.getVisCost(); - if (al!=null && al.size()>0) { - list.add(StatCollector.translateToLocal(isVisCostPerTick()?"item.Focus.cost2":"item.Focus.cost1")); - for (Aspect aspect:al.getAspectsSorted()) { - DecimalFormat myFormatter = new DecimalFormat("#####.##"); - String amount = myFormatter.format(al.getAmount(aspect)/100f); - list.add(" \u00A7"+aspect.getChatcolor()+aspect.getName()+"\u00A7r x "+ amount); - - } - } - } - - @Override - public int getItemEnchantability() { - return 5; - } - - @Override - public EnumRarity getRarity(ItemStack itemstack) - { - return EnumRarity.rare; - } - - - @Override - public int getFocusColor() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public AspectList getVisCost() { - // TODO Auto-generated method stub - return null; - } - - @Override - public ItemStack onFocusRightClick(ItemStack itemstack, World world, - EntityPlayer player, MovingObjectPosition movingobjectposition) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void onUsingFocusTick(ItemStack itemstack, EntityPlayer player, - int count) { - // TODO Auto-generated method stub - } - - @Override - public void onPlayerStoppedUsingFocus(ItemStack itemstack, World world, - EntityPlayer player, int count) { - // TODO Auto-generated method stub - - } - - /** - * Just insert two alphanumeric characters before this string in your focus item class - */ - @Override - public String getSortingHelper(ItemStack itemstack) { - Map ench = EnchantmentHelper.getEnchantments(itemstack); - String out=""; - for (Integer lvl:ench.values()) { - out = out + lvl + ""; - } - return out; - } - - @Override - public boolean isVisCostPerTick() { - return false; - } - - @Override - public IIcon getOrnament() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean onFocusBlockStartBreak(ItemStack itemstack, int x, int y, - int z, EntityPlayer player) { - // TODO Auto-generated method stub - return false; - } - - @Override - public WandFocusAnimation getAnimation() { - return WandFocusAnimation.WAVE; - } - - @Override - public IIcon getFocusDepthLayerIcon() { - // TODO Auto-generated method stub - return null; - } - - /** - * @see thaumcraft.api.wands.IWandFocus#acceptsEnchant(int) - * By default fortune is off for all wands - **/ - @Override - public boolean acceptsEnchant(int id) { - if (id==ThaumcraftApi.enchantFrugal|| - id==ThaumcraftApi.enchantPotency) return true; - return false; - } - - - - - -} diff --git a/src/api/java/thaumcraft/api/wands/StaffRod.java b/src/api/java/thaumcraft/api/wands/StaffRod.java deleted file mode 100644 index e7ae90f0..00000000 --- a/src/api/java/thaumcraft/api/wands/StaffRod.java +++ /dev/null @@ -1,48 +0,0 @@ -package thaumcraft.api.wands; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -/** - * - * @author Azanor - * - * This class is used to keep the material information for the various rods. - * It is also used to generate the wand recipes ingame. - * - */ -public class StaffRod extends WandRod { - - boolean runes=false; - - public StaffRod(String tag, int capacity, ItemStack item, int craftCost) { - super(tag+"_staff", capacity, item, craftCost); - this.texture = new ResourceLocation("thaumcraft","textures/models/wand_rod_"+tag+".png"); - } - - public StaffRod(String tag, int capacity, ItemStack item, int craftCost, - IWandRodOnUpdate onUpdate, ResourceLocation texture) { - super(tag+"_staff", capacity, item, craftCost, onUpdate, texture); - } - - public StaffRod(String tag, int capacity, ItemStack item, int craftCost, - IWandRodOnUpdate onUpdate) { - super(tag+"_staff", capacity, item, craftCost, onUpdate); - this.texture = new ResourceLocation("thaumcraft","textures/models/wand_rod_"+tag+".png"); - } - - public StaffRod(String tag, int capacity, ItemStack item, int craftCost, - ResourceLocation texture) { - super(tag+"_staff", capacity, item, craftCost, texture); - } - - public boolean hasRunes() { - return runes; - } - - public void setRunes(boolean hasRunes) { - this.runes = hasRunes; - } - - -} diff --git a/src/api/java/thaumcraft/api/wands/WandCap.java b/src/api/java/thaumcraft/api/wands/WandCap.java deleted file mode 100644 index 17b4581c..00000000 --- a/src/api/java/thaumcraft/api/wands/WandCap.java +++ /dev/null @@ -1,129 +0,0 @@ -package thaumcraft.api.wands; - -import java.util.LinkedHashMap; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import thaumcraft.api.aspects.Aspect; - -/** - * This class is used to keep the material information for the various caps. - * It is also used to generate the wand recipes ingame. - * @author Azanor - * - */ -public class WandCap { - - private String tag; - - /** - * Cost to craft this wand. Combined with the rod cost. - */ - private int craftCost; - - /** - * the amount by which all aspect costs are multiplied - */ - float baseCostModifier; - - /** - * specifies a list of primal aspects that use the special discount figure instead of the normal discount. - */ - List specialCostModifierAspects; - - /** - * the amount by which the specified aspect costs are multiplied - */ - float specialCostModifier; - - /** - * The texture that will be used for the ingame wand cap - */ - ResourceLocation texture; - - /** - * the actual item that makes up this cap and will be used to generate the wand recipes - */ - ItemStack item; - - public static LinkedHashMap caps = new LinkedHashMap(); - - public WandCap (String tag, float discount, ItemStack item, int craftCost) { - this.setTag(tag); - this.baseCostModifier = discount; - this.specialCostModifierAspects = null; - texture = new ResourceLocation("thaumcraft","textures/models/wand_cap_"+getTag()+".png"); - this.item=item; - this.setCraftCost(craftCost); - caps.put(tag, this); - } - - public WandCap (String tag, float discount, List specialAspects, float discountSpecial, ItemStack item, int craftCost) { - this.setTag(tag); - this.baseCostModifier = discount; - this.specialCostModifierAspects = specialAspects; - this.specialCostModifier = discountSpecial; - texture = new ResourceLocation("thaumcraft","textures/models/wand_cap_"+getTag()+".png"); - this.item=item; - this.setCraftCost(craftCost); - caps.put(tag, this); - } - - public float getBaseCostModifier() { - return baseCostModifier; - } - - public List getSpecialCostModifierAspects() { - return specialCostModifierAspects; - } - - public float getSpecialCostModifier() { - return specialCostModifier; - } - - public ResourceLocation getTexture() { - return texture; - } - - public void setTexture(ResourceLocation texture) { - this.texture = texture; - } - - public String getTag() { - return tag; - } - - public void setTag(String tag) { - this.tag = tag; - } - - - public ItemStack getItem() { - return item; - } - - public void setItem(ItemStack item) { - this.item = item; - } - - public int getCraftCost() { - return craftCost; - } - - public void setCraftCost(int craftCost) { - this.craftCost = craftCost; - } - - /** - * The research a player needs to have finished to be able to craft a wand with this cap. - */ - public String getResearch() { - return "CAP_"+getTag(); - } - - // Some examples: - // WandCap WAND_CAP_IRON = new WandCap("iron", 1.1f, Arrays.asList(Aspect.ORDER),1, new ItemStack(ConfigItems.itemWandCap,1,0),1); - // WandCap WAND_CAP_GOLD = new WandCap("gold", 1f, new ItemStack(ConfigItems.itemWandCap,1,1),3); - -} diff --git a/src/api/java/thaumcraft/api/wands/WandRod.java b/src/api/java/thaumcraft/api/wands/WandRod.java deleted file mode 100644 index 85954e46..00000000 --- a/src/api/java/thaumcraft/api/wands/WandRod.java +++ /dev/null @@ -1,158 +0,0 @@ -package thaumcraft.api.wands; - -import java.util.LinkedHashMap; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -/** - * - * @author Azanor - * - * This class is used to keep the material information for the various rods. - * It is also used to generate the wand recipes ingame. - * - */ -public class WandRod { - - - private String tag; - - /** - * Cost to craft this wand. Combined with the rod cost. - */ - private int craftCost; - - /** - * The amount of vis that can be stored - this number is actually multiplied - * by 100 for use by the wands internals - */ - int capacity; - - /** - * The texture that will be used for the ingame wand rod - */ - protected ResourceLocation texture; - - /** - * the actual item that makes up this rod and will be used to generate the wand recipes - */ - ItemStack item; - - /** - * A class that will be called whenever the wand onUpdate tick is run - */ - IWandRodOnUpdate onUpdate; - - /** - * Does the rod glow in the dark? - */ - boolean glow; - - public static LinkedHashMap rods = new LinkedHashMap(); - - public WandRod (String tag, int capacity, ItemStack item, int craftCost, ResourceLocation texture) { - this.setTag(tag); - this.capacity = capacity; - this.texture = texture; - this.item=item; - this.setCraftCost(craftCost); - rods.put(tag, this); - } - - public WandRod (String tag, int capacity, ItemStack item, int craftCost, IWandRodOnUpdate onUpdate, ResourceLocation texture) { - this.setTag(tag); - this.capacity = capacity; - this.texture = texture; - this.item=item; - this.setCraftCost(craftCost); - rods.put(tag, this); - this.onUpdate = onUpdate; - } - - public WandRod (String tag, int capacity, ItemStack item, int craftCost) { - this.setTag(tag); - this.capacity = capacity; - this.texture = new ResourceLocation("thaumcraft","textures/models/wand_rod_"+getTag()+".png"); - this.item=item; - this.setCraftCost(craftCost); - rods.put(tag, this); - } - - public WandRod (String tag, int capacity, ItemStack item, int craftCost, IWandRodOnUpdate onUpdate) { - this.setTag(tag); - this.capacity = capacity; - this.texture = new ResourceLocation("thaumcraft","textures/models/wand_rod_"+getTag()+".png"); - this.item=item; - this.setCraftCost(craftCost); - rods.put(tag, this); - this.onUpdate = onUpdate; - } - - public String getTag() { - return tag; - } - - public void setTag(String tag) { - this.tag = tag; - } - - public int getCapacity() { - return capacity; - } - - public void setCapacity(int capacity) { - this.capacity = capacity; - } - - public ResourceLocation getTexture() { - return texture; - } - - public void setTexture(ResourceLocation texture) { - this.texture = texture; - } - - public ItemStack getItem() { - return item; - } - - public void setItem(ItemStack item) { - this.item = item; - } - - public int getCraftCost() { - return craftCost; - } - - public void setCraftCost(int craftCost) { - this.craftCost = craftCost; - } - - public IWandRodOnUpdate getOnUpdate() { - return onUpdate; - } - - public void setOnUpdate(IWandRodOnUpdate onUpdate) { - this.onUpdate = onUpdate; - } - - public boolean isGlowing() { - return glow; - } - - public void setGlowing(boolean hasGlow) { - this.glow = hasGlow; - } - - /** - * The research a player needs to have finished to be able to craft a wand with this rod. - */ - public String getResearch() { - return "ROD_"+getTag(); - } - - // Some examples: - // WandRod WAND_ROD_WOOD = new WandRod("wood",25,new ItemStack(Item.stick),1); - // WandRod WAND_ROD_BLAZE = new WandRod("blaze",100,new ItemStack(Item.blazeRod),7,new WandRodBlazeOnUpdate()); -} diff --git a/src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java b/src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java deleted file mode 100644 index 7224e12f..00000000 --- a/src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java +++ /dev/null @@ -1,126 +0,0 @@ -package thaumcraft.api.wands; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * This class serves a similar function to IWandable in that it allows wands to interact - * with object in the world. In this case it is most useful for adding interaction with non-mod - * blocks where you can't control what happens in their code. - * Example where it is used is in crafting the thaumonomicon from a bookshelf and the - * crucible from a cauldron - * - * @author azanor - * - */ -public class WandTriggerRegistry { - - private static HashMap> triggers = new HashMap>(); - private static final String DEFAULT = "default"; - - /** - * Registers an action to perform when a casting wand right clicks on a specific block. - * A manager class needs to be created that implements IWandTriggerManager. - * @param manager - * @param event a logical number that you can use to differentiate different events or actions - * @param block - * @param meta send -1 as a wildcard value for all possible meta values - * @param modid a unique identifier. It is best to register your own triggers using your mod id to avoid conflicts with mods that register triggers for the same block - */ - public static void registerWandBlockTrigger(IWandTriggerManager manager, int event, Block block, int meta, String modid) { - if (!triggers.containsKey(modid)) { - triggers.put(modid, new HashMap()); - } - HashMap temp = triggers.get(modid); - temp.put(Arrays.asList(block,meta),Arrays.asList(manager,event)); - triggers.put(modid, temp); - } - - /** - * for legacy support - */ - public static void registerWandBlockTrigger(IWandTriggerManager manager, int event, Block block, int meta) { - registerWandBlockTrigger(manager, event, block, meta, DEFAULT); - } - - /** - * Checks all trigger registries if one exists for the given block and meta - * @param block - * @param meta - * @return - */ - public static boolean hasTrigger(Block block, int meta) { - for (String modid:triggers.keySet()) { - HashMap temp = triggers.get(modid); - if (temp.containsKey(Arrays.asList(block,meta)) || - temp.containsKey(Arrays.asList(block,-1))) return true; - } - return false; - } - - /** - * modid sensitive version - */ - public static boolean hasTrigger(Block block, int meta, String modid) { - if (!triggers.containsKey(modid)) return false; - HashMap temp = triggers.get(modid); - if (temp.containsKey(Arrays.asList(block,meta)) || - temp.containsKey(Arrays.asList(block,-1))) return true; - return false; - } - - - /** - * This is called by the onItemUseFirst function in wands. - * Parameters and return value functions like you would expect for that function. - * @param world - * @param wand - * @param player - * @param x - * @param y - * @param z - * @param side - * @param block - * @param meta - * @return - */ - public static boolean performTrigger(World world, ItemStack wand, EntityPlayer player, - int x, int y, int z, int side, Block block, int meta) { - - for (String modid:triggers.keySet()) { - HashMap temp = triggers.get(modid); - List l = temp.get(Arrays.asList(block,meta)); - if (l==null) l = temp.get(Arrays.asList(block,-1)); - if (l==null) continue; - - IWandTriggerManager manager = (IWandTriggerManager) l.get(0); - int event = (Integer) l.get(1); - boolean result = manager.performTrigger(world, wand, player, x, y, z, side, event); - if (result) return true; - } - return false; - } - - /** - * modid sensitive version - */ - public static boolean performTrigger(World world, ItemStack wand, EntityPlayer player, - int x, int y, int z, int side, Block block, int meta, String modid) { - if (!triggers.containsKey(modid)) return false; - HashMap temp = triggers.get(modid); - List l = temp.get(Arrays.asList(block,meta)); - if (l==null) l = temp.get(Arrays.asList(block,-1)); - if (l==null) return false; - - IWandTriggerManager manager = (IWandTriggerManager) l.get(0); - int event = (Integer) l.get(1); - return manager.performTrigger(world, wand, player, x, y, z, side, event); - } - -} diff --git a/src/main/java/mods/natura/Natura.java b/src/main/java/mods/natura/Natura.java index 46ff2588..fe52085d 100644 --- a/src/main/java/mods/natura/Natura.java +++ b/src/main/java/mods/natura/Natura.java @@ -49,7 +49,7 @@ import net.minecraftforge.event.world.ChunkDataEvent; import net.minecraftforge.oredict.OreDictionary; -@Mod(modid = "Natura", name = "Natura", version = "2.3.0", acceptedMinecraftVersions = "[1.7.10]", dependencies = "required-after:Mantle") +@Mod(modid = "Natura", name = "Natura", version = "GRADLETOKEN_VERSION", acceptedMinecraftVersions = "[1.7.10]", dependencies = "required-after:Mantle") public class Natura { /* Proxies for sides, used for graphics processing */ @SidedProxy(clientSide = "mods.natura.client.NProxyClient", serverSide = "mods.natura.common.NProxyCommon") diff --git a/resources/assets/natura/lang/de_DE.lang b/src/main/resources/assets/natura/lang/de_DE.lang similarity index 100% rename from resources/assets/natura/lang/de_DE.lang rename to src/main/resources/assets/natura/lang/de_DE.lang diff --git a/resources/assets/natura/lang/en_US.lang b/src/main/resources/assets/natura/lang/en_US.lang similarity index 100% rename from resources/assets/natura/lang/en_US.lang rename to src/main/resources/assets/natura/lang/en_US.lang diff --git a/resources/assets/natura/lang/it_IT.lang b/src/main/resources/assets/natura/lang/it_IT.lang similarity index 100% rename from resources/assets/natura/lang/it_IT.lang rename to src/main/resources/assets/natura/lang/it_IT.lang diff --git a/resources/assets/natura/lang/ko_KR.lang b/src/main/resources/assets/natura/lang/ko_KR.lang similarity index 100% rename from resources/assets/natura/lang/ko_KR.lang rename to src/main/resources/assets/natura/lang/ko_KR.lang diff --git a/resources/assets/natura/lang/pl_PL.lang b/src/main/resources/assets/natura/lang/pl_PL.lang similarity index 100% rename from resources/assets/natura/lang/pl_PL.lang rename to src/main/resources/assets/natura/lang/pl_PL.lang diff --git a/resources/assets/natura/lang/ru_RU.lang b/src/main/resources/assets/natura/lang/ru_RU.lang similarity index 100% rename from resources/assets/natura/lang/ru_RU.lang rename to src/main/resources/assets/natura/lang/ru_RU.lang diff --git a/resources/assets/natura/lang/zh_CN.lang b/src/main/resources/assets/natura/lang/zh_CN.lang similarity index 100% rename from resources/assets/natura/lang/zh_CN.lang rename to src/main/resources/assets/natura/lang/zh_CN.lang diff --git a/resources/assets/natura/textures/armor/imp_1.png b/src/main/resources/assets/natura/textures/armor/imp_1.png similarity index 100% rename from resources/assets/natura/textures/armor/imp_1.png rename to src/main/resources/assets/natura/textures/armor/imp_1.png diff --git a/resources/assets/natura/textures/armor/imp_2.png b/src/main/resources/assets/natura/textures/armor/imp_2.png similarity index 100% rename from resources/assets/natura/textures/armor/imp_2.png rename to src/main/resources/assets/natura/textures/armor/imp_2.png diff --git a/resources/assets/natura/textures/blocks/air_sulfur.png b/src/main/resources/assets/natura/textures/blocks/air_sulfur.png similarity index 100% rename from resources/assets/natura/textures/blocks/air_sulfur.png rename to src/main/resources/assets/natura/textures/blocks/air_sulfur.png diff --git a/resources/assets/natura/textures/blocks/apple_bark.png b/src/main/resources/assets/natura/textures/blocks/apple_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_bark.png rename to src/main/resources/assets/natura/textures/blocks/apple_bark.png diff --git a/resources/assets/natura/textures/blocks/apple_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/apple_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/apple_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/apple_heart.png b/src/main/resources/assets/natura/textures/blocks/apple_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_heart.png rename to src/main/resources/assets/natura/textures/blocks/apple_heart.png diff --git a/resources/assets/natura/textures/blocks/apple_ladder.png b/src/main/resources/assets/natura/textures/blocks/apple_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_ladder.png rename to src/main/resources/assets/natura/textures/blocks/apple_ladder.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_flowering_fancy.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_flowering_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_flowering_fancy.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_flowering_fancy.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_flowering_fast.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_flowering_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_flowering_fast.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_flowering_fast.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_fruit_fancy.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_fruit_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_fruit_fancy.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_fruit_fancy.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_fruit_fast.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_fruit_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_fruit_fast.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_fruit_fast.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_gold_fancy.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_gold_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_gold_fancy.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_gold_fancy.png diff --git a/resources/assets/natura/textures/blocks/apple_leaves_gold_fast.png b/src/main/resources/assets/natura/textures/blocks/apple_leaves_gold_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_leaves_gold_fast.png rename to src/main/resources/assets/natura/textures/blocks/apple_leaves_gold_fast.png diff --git a/resources/assets/natura/textures/blocks/apple_planks.png b/src/main/resources/assets/natura/textures/blocks/apple_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_planks.png rename to src/main/resources/assets/natura/textures/blocks/apple_planks.png diff --git a/resources/assets/natura/textures/blocks/apple_sapling.png b/src/main/resources/assets/natura/textures/blocks/apple_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_sapling.png rename to src/main/resources/assets/natura/textures/blocks/apple_sapling.png diff --git a/resources/assets/natura/textures/blocks/apple_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/apple_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/apple_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/apple_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/barley_1.png b/src/main/resources/assets/natura/textures/blocks/barley_1.png similarity index 100% rename from resources/assets/natura/textures/blocks/barley_1.png rename to src/main/resources/assets/natura/textures/blocks/barley_1.png diff --git a/resources/assets/natura/textures/blocks/barley_2.png b/src/main/resources/assets/natura/textures/blocks/barley_2.png similarity index 100% rename from resources/assets/natura/textures/blocks/barley_2.png rename to src/main/resources/assets/natura/textures/blocks/barley_2.png diff --git a/resources/assets/natura/textures/blocks/barley_3.png b/src/main/resources/assets/natura/textures/blocks/barley_3.png similarity index 100% rename from resources/assets/natura/textures/blocks/barley_3.png rename to src/main/resources/assets/natura/textures/blocks/barley_3.png diff --git a/resources/assets/natura/textures/blocks/barley_4.png b/src/main/resources/assets/natura/textures/blocks/barley_4.png similarity index 100% rename from resources/assets/natura/textures/blocks/barley_4.png rename to src/main/resources/assets/natura/textures/blocks/barley_4.png diff --git a/resources/assets/natura/textures/blocks/birch_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/birch_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/birch_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/birch_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/birch_door_top.png b/src/main/resources/assets/natura/textures/blocks/birch_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/birch_door_top.png rename to src/main/resources/assets/natura/textures/blocks/birch_door_top.png diff --git a/resources/assets/natura/textures/blocks/blackberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/blackberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/blackberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/blackberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/blackberry_fast.png b/src/main/resources/assets/natura/textures/blocks/blackberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/blackberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/blackberry_fast.png diff --git a/resources/assets/natura/textures/blocks/blackberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/blackberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/blackberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/blackberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/blackberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/blackberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/blackberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/blackberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/blightberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/blightberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/blightberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/blightberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/blightberry_fast.png b/src/main/resources/assets/natura/textures/blocks/blightberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/blightberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/blightberry_fast.png diff --git a/resources/assets/natura/textures/blocks/blightberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/blightberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/blightberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/blightberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/blightberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/blightberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/blightberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/blightberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_bark.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_bark.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_bark.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_door_top.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_door_top.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_door_top.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_heart_small.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_heart_small.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_heart_small.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_heart_small.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_ladder.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_ladder.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_ladder.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_lower_left.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_lower_left.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_lower_left.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_lower_left.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_lower_right.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_lower_right.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_lower_right.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_lower_right.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_planks.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_planks.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_planks.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_sapling.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_sapling.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_sapling.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_side_left.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_side_left.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_side_left.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_side_left.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_side_right.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_side_right.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_side_right.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_side_right.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_upper_left.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_upper_left.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_upper_left.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_upper_left.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_upper_right.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_upper_right.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_upper_right.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_upper_right.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/bloodwood_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/bloodwood_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/bloodwood_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/bloodwood_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/blueberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/blueberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/blueberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/blueberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/blueberry_fast.png b/src/main/resources/assets/natura/textures/blocks/blueberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/blueberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/blueberry_fast.png diff --git a/resources/assets/natura/textures/blocks/blueberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/blueberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/blueberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/blueberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/blueberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/blueberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/blueberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/blueberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/brail_activator.png b/src/main/resources/assets/natura/textures/blocks/brail_activator.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_activator.png rename to src/main/resources/assets/natura/textures/blocks/brail_activator.png diff --git a/resources/assets/natura/textures/blocks/brail_activator_powered.png b/src/main/resources/assets/natura/textures/blocks/brail_activator_powered.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_activator_powered.png rename to src/main/resources/assets/natura/textures/blocks/brail_activator_powered.png diff --git a/resources/assets/natura/textures/blocks/brail_detector.png b/src/main/resources/assets/natura/textures/blocks/brail_detector.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_detector.png rename to src/main/resources/assets/natura/textures/blocks/brail_detector.png diff --git a/resources/assets/natura/textures/blocks/brail_detector_powered.png b/src/main/resources/assets/natura/textures/blocks/brail_detector_powered.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_detector_powered.png rename to src/main/resources/assets/natura/textures/blocks/brail_detector_powered.png diff --git a/resources/assets/natura/textures/blocks/brail_golden.png b/src/main/resources/assets/natura/textures/blocks/brail_golden.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_golden.png rename to src/main/resources/assets/natura/textures/blocks/brail_golden.png diff --git a/resources/assets/natura/textures/blocks/brail_golden_powered.png b/src/main/resources/assets/natura/textures/blocks/brail_golden_powered.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_golden_powered.png rename to src/main/resources/assets/natura/textures/blocks/brail_golden_powered.png diff --git a/resources/assets/natura/textures/blocks/brail_normal.png b/src/main/resources/assets/natura/textures/blocks/brail_normal.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_normal.png rename to src/main/resources/assets/natura/textures/blocks/brail_normal.png diff --git a/resources/assets/natura/textures/blocks/brail_normal_turned.png b/src/main/resources/assets/natura/textures/blocks/brail_normal_turned.png similarity index 100% rename from resources/assets/natura/textures/blocks/brail_normal_turned.png rename to src/main/resources/assets/natura/textures/blocks/brail_normal_turned.png diff --git a/resources/assets/natura/textures/blocks/cloud_dark.png b/src/main/resources/assets/natura/textures/blocks/cloud_dark.png similarity index 100% rename from resources/assets/natura/textures/blocks/cloud_dark.png rename to src/main/resources/assets/natura/textures/blocks/cloud_dark.png diff --git a/resources/assets/natura/textures/blocks/cloud_gray.png b/src/main/resources/assets/natura/textures/blocks/cloud_gray.png similarity index 100% rename from resources/assets/natura/textures/blocks/cloud_gray.png rename to src/main/resources/assets/natura/textures/blocks/cloud_gray.png diff --git a/resources/assets/natura/textures/blocks/cloud_sulfur.png b/src/main/resources/assets/natura/textures/blocks/cloud_sulfur.png similarity index 100% rename from resources/assets/natura/textures/blocks/cloud_sulfur.png rename to src/main/resources/assets/natura/textures/blocks/cloud_sulfur.png diff --git a/resources/assets/natura/textures/blocks/cloud_white.png b/src/main/resources/assets/natura/textures/blocks/cloud_white.png similarity index 100% rename from resources/assets/natura/textures/blocks/cloud_white.png rename to src/main/resources/assets/natura/textures/blocks/cloud_white.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_amber.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_amber.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_amber.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_amber.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_blue.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_blue.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_blue.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_green.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_green.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_green.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_magenta.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_magenta.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_magenta.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_magenta.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_purple.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_purple.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_purple.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_red.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_red.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_red.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_red.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_silver.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_silver.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_silver.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_silver.png diff --git a/resources/assets/natura/textures/blocks/corrupt_brick_yellow.png b/src/main/resources/assets/natura/textures/blocks/corrupt_brick_yellow.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_brick_yellow.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_brick_yellow.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_amber.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_amber.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_amber.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_amber.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_blue.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_blue.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_blue.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_green.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_green.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_green.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_magenta.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_magenta.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_magenta.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_magenta.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_purple.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_purple.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_purple.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_red.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_red.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_red.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_red.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_silver.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_silver.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_silver.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_silver.png diff --git a/resources/assets/natura/textures/blocks/corrupt_stone_yellow.png b/src/main/resources/assets/natura/textures/blocks/corrupt_stone_yellow.png similarity index 100% rename from resources/assets/natura/textures/blocks/corrupt_stone_yellow.png rename to src/main/resources/assets/natura/textures/blocks/corrupt_stone_yellow.png diff --git a/resources/assets/natura/textures/blocks/corruptor_amber.png b/src/main/resources/assets/natura/textures/blocks/corruptor_amber.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_amber.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_amber.png diff --git a/resources/assets/natura/textures/blocks/corruptor_blue.png b/src/main/resources/assets/natura/textures/blocks/corruptor_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_blue.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_blue.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_amber.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_amber.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_amber.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_amber.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_blue.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_blue.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_blue.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_green.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_green.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_green.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_magenta.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_magenta.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_magenta.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_magenta.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_purple.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_purple.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_purple.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_red.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_red.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_red.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_red.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_silver.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_silver.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_silver.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_silver.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_side_yellow.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_yellow.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_side_yellow.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_side_yellow.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_amber.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_amber.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_amber.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_amber.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_blue.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_blue.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_blue.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_green.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_green.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_green.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_magenta.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_magenta.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_magenta.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_magenta.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_purple.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_purple.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_purple.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_red.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_red.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_red.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_red.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_silver.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_silver.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_silver.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_silver.png diff --git a/resources/assets/natura/textures/blocks/corruptor_grass_top_yellow.png b/src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_yellow.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_grass_top_yellow.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_grass_top_yellow.png diff --git a/resources/assets/natura/textures/blocks/corruptor_green.png b/src/main/resources/assets/natura/textures/blocks/corruptor_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_green.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_green.png diff --git a/resources/assets/natura/textures/blocks/corruptor_magenta.png b/src/main/resources/assets/natura/textures/blocks/corruptor_magenta.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_magenta.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_magenta.png diff --git a/resources/assets/natura/textures/blocks/corruptor_purple.png b/src/main/resources/assets/natura/textures/blocks/corruptor_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_purple.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_purple.png diff --git a/resources/assets/natura/textures/blocks/corruptor_red.png b/src/main/resources/assets/natura/textures/blocks/corruptor_red.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_red.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_red.png diff --git a/resources/assets/natura/textures/blocks/corruptor_silver.png b/src/main/resources/assets/natura/textures/blocks/corruptor_silver.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_silver.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_silver.png diff --git a/resources/assets/natura/textures/blocks/corruptor_yellow.png b/src/main/resources/assets/natura/textures/blocks/corruptor_yellow.png similarity index 100% rename from resources/assets/natura/textures/blocks/corruptor_yellow.png rename to src/main/resources/assets/natura/textures/blocks/corruptor_yellow.png diff --git a/resources/assets/natura/textures/blocks/cotton_1.png b/src/main/resources/assets/natura/textures/blocks/cotton_1.png similarity index 100% rename from resources/assets/natura/textures/blocks/cotton_1.png rename to src/main/resources/assets/natura/textures/blocks/cotton_1.png diff --git a/resources/assets/natura/textures/blocks/cotton_2.png b/src/main/resources/assets/natura/textures/blocks/cotton_2.png similarity index 100% rename from resources/assets/natura/textures/blocks/cotton_2.png rename to src/main/resources/assets/natura/textures/blocks/cotton_2.png diff --git a/resources/assets/natura/textures/blocks/cotton_3.png b/src/main/resources/assets/natura/textures/blocks/cotton_3.png similarity index 100% rename from resources/assets/natura/textures/blocks/cotton_3.png rename to src/main/resources/assets/natura/textures/blocks/cotton_3.png diff --git a/resources/assets/natura/textures/blocks/cotton_4.png b/src/main/resources/assets/natura/textures/blocks/cotton_4.png similarity index 100% rename from resources/assets/natura/textures/blocks/cotton_4.png rename to src/main/resources/assets/natura/textures/blocks/cotton_4.png diff --git a/resources/assets/natura/textures/blocks/cotton_5.png b/src/main/resources/assets/natura/textures/blocks/cotton_5.png similarity index 100% rename from resources/assets/natura/textures/blocks/cotton_5.png rename to src/main/resources/assets/natura/textures/blocks/cotton_5.png diff --git a/resources/assets/natura/textures/blocks/darkwood_bark.png b/src/main/resources/assets/natura/textures/blocks/darkwood_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_bark.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_bark.png diff --git a/resources/assets/natura/textures/blocks/darkwood_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/darkwood_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/darkwood_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/darkwood_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/darkwood_door_item.png b/src/main/resources/assets/natura/textures/blocks/darkwood_door_item.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_door_item.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_door_item.png diff --git a/resources/assets/natura/textures/blocks/darkwood_door_top.png b/src/main/resources/assets/natura/textures/blocks/darkwood_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_door_top.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_door_top.png diff --git a/resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_flowering_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_fruit_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/darkwood_heart.png b/src/main/resources/assets/natura/textures/blocks/darkwood_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_heart.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_heart.png diff --git a/resources/assets/natura/textures/blocks/darkwood_ladder.png b/src/main/resources/assets/natura/textures/blocks/darkwood_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_ladder.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_ladder.png diff --git a/resources/assets/natura/textures/blocks/darkwood_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/darkwood_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/darkwood_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/darkwood_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/darkwood_planks.png b/src/main/resources/assets/natura/textures/blocks/darkwood_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_planks.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_planks.png diff --git a/resources/assets/natura/textures/blocks/darkwood_sapling.png b/src/main/resources/assets/natura/textures/blocks/darkwood_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_sapling.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_sapling.png diff --git a/resources/assets/natura/textures/blocks/darkwood_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/darkwood_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/darkwood_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/darkwood_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/darkwood_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/darkwood_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/darkwood_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/darkwood_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/darkwood_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/darkwood_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/duskberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/duskberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/duskberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/duskberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/duskberry_fast.png b/src/main/resources/assets/natura/textures/blocks/duskberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/duskberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/duskberry_fast.png diff --git a/resources/assets/natura/textures/blocks/duskberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/duskberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/duskberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/duskberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/duskberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/duskberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/duskberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/duskberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_bark.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_bark.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_bark.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_door_top.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_door_top.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_door_top.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_heart.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_heart.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_heart.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_ladder.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_ladder.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_ladder.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_planks.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_planks.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_planks.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_sapling.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_sapling.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_sapling.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/eucalyptus_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/eucalyptus_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/eucalyptus_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/eucalyptus_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/flower_bluebells.png b/src/main/resources/assets/natura/textures/blocks/flower_bluebells.png similarity index 100% rename from resources/assets/natura/textures/blocks/flower_bluebells.png rename to src/main/resources/assets/natura/textures/blocks/flower_bluebells.png diff --git a/resources/assets/natura/textures/blocks/fusewood_bark.png b/src/main/resources/assets/natura/textures/blocks/fusewood_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_bark.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_bark.png diff --git a/resources/assets/natura/textures/blocks/fusewood_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/fusewood_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/fusewood_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/fusewood_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/fusewood_door_top.png b/src/main/resources/assets/natura/textures/blocks/fusewood_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_door_top.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_door_top.png diff --git a/resources/assets/natura/textures/blocks/fusewood_heart.png b/src/main/resources/assets/natura/textures/blocks/fusewood_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_heart.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_heart.png diff --git a/resources/assets/natura/textures/blocks/fusewood_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/fusewood_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/fusewood_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/fusewood_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/fusewood_planks.png b/src/main/resources/assets/natura/textures/blocks/fusewood_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_planks.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_planks.png diff --git a/resources/assets/natura/textures/blocks/fusewood_sapling.png b/src/main/resources/assets/natura/textures/blocks/fusewood_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_sapling.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_sapling.png diff --git a/resources/assets/natura/textures/blocks/fusewood_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/fusewood_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/fusewood_window.png b/src/main/resources/assets/natura/textures/blocks/fusewood_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_window.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_window.png diff --git a/resources/assets/natura/textures/blocks/fusewood_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/fusewood_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/fusewood_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/fusewood_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/fusewood_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/fusewood_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/fusewood_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/fusewood_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/geoberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/geoberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/geoberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/geoberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/geoberry_fast.png b/src/main/resources/assets/natura/textures/blocks/geoberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/geoberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/geoberry_fast.png diff --git a/resources/assets/natura/textures/blocks/geoberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/geoberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/geoberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/geoberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/geoberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/geoberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/geoberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/geoberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_bark.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_bark.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_bark.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_door_top.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_door_top.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_door_top.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_heart.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_heart.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_heart.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_ladder.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_ladder.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_ladder.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_planks.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_planks.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_planks.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_sapling.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_sapling.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_sapling.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/ghostwood_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/ghostwood_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/ghostwood_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/ghostwood_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/glass_heat.png b/src/main/resources/assets/natura/textures/blocks/glass_heat.png similarity index 100% rename from resources/assets/natura/textures/blocks/glass_heat.png rename to src/main/resources/assets/natura/textures/blocks/glass_heat.png diff --git a/resources/assets/natura/textures/blocks/glass_heat_item.png b/src/main/resources/assets/natura/textures/blocks/glass_heat_item.png similarity index 100% rename from resources/assets/natura/textures/blocks/glass_heat_item.png rename to src/main/resources/assets/natura/textures/blocks/glass_heat_item.png diff --git a/resources/assets/natura/textures/blocks/glass_soul.png b/src/main/resources/assets/natura/textures/blocks/glass_soul.png similarity index 100% rename from resources/assets/natura/textures/blocks/glass_soul.png rename to src/main/resources/assets/natura/textures/blocks/glass_soul.png diff --git a/resources/assets/natura/textures/blocks/glass_soul_item.png b/src/main/resources/assets/natura/textures/blocks/glass_soul_item.png similarity index 100% rename from resources/assets/natura/textures/blocks/glass_soul_item.png rename to src/main/resources/assets/natura/textures/blocks/glass_soul_item.png diff --git a/resources/assets/natura/textures/blocks/glass_soulbak.png b/src/main/resources/assets/natura/textures/blocks/glass_soulbak.png similarity index 100% rename from resources/assets/natura/textures/blocks/glass_soulbak.png rename to src/main/resources/assets/natura/textures/blocks/glass_soulbak.png diff --git a/resources/assets/natura/textures/blocks/grass_top.png b/src/main/resources/assets/natura/textures/blocks/grass_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/grass_top.png rename to src/main/resources/assets/natura/textures/blocks/grass_top.png diff --git a/resources/assets/natura/textures/blocks/heatsand.png b/src/main/resources/assets/natura/textures/blocks/heatsand.png similarity index 100% rename from resources/assets/natura/textures/blocks/heatsand.png rename to src/main/resources/assets/natura/textures/blocks/heatsand.png diff --git a/resources/assets/natura/textures/blocks/hopseed_bark.png b/src/main/resources/assets/natura/textures/blocks/hopseed_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_bark.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_bark.png diff --git a/resources/assets/natura/textures/blocks/hopseed_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/hopseed_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/hopseed_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/hopseed_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/hopseed_door_top.png b/src/main/resources/assets/natura/textures/blocks/hopseed_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_door_top.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_door_top.png diff --git a/resources/assets/natura/textures/blocks/hopseed_heart.png b/src/main/resources/assets/natura/textures/blocks/hopseed_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_heart.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_heart.png diff --git a/resources/assets/natura/textures/blocks/hopseed_ladder.png b/src/main/resources/assets/natura/textures/blocks/hopseed_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_ladder.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_ladder.png diff --git a/resources/assets/natura/textures/blocks/hopseed_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/hopseed_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/hopseed_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/hopseed_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/hopseed_planks.png b/src/main/resources/assets/natura/textures/blocks/hopseed_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_planks.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_planks.png diff --git a/resources/assets/natura/textures/blocks/hopseed_sapling.png b/src/main/resources/assets/natura/textures/blocks/hopseed_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_sapling.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_sapling.png diff --git a/resources/assets/natura/textures/blocks/hopseed_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/hopseed_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/hopseed_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/hopseed_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/hopseed_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/hopseed_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/hopseed_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/hopseed_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/hopseed_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/hopseed_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/infernal_stone.png b/src/main/resources/assets/natura/textures/blocks/infernal_stone.png similarity index 100% rename from resources/assets/natura/textures/blocks/infernal_stone.png rename to src/main/resources/assets/natura/textures/blocks/infernal_stone.png diff --git a/resources/assets/natura/textures/blocks/maple_bark.png b/src/main/resources/assets/natura/textures/blocks/maple_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_bark.png rename to src/main/resources/assets/natura/textures/blocks/maple_bark.png diff --git a/resources/assets/natura/textures/blocks/maple_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/maple_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/maple_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/maple_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/maple_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/maple_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/maple_door_top.png b/src/main/resources/assets/natura/textures/blocks/maple_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_door_top.png rename to src/main/resources/assets/natura/textures/blocks/maple_door_top.png diff --git a/resources/assets/natura/textures/blocks/maple_heart.png b/src/main/resources/assets/natura/textures/blocks/maple_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_heart.png rename to src/main/resources/assets/natura/textures/blocks/maple_heart.png diff --git a/resources/assets/natura/textures/blocks/maple_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/maple_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/maple_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/maple_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/maple_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/maple_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/maple_planks.png b/src/main/resources/assets/natura/textures/blocks/maple_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_planks.png rename to src/main/resources/assets/natura/textures/blocks/maple_planks.png diff --git a/resources/assets/natura/textures/blocks/maple_sapling.png b/src/main/resources/assets/natura/textures/blocks/maple_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_sapling.png rename to src/main/resources/assets/natura/textures/blocks/maple_sapling.png diff --git a/resources/assets/natura/textures/blocks/maple_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/maple_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/maple_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/maple_window.png b/src/main/resources/assets/natura/textures/blocks/maple_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_window.png rename to src/main/resources/assets/natura/textures/blocks/maple_window.png diff --git a/resources/assets/natura/textures/blocks/maple_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/maple_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/maple_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/maple_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/maple_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/maple_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/maple_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/maple_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/maple_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/maple_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/mushroom_amber.png b/src/main/resources/assets/natura/textures/blocks/mushroom_amber.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_amber.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_amber.png diff --git a/resources/assets/natura/textures/blocks/mushroom_blue.png b/src/main/resources/assets/natura/textures/blocks/mushroom_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_blue.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_blue.png diff --git a/resources/assets/natura/textures/blocks/mushroom_green.png b/src/main/resources/assets/natura/textures/blocks/mushroom_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_green.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_green.png diff --git a/resources/assets/natura/textures/blocks/mushroom_inside_blue.png b/src/main/resources/assets/natura/textures/blocks/mushroom_inside_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_inside_blue.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_inside_blue.png diff --git a/resources/assets/natura/textures/blocks/mushroom_inside_green.png b/src/main/resources/assets/natura/textures/blocks/mushroom_inside_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_inside_green.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_inside_green.png diff --git a/resources/assets/natura/textures/blocks/mushroom_inside_purple.png b/src/main/resources/assets/natura/textures/blocks/mushroom_inside_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_inside_purple.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_inside_purple.png diff --git a/resources/assets/natura/textures/blocks/mushroom_purple.png b/src/main/resources/assets/natura/textures/blocks/mushroom_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_purple.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_purple.png diff --git a/resources/assets/natura/textures/blocks/mushroom_skin_blue.png b/src/main/resources/assets/natura/textures/blocks/mushroom_skin_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_skin_blue.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_skin_blue.png diff --git a/resources/assets/natura/textures/blocks/mushroom_skin_green.png b/src/main/resources/assets/natura/textures/blocks/mushroom_skin_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_skin_green.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_skin_green.png diff --git a/resources/assets/natura/textures/blocks/mushroom_skin_purple.png b/src/main/resources/assets/natura/textures/blocks/mushroom_skin_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_skin_purple.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_skin_purple.png diff --git a/resources/assets/natura/textures/blocks/mushroom_stem_blue.png b/src/main/resources/assets/natura/textures/blocks/mushroom_stem_blue.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_stem_blue.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_stem_blue.png diff --git a/resources/assets/natura/textures/blocks/mushroom_stem_green.png b/src/main/resources/assets/natura/textures/blocks/mushroom_stem_green.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_stem_green.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_stem_green.png diff --git a/resources/assets/natura/textures/blocks/mushroom_stem_purple.png b/src/main/resources/assets/natura/textures/blocks/mushroom_stem_purple.png similarity index 100% rename from resources/assets/natura/textures/blocks/mushroom_stem_purple.png rename to src/main/resources/assets/natura/textures/blocks/mushroom_stem_purple.png diff --git a/resources/assets/natura/textures/blocks/ndispenser_front_horizontal.png b/src/main/resources/assets/natura/textures/blocks/ndispenser_front_horizontal.png similarity index 100% rename from resources/assets/natura/textures/blocks/ndispenser_front_horizontal.png rename to src/main/resources/assets/natura/textures/blocks/ndispenser_front_horizontal.png diff --git a/resources/assets/natura/textures/blocks/ndispenser_front_vertical.png b/src/main/resources/assets/natura/textures/blocks/ndispenser_front_vertical.png similarity index 100% rename from resources/assets/natura/textures/blocks/ndispenser_front_vertical.png rename to src/main/resources/assets/natura/textures/blocks/ndispenser_front_vertical.png diff --git a/resources/assets/natura/textures/blocks/ndropper_front_horizontal.png b/src/main/resources/assets/natura/textures/blocks/ndropper_front_horizontal.png similarity index 100% rename from resources/assets/natura/textures/blocks/ndropper_front_horizontal.png rename to src/main/resources/assets/natura/textures/blocks/ndropper_front_horizontal.png diff --git a/resources/assets/natura/textures/blocks/ndropper_front_vertical.png b/src/main/resources/assets/natura/textures/blocks/ndropper_front_vertical.png similarity index 100% rename from resources/assets/natura/textures/blocks/ndropper_front_vertical.png rename to src/main/resources/assets/natura/textures/blocks/ndropper_front_vertical.png diff --git a/resources/assets/natura/textures/blocks/nfurnace_off.png b/src/main/resources/assets/natura/textures/blocks/nfurnace_off.png similarity index 100% rename from resources/assets/natura/textures/blocks/nfurnace_off.png rename to src/main/resources/assets/natura/textures/blocks/nfurnace_off.png diff --git a/resources/assets/natura/textures/blocks/nfurnace_on.png b/src/main/resources/assets/natura/textures/blocks/nfurnace_on.png similarity index 100% rename from resources/assets/natura/textures/blocks/nfurnace_on.png rename to src/main/resources/assets/natura/textures/blocks/nfurnace_on.png diff --git a/resources/assets/natura/textures/blocks/nfurnace_side.png b/src/main/resources/assets/natura/textures/blocks/nfurnace_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/nfurnace_side.png rename to src/main/resources/assets/natura/textures/blocks/nfurnace_side.png diff --git a/resources/assets/natura/textures/blocks/nfurnace_top.png b/src/main/resources/assets/natura/textures/blocks/nfurnace_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/nfurnace_top.png rename to src/main/resources/assets/natura/textures/blocks/nfurnace_top.png diff --git a/resources/assets/natura/textures/blocks/nhopper_inside.png b/src/main/resources/assets/natura/textures/blocks/nhopper_inside.png similarity index 100% rename from resources/assets/natura/textures/blocks/nhopper_inside.png rename to src/main/resources/assets/natura/textures/blocks/nhopper_inside.png diff --git a/resources/assets/natura/textures/blocks/nhopper_outside.png b/src/main/resources/assets/natura/textures/blocks/nhopper_outside.png similarity index 100% rename from resources/assets/natura/textures/blocks/nhopper_outside.png rename to src/main/resources/assets/natura/textures/blocks/nhopper_outside.png diff --git a/resources/assets/natura/textures/blocks/nhopper_top.png b/src/main/resources/assets/natura/textures/blocks/nhopper_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/nhopper_top.png rename to src/main/resources/assets/natura/textures/blocks/nhopper_top.png diff --git a/resources/assets/natura/textures/blocks/nlever.png b/src/main/resources/assets/natura/textures/blocks/nlever.png similarity index 100% rename from resources/assets/natura/textures/blocks/nlever.png rename to src/main/resources/assets/natura/textures/blocks/nlever.png diff --git a/resources/assets/natura/textures/blocks/oak_window.png b/src/main/resources/assets/natura/textures/blocks/oak_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/oak_window.png rename to src/main/resources/assets/natura/textures/blocks/oak_window.png diff --git a/resources/assets/natura/textures/blocks/obelisk.png b/src/main/resources/assets/natura/textures/blocks/obelisk.png similarity index 100% rename from resources/assets/natura/textures/blocks/obelisk.png rename to src/main/resources/assets/natura/textures/blocks/obelisk.png diff --git a/resources/assets/natura/textures/blocks/obelisk_active.png b/src/main/resources/assets/natura/textures/blocks/obelisk_active.png similarity index 100% rename from resources/assets/natura/textures/blocks/obelisk_active.png rename to src/main/resources/assets/natura/textures/blocks/obelisk_active.png diff --git a/resources/assets/natura/textures/blocks/pine_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/pine_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/pine_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/pine_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/pine_door_top.png b/src/main/resources/assets/natura/textures/blocks/pine_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/pine_door_top.png rename to src/main/resources/assets/natura/textures/blocks/pine_door_top.png diff --git a/resources/assets/natura/textures/blocks/pine_window.png b/src/main/resources/assets/natura/textures/blocks/pine_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/pine_window.png rename to src/main/resources/assets/natura/textures/blocks/pine_window.png diff --git a/resources/assets/natura/textures/blocks/piston_bottom.png b/src/main/resources/assets/natura/textures/blocks/piston_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/piston_bottom.png rename to src/main/resources/assets/natura/textures/blocks/piston_bottom.png diff --git a/resources/assets/natura/textures/blocks/piston_inner.png b/src/main/resources/assets/natura/textures/blocks/piston_inner.png similarity index 100% rename from resources/assets/natura/textures/blocks/piston_inner.png rename to src/main/resources/assets/natura/textures/blocks/piston_inner.png diff --git a/resources/assets/natura/textures/blocks/piston_side.png b/src/main/resources/assets/natura/textures/blocks/piston_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/piston_side.png rename to src/main/resources/assets/natura/textures/blocks/piston_side.png diff --git a/resources/assets/natura/textures/blocks/piston_top_normal.png b/src/main/resources/assets/natura/textures/blocks/piston_top_normal.png similarity index 100% rename from resources/assets/natura/textures/blocks/piston_top_normal.png rename to src/main/resources/assets/natura/textures/blocks/piston_top_normal.png diff --git a/resources/assets/natura/textures/blocks/piston_top_sticky.png b/src/main/resources/assets/natura/textures/blocks/piston_top_sticky.png similarity index 100% rename from resources/assets/natura/textures/blocks/piston_top_sticky.png rename to src/main/resources/assets/natura/textures/blocks/piston_top_sticky.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_bark.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_bark.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_bark.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_door_top.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_door_top.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_door_top.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_heart.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_heart.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_heart.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_planks.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_planks.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_planks.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_planks_dark.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_planks_dark.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_planks_dark.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_planks_dark.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_planks_light.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_planks_light.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_planks_light.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_planks_light.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_sapling.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_sapling.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_sapling.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_window.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_window.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_window.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/purpleheart_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/purpleheart_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/purpleheart_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/purpleheart_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/raspberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/raspberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/raspberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/raspberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/raspberry_fast.png b/src/main/resources/assets/natura/textures/blocks/raspberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/raspberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/raspberry_fast.png diff --git a/resources/assets/natura/textures/blocks/raspberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/raspberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/raspberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/raspberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/raspberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/raspberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/raspberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/raspberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/redwood_bark.png b/src/main/resources/assets/natura/textures/blocks/redwood_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_bark.png rename to src/main/resources/assets/natura/textures/blocks/redwood_bark.png diff --git a/resources/assets/natura/textures/blocks/redwood_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/redwood_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/redwood_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/redwood_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/redwood_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/redwood_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/redwood_door_top.png b/src/main/resources/assets/natura/textures/blocks/redwood_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_door_top.png rename to src/main/resources/assets/natura/textures/blocks/redwood_door_top.png diff --git a/resources/assets/natura/textures/blocks/redwood_heart.png b/src/main/resources/assets/natura/textures/blocks/redwood_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_heart.png rename to src/main/resources/assets/natura/textures/blocks/redwood_heart.png diff --git a/resources/assets/natura/textures/blocks/redwood_ladder.png b/src/main/resources/assets/natura/textures/blocks/redwood_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_ladder.png rename to src/main/resources/assets/natura/textures/blocks/redwood_ladder.png diff --git a/resources/assets/natura/textures/blocks/redwood_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/redwood_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/redwood_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/redwood_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/redwood_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/redwood_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/redwood_planks.png b/src/main/resources/assets/natura/textures/blocks/redwood_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_planks.png rename to src/main/resources/assets/natura/textures/blocks/redwood_planks.png diff --git a/resources/assets/natura/textures/blocks/redwood_root.png b/src/main/resources/assets/natura/textures/blocks/redwood_root.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_root.png rename to src/main/resources/assets/natura/textures/blocks/redwood_root.png diff --git a/resources/assets/natura/textures/blocks/redwood_sapling.png b/src/main/resources/assets/natura/textures/blocks/redwood_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_sapling.png rename to src/main/resources/assets/natura/textures/blocks/redwood_sapling.png diff --git a/resources/assets/natura/textures/blocks/redwood_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/redwood_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/redwood_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/redwood_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/redwood_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/redwood_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/redwood_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/redwood_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/redwood_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/redwood_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/redwood_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwood_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/redwood_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/redwoodbark_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/redwoodbark_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwoodbark_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/redwoodbark_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/redwoodbark_door_top.png b/src/main/resources/assets/natura/textures/blocks/redwoodbark_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/redwoodbark_door_top.png rename to src/main/resources/assets/natura/textures/blocks/redwoodbark_door_top.png diff --git a/resources/assets/natura/textures/blocks/saguaro_bottom.png b/src/main/resources/assets/natura/textures/blocks/saguaro_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/saguaro_bottom.png rename to src/main/resources/assets/natura/textures/blocks/saguaro_bottom.png diff --git a/resources/assets/natura/textures/blocks/saguaro_fruit.png b/src/main/resources/assets/natura/textures/blocks/saguaro_fruit.png similarity index 100% rename from resources/assets/natura/textures/blocks/saguaro_fruit.png rename to src/main/resources/assets/natura/textures/blocks/saguaro_fruit.png diff --git a/resources/assets/natura/textures/blocks/saguaro_side.png b/src/main/resources/assets/natura/textures/blocks/saguaro_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/saguaro_side.png rename to src/main/resources/assets/natura/textures/blocks/saguaro_side.png diff --git a/resources/assets/natura/textures/blocks/saguaro_top.png b/src/main/resources/assets/natura/textures/blocks/saguaro_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/saguaro_top.png rename to src/main/resources/assets/natura/textures/blocks/saguaro_top.png diff --git a/resources/assets/natura/textures/blocks/sakura_bark.png b/src/main/resources/assets/natura/textures/blocks/sakura_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_bark.png rename to src/main/resources/assets/natura/textures/blocks/sakura_bark.png diff --git a/resources/assets/natura/textures/blocks/sakura_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/sakura_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/sakura_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/sakura_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/sakura_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/sakura_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/sakura_door_top.png b/src/main/resources/assets/natura/textures/blocks/sakura_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_door_top.png rename to src/main/resources/assets/natura/textures/blocks/sakura_door_top.png diff --git a/resources/assets/natura/textures/blocks/sakura_heart.png b/src/main/resources/assets/natura/textures/blocks/sakura_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_heart.png rename to src/main/resources/assets/natura/textures/blocks/sakura_heart.png diff --git a/resources/assets/natura/textures/blocks/sakura_ladder.png b/src/main/resources/assets/natura/textures/blocks/sakura_ladder.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_ladder.png rename to src/main/resources/assets/natura/textures/blocks/sakura_ladder.png diff --git a/resources/assets/natura/textures/blocks/sakura_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/sakura_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/sakura_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/sakura_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/sakura_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/sakura_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/sakura_planks.png b/src/main/resources/assets/natura/textures/blocks/sakura_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_planks.png rename to src/main/resources/assets/natura/textures/blocks/sakura_planks.png diff --git a/resources/assets/natura/textures/blocks/sakura_sapling.png b/src/main/resources/assets/natura/textures/blocks/sakura_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_sapling.png rename to src/main/resources/assets/natura/textures/blocks/sakura_sapling.png diff --git a/resources/assets/natura/textures/blocks/sakura_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/sakura_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/sakura_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/sakura_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/sakura_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/sakura_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/sakura_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/sakura_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/sakura_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/sakura_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/sakura_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/sakura_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/sakura_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/silt_1.png b/src/main/resources/assets/natura/textures/blocks/silt_1.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_1.png rename to src/main/resources/assets/natura/textures/blocks/silt_1.png diff --git a/resources/assets/natura/textures/blocks/silt_2.png b/src/main/resources/assets/natura/textures/blocks/silt_2.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_2.png rename to src/main/resources/assets/natura/textures/blocks/silt_2.png diff --git a/resources/assets/natura/textures/blocks/silt_3.png b/src/main/resources/assets/natura/textures/blocks/silt_3.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_3.png rename to src/main/resources/assets/natura/textures/blocks/silt_3.png diff --git a/resources/assets/natura/textures/blocks/silt_4.png b/src/main/resources/assets/natura/textures/blocks/silt_4.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_4.png rename to src/main/resources/assets/natura/textures/blocks/silt_4.png diff --git a/resources/assets/natura/textures/blocks/silt_5.png b/src/main/resources/assets/natura/textures/blocks/silt_5.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_5.png rename to src/main/resources/assets/natura/textures/blocks/silt_5.png diff --git a/resources/assets/natura/textures/blocks/silt_6.png b/src/main/resources/assets/natura/textures/blocks/silt_6.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_6.png rename to src/main/resources/assets/natura/textures/blocks/silt_6.png diff --git a/resources/assets/natura/textures/blocks/silt_7.png b/src/main/resources/assets/natura/textures/blocks/silt_7.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_7.png rename to src/main/resources/assets/natura/textures/blocks/silt_7.png diff --git a/resources/assets/natura/textures/blocks/silt_8.png b/src/main/resources/assets/natura/textures/blocks/silt_8.png similarity index 100% rename from resources/assets/natura/textures/blocks/silt_8.png rename to src/main/resources/assets/natura/textures/blocks/silt_8.png diff --git a/resources/assets/natura/textures/blocks/silverbell_bark.png b/src/main/resources/assets/natura/textures/blocks/silverbell_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_bark.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_bark.png diff --git a/resources/assets/natura/textures/blocks/silverbell_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/silverbell_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/silverbell_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/silverbell_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/silverbell_door_top.png b/src/main/resources/assets/natura/textures/blocks/silverbell_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_door_top.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_door_top.png diff --git a/resources/assets/natura/textures/blocks/silverbell_heart.png b/src/main/resources/assets/natura/textures/blocks/silverbell_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_heart.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_heart.png diff --git a/resources/assets/natura/textures/blocks/silverbell_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/silverbell_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/silverbell_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/silverbell_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/silverbell_planks.png b/src/main/resources/assets/natura/textures/blocks/silverbell_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_planks.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_planks.png diff --git a/resources/assets/natura/textures/blocks/silverbell_sapling.png b/src/main/resources/assets/natura/textures/blocks/silverbell_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_sapling.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_sapling.png diff --git a/resources/assets/natura/textures/blocks/silverbell_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/silverbell_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/silverbell_window.png b/src/main/resources/assets/natura/textures/blocks/silverbell_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_window.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_window.png diff --git a/resources/assets/natura/textures/blocks/silverbell_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/silverbell_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/silverbell_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/silverbell_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/silverbell_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/silverbell_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/silverbell_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/silverbell_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/skyberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/skyberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/skyberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/skyberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/skyberry_fast.png b/src/main/resources/assets/natura/textures/blocks/skyberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/skyberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/skyberry_fast.png diff --git a/resources/assets/natura/textures/blocks/skyberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/skyberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/skyberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/skyberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/skyberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/skyberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/skyberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/skyberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/spruce_window.png b/src/main/resources/assets/natura/textures/blocks/spruce_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/spruce_window.png rename to src/main/resources/assets/natura/textures/blocks/spruce_window.png diff --git a/resources/assets/natura/textures/blocks/stingberry_fancy.png b/src/main/resources/assets/natura/textures/blocks/stingberry_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/stingberry_fancy.png rename to src/main/resources/assets/natura/textures/blocks/stingberry_fancy.png diff --git a/resources/assets/natura/textures/blocks/stingberry_fast.png b/src/main/resources/assets/natura/textures/blocks/stingberry_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/stingberry_fast.png rename to src/main/resources/assets/natura/textures/blocks/stingberry_fast.png diff --git a/resources/assets/natura/textures/blocks/stingberry_ripe_fancy.png b/src/main/resources/assets/natura/textures/blocks/stingberry_ripe_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/stingberry_ripe_fancy.png rename to src/main/resources/assets/natura/textures/blocks/stingberry_ripe_fancy.png diff --git a/resources/assets/natura/textures/blocks/stingberry_ripe_fast.png b/src/main/resources/assets/natura/textures/blocks/stingberry_ripe_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/stingberry_ripe_fast.png rename to src/main/resources/assets/natura/textures/blocks/stingberry_ripe_fast.png diff --git a/resources/assets/natura/textures/blocks/tainted_farmland_dry.png b/src/main/resources/assets/natura/textures/blocks/tainted_farmland_dry.png similarity index 100% rename from resources/assets/natura/textures/blocks/tainted_farmland_dry.png rename to src/main/resources/assets/natura/textures/blocks/tainted_farmland_dry.png diff --git a/resources/assets/natura/textures/blocks/tainted_farmland_heated.png b/src/main/resources/assets/natura/textures/blocks/tainted_farmland_heated.png similarity index 100% rename from resources/assets/natura/textures/blocks/tainted_farmland_heated.png rename to src/main/resources/assets/natura/textures/blocks/tainted_farmland_heated.png diff --git a/resources/assets/natura/textures/blocks/tainted_soil.png b/src/main/resources/assets/natura/textures/blocks/tainted_soil.png similarity index 100% rename from resources/assets/natura/textures/blocks/tainted_soil.png rename to src/main/resources/assets/natura/textures/blocks/tainted_soil.png diff --git a/resources/assets/natura/textures/blocks/thornvine.png b/src/main/resources/assets/natura/textures/blocks/thornvine.png similarity index 100% rename from resources/assets/natura/textures/blocks/thornvine.png rename to src/main/resources/assets/natura/textures/blocks/thornvine.png diff --git a/resources/assets/natura/textures/blocks/tiger_bark.png b/src/main/resources/assets/natura/textures/blocks/tiger_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_bark.png rename to src/main/resources/assets/natura/textures/blocks/tiger_bark.png diff --git a/resources/assets/natura/textures/blocks/tiger_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/tiger_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/tiger_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/tiger_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/tiger_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/tiger_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/tiger_door_top.png b/src/main/resources/assets/natura/textures/blocks/tiger_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_door_top.png rename to src/main/resources/assets/natura/textures/blocks/tiger_door_top.png diff --git a/resources/assets/natura/textures/blocks/tiger_heart.png b/src/main/resources/assets/natura/textures/blocks/tiger_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_heart.png rename to src/main/resources/assets/natura/textures/blocks/tiger_heart.png diff --git a/resources/assets/natura/textures/blocks/tiger_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/tiger_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/tiger_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/tiger_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/tiger_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/tiger_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/tiger_planks.png b/src/main/resources/assets/natura/textures/blocks/tiger_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_planks.png rename to src/main/resources/assets/natura/textures/blocks/tiger_planks.png diff --git a/resources/assets/natura/textures/blocks/tiger_sapling.png b/src/main/resources/assets/natura/textures/blocks/tiger_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_sapling.png rename to src/main/resources/assets/natura/textures/blocks/tiger_sapling.png diff --git a/resources/assets/natura/textures/blocks/tiger_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/tiger_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/tiger_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/tiger_window.png b/src/main/resources/assets/natura/textures/blocks/tiger_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_window.png rename to src/main/resources/assets/natura/textures/blocks/tiger_window.png diff --git a/resources/assets/natura/textures/blocks/tiger_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/tiger_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/tiger_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/tiger_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/tiger_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/tiger_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/tiger_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/tiger_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/tiger_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/tiger_workbench_top.png diff --git a/resources/assets/natura/textures/blocks/willow_bark.png b/src/main/resources/assets/natura/textures/blocks/willow_bark.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_bark.png rename to src/main/resources/assets/natura/textures/blocks/willow_bark.png diff --git a/resources/assets/natura/textures/blocks/willow_bookshelf.png b/src/main/resources/assets/natura/textures/blocks/willow_bookshelf.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_bookshelf.png rename to src/main/resources/assets/natura/textures/blocks/willow_bookshelf.png diff --git a/resources/assets/natura/textures/blocks/willow_door_bottom.png b/src/main/resources/assets/natura/textures/blocks/willow_door_bottom.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_door_bottom.png rename to src/main/resources/assets/natura/textures/blocks/willow_door_bottom.png diff --git a/resources/assets/natura/textures/blocks/willow_door_top.png b/src/main/resources/assets/natura/textures/blocks/willow_door_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_door_top.png rename to src/main/resources/assets/natura/textures/blocks/willow_door_top.png diff --git a/resources/assets/natura/textures/blocks/willow_heart.png b/src/main/resources/assets/natura/textures/blocks/willow_heart.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_heart.png rename to src/main/resources/assets/natura/textures/blocks/willow_heart.png diff --git a/resources/assets/natura/textures/blocks/willow_leaves_fancy.png b/src/main/resources/assets/natura/textures/blocks/willow_leaves_fancy.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_leaves_fancy.png rename to src/main/resources/assets/natura/textures/blocks/willow_leaves_fancy.png diff --git a/resources/assets/natura/textures/blocks/willow_leaves_fast.png b/src/main/resources/assets/natura/textures/blocks/willow_leaves_fast.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_leaves_fast.png rename to src/main/resources/assets/natura/textures/blocks/willow_leaves_fast.png diff --git a/resources/assets/natura/textures/blocks/willow_planks.png b/src/main/resources/assets/natura/textures/blocks/willow_planks.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_planks.png rename to src/main/resources/assets/natura/textures/blocks/willow_planks.png diff --git a/resources/assets/natura/textures/blocks/willow_sapling.png b/src/main/resources/assets/natura/textures/blocks/willow_sapling.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_sapling.png rename to src/main/resources/assets/natura/textures/blocks/willow_sapling.png diff --git a/resources/assets/natura/textures/blocks/willow_trapdoor.png b/src/main/resources/assets/natura/textures/blocks/willow_trapdoor.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_trapdoor.png rename to src/main/resources/assets/natura/textures/blocks/willow_trapdoor.png diff --git a/resources/assets/natura/textures/blocks/willow_window.png b/src/main/resources/assets/natura/textures/blocks/willow_window.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_window.png rename to src/main/resources/assets/natura/textures/blocks/willow_window.png diff --git a/resources/assets/natura/textures/blocks/willow_workbench_face.png b/src/main/resources/assets/natura/textures/blocks/willow_workbench_face.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_workbench_face.png rename to src/main/resources/assets/natura/textures/blocks/willow_workbench_face.png diff --git a/resources/assets/natura/textures/blocks/willow_workbench_side.png b/src/main/resources/assets/natura/textures/blocks/willow_workbench_side.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_workbench_side.png rename to src/main/resources/assets/natura/textures/blocks/willow_workbench_side.png diff --git a/resources/assets/natura/textures/blocks/willow_workbench_top.png b/src/main/resources/assets/natura/textures/blocks/willow_workbench_top.png similarity index 100% rename from resources/assets/natura/textures/blocks/willow_workbench_top.png rename to src/main/resources/assets/natura/textures/blocks/willow_workbench_top.png diff --git a/resources/assets/natura/textures/boats/mapleboat.png b/src/main/resources/assets/natura/textures/boats/mapleboat.png similarity index 100% rename from resources/assets/natura/textures/boats/mapleboat.png rename to src/main/resources/assets/natura/textures/boats/mapleboat.png diff --git a/resources/assets/natura/textures/boats/purpleboat.png b/src/main/resources/assets/natura/textures/boats/purpleboat.png similarity index 100% rename from resources/assets/natura/textures/boats/purpleboat.png rename to src/main/resources/assets/natura/textures/boats/purpleboat.png diff --git a/resources/assets/natura/textures/boats/silverboat.png b/src/main/resources/assets/natura/textures/boats/silverboat.png similarity index 100% rename from resources/assets/natura/textures/boats/silverboat.png rename to src/main/resources/assets/natura/textures/boats/silverboat.png diff --git a/resources/assets/natura/textures/boats/tigerboat.png b/src/main/resources/assets/natura/textures/boats/tigerboat.png similarity index 100% rename from resources/assets/natura/textures/boats/tigerboat.png rename to src/main/resources/assets/natura/textures/boats/tigerboat.png diff --git a/resources/assets/natura/textures/boats/willowboat.png b/src/main/resources/assets/natura/textures/boats/willowboat.png similarity index 100% rename from resources/assets/natura/textures/boats/willowboat.png rename to src/main/resources/assets/natura/textures/boats/willowboat.png diff --git a/resources/assets/natura/textures/items/armor_imp_body.png b/src/main/resources/assets/natura/textures/items/armor_imp_body.png similarity index 100% rename from resources/assets/natura/textures/items/armor_imp_body.png rename to src/main/resources/assets/natura/textures/items/armor_imp_body.png diff --git a/resources/assets/natura/textures/items/armor_imp_boots.png b/src/main/resources/assets/natura/textures/items/armor_imp_boots.png similarity index 100% rename from resources/assets/natura/textures/items/armor_imp_boots.png rename to src/main/resources/assets/natura/textures/items/armor_imp_boots.png diff --git a/resources/assets/natura/textures/items/armor_imp_helmet.png b/src/main/resources/assets/natura/textures/items/armor_imp_helmet.png similarity index 100% rename from resources/assets/natura/textures/items/armor_imp_helmet.png rename to src/main/resources/assets/natura/textures/items/armor_imp_helmet.png diff --git a/resources/assets/natura/textures/items/armor_imp_leggings.png b/src/main/resources/assets/natura/textures/items/armor_imp_leggings.png similarity index 100% rename from resources/assets/natura/textures/items/armor_imp_leggings.png rename to src/main/resources/assets/natura/textures/items/armor_imp_leggings.png diff --git a/resources/assets/natura/textures/items/barley_flour.png b/src/main/resources/assets/natura/textures/items/barley_flour.png similarity index 100% rename from resources/assets/natura/textures/items/barley_flour.png rename to src/main/resources/assets/natura/textures/items/barley_flour.png diff --git a/resources/assets/natura/textures/items/barley_plant.png b/src/main/resources/assets/natura/textures/items/barley_plant.png similarity index 100% rename from resources/assets/natura/textures/items/barley_plant.png rename to src/main/resources/assets/natura/textures/items/barley_plant.png diff --git a/resources/assets/natura/textures/items/barley_seeds.png b/src/main/resources/assets/natura/textures/items/barley_seeds.png similarity index 100% rename from resources/assets/natura/textures/items/barley_seeds.png rename to src/main/resources/assets/natura/textures/items/barley_seeds.png diff --git a/resources/assets/natura/textures/items/berry_black.png b/src/main/resources/assets/natura/textures/items/berry_black.png similarity index 100% rename from resources/assets/natura/textures/items/berry_black.png rename to src/main/resources/assets/natura/textures/items/berry_black.png diff --git a/resources/assets/natura/textures/items/berry_blight.png b/src/main/resources/assets/natura/textures/items/berry_blight.png similarity index 100% rename from resources/assets/natura/textures/items/berry_blight.png rename to src/main/resources/assets/natura/textures/items/berry_blight.png diff --git a/resources/assets/natura/textures/items/berry_blue.png b/src/main/resources/assets/natura/textures/items/berry_blue.png similarity index 100% rename from resources/assets/natura/textures/items/berry_blue.png rename to src/main/resources/assets/natura/textures/items/berry_blue.png diff --git a/resources/assets/natura/textures/items/berry_dusk.png b/src/main/resources/assets/natura/textures/items/berry_dusk.png similarity index 100% rename from resources/assets/natura/textures/items/berry_dusk.png rename to src/main/resources/assets/natura/textures/items/berry_dusk.png diff --git a/resources/assets/natura/textures/items/berry_geo.png b/src/main/resources/assets/natura/textures/items/berry_geo.png similarity index 100% rename from resources/assets/natura/textures/items/berry_geo.png rename to src/main/resources/assets/natura/textures/items/berry_geo.png diff --git a/resources/assets/natura/textures/items/berry_medley.png b/src/main/resources/assets/natura/textures/items/berry_medley.png similarity index 100% rename from resources/assets/natura/textures/items/berry_medley.png rename to src/main/resources/assets/natura/textures/items/berry_medley.png diff --git a/resources/assets/natura/textures/items/berry_rasp.png b/src/main/resources/assets/natura/textures/items/berry_rasp.png similarity index 100% rename from resources/assets/natura/textures/items/berry_rasp.png rename to src/main/resources/assets/natura/textures/items/berry_rasp.png diff --git a/resources/assets/natura/textures/items/berry_sky.png b/src/main/resources/assets/natura/textures/items/berry_sky.png similarity index 100% rename from resources/assets/natura/textures/items/berry_sky.png rename to src/main/resources/assets/natura/textures/items/berry_sky.png diff --git a/resources/assets/natura/textures/items/berry_sting.png b/src/main/resources/assets/natura/textures/items/berry_sting.png similarity index 100% rename from resources/assets/natura/textures/items/berry_sting.png rename to src/main/resources/assets/natura/textures/items/berry_sting.png diff --git a/resources/assets/natura/textures/items/birch_stick.png b/src/main/resources/assets/natura/textures/items/birch_stick.png similarity index 100% rename from resources/assets/natura/textures/items/birch_stick.png rename to src/main/resources/assets/natura/textures/items/birch_stick.png diff --git a/resources/assets/natura/textures/items/bloodwood_bow.png b/src/main/resources/assets/natura/textures/items/bloodwood_bow.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_bow.png rename to src/main/resources/assets/natura/textures/items/bloodwood_bow.png diff --git a/resources/assets/natura/textures/items/bloodwood_bow_drawn_0.png b/src/main/resources/assets/natura/textures/items/bloodwood_bow_drawn_0.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_bow_drawn_0.png rename to src/main/resources/assets/natura/textures/items/bloodwood_bow_drawn_0.png diff --git a/resources/assets/natura/textures/items/bloodwood_bow_drawn_1.png b/src/main/resources/assets/natura/textures/items/bloodwood_bow_drawn_1.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_bow_drawn_1.png rename to src/main/resources/assets/natura/textures/items/bloodwood_bow_drawn_1.png diff --git a/resources/assets/natura/textures/items/bloodwood_bow_drawn_2.png b/src/main/resources/assets/natura/textures/items/bloodwood_bow_drawn_2.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_bow_drawn_2.png rename to src/main/resources/assets/natura/textures/items/bloodwood_bow_drawn_2.png diff --git a/resources/assets/natura/textures/items/bloodwood_bowl.png b/src/main/resources/assets/natura/textures/items/bloodwood_bowl.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_bowl.png rename to src/main/resources/assets/natura/textures/items/bloodwood_bowl.png diff --git a/resources/assets/natura/textures/items/bloodwood_door_item.png b/src/main/resources/assets/natura/textures/items/bloodwood_door_item.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_door_item.png rename to src/main/resources/assets/natura/textures/items/bloodwood_door_item.png diff --git a/resources/assets/natura/textures/items/bloodwood_hatchet.png b/src/main/resources/assets/natura/textures/items/bloodwood_hatchet.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_hatchet.png rename to src/main/resources/assets/natura/textures/items/bloodwood_hatchet.png diff --git a/resources/assets/natura/textures/items/bloodwood_kama.png b/src/main/resources/assets/natura/textures/items/bloodwood_kama.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_kama.png rename to src/main/resources/assets/natura/textures/items/bloodwood_kama.png diff --git a/resources/assets/natura/textures/items/bloodwood_pickaxe.png b/src/main/resources/assets/natura/textures/items/bloodwood_pickaxe.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_pickaxe.png rename to src/main/resources/assets/natura/textures/items/bloodwood_pickaxe.png diff --git a/resources/assets/natura/textures/items/bloodwood_shovel.png b/src/main/resources/assets/natura/textures/items/bloodwood_shovel.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_shovel.png rename to src/main/resources/assets/natura/textures/items/bloodwood_shovel.png diff --git a/resources/assets/natura/textures/items/bloodwood_stick.png b/src/main/resources/assets/natura/textures/items/bloodwood_stick.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_stick.png rename to src/main/resources/assets/natura/textures/items/bloodwood_stick.png diff --git a/resources/assets/natura/textures/items/bloodwood_sword.png b/src/main/resources/assets/natura/textures/items/bloodwood_sword.png similarity index 100% rename from resources/assets/natura/textures/items/bloodwood_sword.png rename to src/main/resources/assets/natura/textures/items/bloodwood_sword.png diff --git a/resources/assets/natura/textures/items/cotton_plant.png b/src/main/resources/assets/natura/textures/items/cotton_plant.png similarity index 100% rename from resources/assets/natura/textures/items/cotton_plant.png rename to src/main/resources/assets/natura/textures/items/cotton_plant.png diff --git a/resources/assets/natura/textures/items/cotton_seeds.png b/src/main/resources/assets/natura/textures/items/cotton_seeds.png similarity index 100% rename from resources/assets/natura/textures/items/cotton_seeds.png rename to src/main/resources/assets/natura/textures/items/cotton_seeds.png diff --git a/resources/assets/natura/textures/items/darkwood_bow.png b/src/main/resources/assets/natura/textures/items/darkwood_bow.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_bow.png rename to src/main/resources/assets/natura/textures/items/darkwood_bow.png diff --git a/resources/assets/natura/textures/items/darkwood_bow_drawn_0.png b/src/main/resources/assets/natura/textures/items/darkwood_bow_drawn_0.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_bow_drawn_0.png rename to src/main/resources/assets/natura/textures/items/darkwood_bow_drawn_0.png diff --git a/resources/assets/natura/textures/items/darkwood_bow_drawn_1.png b/src/main/resources/assets/natura/textures/items/darkwood_bow_drawn_1.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_bow_drawn_1.png rename to src/main/resources/assets/natura/textures/items/darkwood_bow_drawn_1.png diff --git a/resources/assets/natura/textures/items/darkwood_bow_drawn_2.png b/src/main/resources/assets/natura/textures/items/darkwood_bow_drawn_2.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_bow_drawn_2.png rename to src/main/resources/assets/natura/textures/items/darkwood_bow_drawn_2.png diff --git a/resources/assets/natura/textures/items/darkwood_bowl.png b/src/main/resources/assets/natura/textures/items/darkwood_bowl.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_bowl.png rename to src/main/resources/assets/natura/textures/items/darkwood_bowl.png diff --git a/resources/assets/natura/textures/items/darkwood_hatchet.png b/src/main/resources/assets/natura/textures/items/darkwood_hatchet.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_hatchet.png rename to src/main/resources/assets/natura/textures/items/darkwood_hatchet.png diff --git a/resources/assets/natura/textures/items/darkwood_kama.png b/src/main/resources/assets/natura/textures/items/darkwood_kama.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_kama.png rename to src/main/resources/assets/natura/textures/items/darkwood_kama.png diff --git a/resources/assets/natura/textures/items/darkwood_pickaxe.png b/src/main/resources/assets/natura/textures/items/darkwood_pickaxe.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_pickaxe.png rename to src/main/resources/assets/natura/textures/items/darkwood_pickaxe.png diff --git a/resources/assets/natura/textures/items/darkwood_shovel.png b/src/main/resources/assets/natura/textures/items/darkwood_shovel.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_shovel.png rename to src/main/resources/assets/natura/textures/items/darkwood_shovel.png diff --git a/resources/assets/natura/textures/items/darkwood_stick.png b/src/main/resources/assets/natura/textures/items/darkwood_stick.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_stick.png rename to src/main/resources/assets/natura/textures/items/darkwood_stick.png diff --git a/resources/assets/natura/textures/items/darkwood_sword.png b/src/main/resources/assets/natura/textures/items/darkwood_sword.png similarity index 100% rename from resources/assets/natura/textures/items/darkwood_sword.png rename to src/main/resources/assets/natura/textures/items/darkwood_sword.png diff --git a/resources/assets/natura/textures/items/dye_blue.png b/src/main/resources/assets/natura/textures/items/dye_blue.png similarity index 100% rename from resources/assets/natura/textures/items/dye_blue.png rename to src/main/resources/assets/natura/textures/items/dye_blue.png diff --git a/resources/assets/natura/textures/items/eucalyptus_door_item.png b/src/main/resources/assets/natura/textures/items/eucalyptus_door_item.png similarity index 100% rename from resources/assets/natura/textures/items/eucalyptus_door_item.png rename to src/main/resources/assets/natura/textures/items/eucalyptus_door_item.png diff --git a/resources/assets/natura/textures/items/eucalyptus_stick.png b/src/main/resources/assets/natura/textures/items/eucalyptus_stick.png similarity index 100% rename from resources/assets/natura/textures/items/eucalyptus_stick.png rename to src/main/resources/assets/natura/textures/items/eucalyptus_stick.png diff --git a/resources/assets/natura/textures/items/flamestring.png b/src/main/resources/assets/natura/textures/items/flamestring.png similarity index 100% rename from resources/assets/natura/textures/items/flamestring.png rename to src/main/resources/assets/natura/textures/items/flamestring.png diff --git a/resources/assets/natura/textures/items/flint_and_blaze.png b/src/main/resources/assets/natura/textures/items/flint_and_blaze.png similarity index 100% rename from resources/assets/natura/textures/items/flint_and_blaze.png rename to src/main/resources/assets/natura/textures/items/flint_and_blaze.png diff --git a/resources/assets/natura/textures/items/fruit_potashapple.png b/src/main/resources/assets/natura/textures/items/fruit_potashapple.png similarity index 100% rename from resources/assets/natura/textures/items/fruit_potashapple.png rename to src/main/resources/assets/natura/textures/items/fruit_potashapple.png diff --git a/resources/assets/natura/textures/items/fusewood_bow.png b/src/main/resources/assets/natura/textures/items/fusewood_bow.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_bow.png rename to src/main/resources/assets/natura/textures/items/fusewood_bow.png diff --git a/resources/assets/natura/textures/items/fusewood_bow_drawn_0.png b/src/main/resources/assets/natura/textures/items/fusewood_bow_drawn_0.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_bow_drawn_0.png rename to src/main/resources/assets/natura/textures/items/fusewood_bow_drawn_0.png diff --git a/resources/assets/natura/textures/items/fusewood_bow_drawn_1.png b/src/main/resources/assets/natura/textures/items/fusewood_bow_drawn_1.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_bow_drawn_1.png rename to src/main/resources/assets/natura/textures/items/fusewood_bow_drawn_1.png diff --git a/resources/assets/natura/textures/items/fusewood_bow_drawn_2.png b/src/main/resources/assets/natura/textures/items/fusewood_bow_drawn_2.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_bow_drawn_2.png rename to src/main/resources/assets/natura/textures/items/fusewood_bow_drawn_2.png diff --git a/resources/assets/natura/textures/items/fusewood_bowl.png b/src/main/resources/assets/natura/textures/items/fusewood_bowl.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_bowl.png rename to src/main/resources/assets/natura/textures/items/fusewood_bowl.png diff --git a/resources/assets/natura/textures/items/fusewood_hatchet.png b/src/main/resources/assets/natura/textures/items/fusewood_hatchet.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_hatchet.png rename to src/main/resources/assets/natura/textures/items/fusewood_hatchet.png diff --git a/resources/assets/natura/textures/items/fusewood_kama.png b/src/main/resources/assets/natura/textures/items/fusewood_kama.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_kama.png rename to src/main/resources/assets/natura/textures/items/fusewood_kama.png diff --git a/resources/assets/natura/textures/items/fusewood_pickaxe.png b/src/main/resources/assets/natura/textures/items/fusewood_pickaxe.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_pickaxe.png rename to src/main/resources/assets/natura/textures/items/fusewood_pickaxe.png diff --git a/resources/assets/natura/textures/items/fusewood_shovel.png b/src/main/resources/assets/natura/textures/items/fusewood_shovel.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_shovel.png rename to src/main/resources/assets/natura/textures/items/fusewood_shovel.png diff --git a/resources/assets/natura/textures/items/fusewood_stick.png b/src/main/resources/assets/natura/textures/items/fusewood_stick.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_stick.png rename to src/main/resources/assets/natura/textures/items/fusewood_stick.png diff --git a/resources/assets/natura/textures/items/fusewood_sword.png b/src/main/resources/assets/natura/textures/items/fusewood_sword.png similarity index 100% rename from resources/assets/natura/textures/items/fusewood_sword.png rename to src/main/resources/assets/natura/textures/items/fusewood_sword.png diff --git a/resources/assets/natura/textures/items/ghostwood_bow.png b/src/main/resources/assets/natura/textures/items/ghostwood_bow.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_bow.png rename to src/main/resources/assets/natura/textures/items/ghostwood_bow.png diff --git a/resources/assets/natura/textures/items/ghostwood_bow_drawn_0.png b/src/main/resources/assets/natura/textures/items/ghostwood_bow_drawn_0.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_bow_drawn_0.png rename to src/main/resources/assets/natura/textures/items/ghostwood_bow_drawn_0.png diff --git a/resources/assets/natura/textures/items/ghostwood_bow_drawn_1.png b/src/main/resources/assets/natura/textures/items/ghostwood_bow_drawn_1.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_bow_drawn_1.png rename to src/main/resources/assets/natura/textures/items/ghostwood_bow_drawn_1.png diff --git a/resources/assets/natura/textures/items/ghostwood_bow_drawn_2.png b/src/main/resources/assets/natura/textures/items/ghostwood_bow_drawn_2.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_bow_drawn_2.png rename to src/main/resources/assets/natura/textures/items/ghostwood_bow_drawn_2.png diff --git a/resources/assets/natura/textures/items/ghostwood_bowl.png b/src/main/resources/assets/natura/textures/items/ghostwood_bowl.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_bowl.png rename to src/main/resources/assets/natura/textures/items/ghostwood_bowl.png diff --git a/resources/assets/natura/textures/items/ghostwood_door_item.png b/src/main/resources/assets/natura/textures/items/ghostwood_door_item.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_door_item.png rename to src/main/resources/assets/natura/textures/items/ghostwood_door_item.png diff --git a/resources/assets/natura/textures/items/ghostwood_fletching.png b/src/main/resources/assets/natura/textures/items/ghostwood_fletching.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_fletching.png rename to src/main/resources/assets/natura/textures/items/ghostwood_fletching.png diff --git a/resources/assets/natura/textures/items/ghostwood_hatchet.png b/src/main/resources/assets/natura/textures/items/ghostwood_hatchet.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_hatchet.png rename to src/main/resources/assets/natura/textures/items/ghostwood_hatchet.png diff --git a/resources/assets/natura/textures/items/ghostwood_kama.png b/src/main/resources/assets/natura/textures/items/ghostwood_kama.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_kama.png rename to src/main/resources/assets/natura/textures/items/ghostwood_kama.png diff --git a/resources/assets/natura/textures/items/ghostwood_pickaxe.png b/src/main/resources/assets/natura/textures/items/ghostwood_pickaxe.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_pickaxe.png rename to src/main/resources/assets/natura/textures/items/ghostwood_pickaxe.png diff --git a/resources/assets/natura/textures/items/ghostwood_shovel.png b/src/main/resources/assets/natura/textures/items/ghostwood_shovel.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_shovel.png rename to src/main/resources/assets/natura/textures/items/ghostwood_shovel.png diff --git a/resources/assets/natura/textures/items/ghostwood_stick.png b/src/main/resources/assets/natura/textures/items/ghostwood_stick.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_stick.png rename to src/main/resources/assets/natura/textures/items/ghostwood_stick.png diff --git a/resources/assets/natura/textures/items/ghostwood_sword.png b/src/main/resources/assets/natura/textures/items/ghostwood_sword.png similarity index 100% rename from resources/assets/natura/textures/items/ghostwood_sword.png rename to src/main/resources/assets/natura/textures/items/ghostwood_sword.png diff --git a/resources/assets/natura/textures/items/hopseed_door_item.png b/src/main/resources/assets/natura/textures/items/hopseed_door_item.png similarity index 100% rename from resources/assets/natura/textures/items/hopseed_door_item.png rename to src/main/resources/assets/natura/textures/items/hopseed_door_item.png diff --git a/resources/assets/natura/textures/items/hopseed_stick.png b/src/main/resources/assets/natura/textures/items/hopseed_stick.png similarity index 100% rename from resources/assets/natura/textures/items/hopseed_stick.png rename to src/main/resources/assets/natura/textures/items/hopseed_stick.png diff --git a/resources/assets/natura/textures/items/impmeat_cooked.png b/src/main/resources/assets/natura/textures/items/impmeat_cooked.png similarity index 100% rename from resources/assets/natura/textures/items/impmeat_cooked.png rename to src/main/resources/assets/natura/textures/items/impmeat_cooked.png diff --git a/resources/assets/natura/textures/items/impmeat_raw.png b/src/main/resources/assets/natura/textures/items/impmeat_raw.png similarity index 100% rename from resources/assets/natura/textures/items/impmeat_raw.png rename to src/main/resources/assets/natura/textures/items/impmeat_raw.png diff --git a/resources/assets/natura/textures/items/leather_imp.png b/src/main/resources/assets/natura/textures/items/leather_imp.png similarity index 100% rename from resources/assets/natura/textures/items/leather_imp.png rename to src/main/resources/assets/natura/textures/items/leather_imp.png diff --git a/resources/assets/natura/textures/items/maple_stick.png b/src/main/resources/assets/natura/textures/items/maple_stick.png similarity index 100% rename from resources/assets/natura/textures/items/maple_stick.png rename to src/main/resources/assets/natura/textures/items/maple_stick.png diff --git a/resources/assets/natura/textures/items/netherquartz_hatchet.png b/src/main/resources/assets/natura/textures/items/netherquartz_hatchet.png similarity index 100% rename from resources/assets/natura/textures/items/netherquartz_hatchet.png rename to src/main/resources/assets/natura/textures/items/netherquartz_hatchet.png diff --git a/resources/assets/natura/textures/items/netherquartz_kama.png b/src/main/resources/assets/natura/textures/items/netherquartz_kama.png similarity index 100% rename from resources/assets/natura/textures/items/netherquartz_kama.png rename to src/main/resources/assets/natura/textures/items/netherquartz_kama.png diff --git a/resources/assets/natura/textures/items/netherquartz_pickaxe.png b/src/main/resources/assets/natura/textures/items/netherquartz_pickaxe.png similarity index 100% rename from resources/assets/natura/textures/items/netherquartz_pickaxe.png rename to src/main/resources/assets/natura/textures/items/netherquartz_pickaxe.png diff --git a/resources/assets/natura/textures/items/netherquartz_shovel.png b/src/main/resources/assets/natura/textures/items/netherquartz_shovel.png similarity index 100% rename from resources/assets/natura/textures/items/netherquartz_shovel.png rename to src/main/resources/assets/natura/textures/items/netherquartz_shovel.png diff --git a/resources/assets/natura/textures/items/netherquartz_sword.png b/src/main/resources/assets/natura/textures/items/netherquartz_sword.png similarity index 100% rename from resources/assets/natura/textures/items/netherquartz_sword.png rename to src/main/resources/assets/natura/textures/items/netherquartz_sword.png diff --git a/resources/assets/natura/textures/items/nhopper.png b/src/main/resources/assets/natura/textures/items/nhopper.png similarity index 100% rename from resources/assets/natura/textures/items/nhopper.png rename to src/main/resources/assets/natura/textures/items/nhopper.png diff --git a/resources/assets/natura/textures/items/purpleheart_stick.png b/src/main/resources/assets/natura/textures/items/purpleheart_stick.png similarity index 100% rename from resources/assets/natura/textures/items/purpleheart_stick.png rename to src/main/resources/assets/natura/textures/items/purpleheart_stick.png diff --git a/resources/assets/natura/textures/items/redwood_door_item.png b/src/main/resources/assets/natura/textures/items/redwood_door_item.png similarity index 100% rename from resources/assets/natura/textures/items/redwood_door_item.png rename to src/main/resources/assets/natura/textures/items/redwood_door_item.png diff --git a/resources/assets/natura/textures/items/redwood_stick.png b/src/main/resources/assets/natura/textures/items/redwood_stick.png similarity index 100% rename from resources/assets/natura/textures/items/redwood_stick.png rename to src/main/resources/assets/natura/textures/items/redwood_stick.png diff --git a/resources/assets/natura/textures/items/redwoodbark_door_item.png b/src/main/resources/assets/natura/textures/items/redwoodbark_door_item.png similarity index 100% rename from resources/assets/natura/textures/items/redwoodbark_door_item.png rename to src/main/resources/assets/natura/textures/items/redwoodbark_door_item.png diff --git a/resources/assets/natura/textures/items/saguaro_fruit_item.png b/src/main/resources/assets/natura/textures/items/saguaro_fruit_item.png similarity index 100% rename from resources/assets/natura/textures/items/saguaro_fruit_item.png rename to src/main/resources/assets/natura/textures/items/saguaro_fruit_item.png diff --git a/resources/assets/natura/textures/items/saguaro_seeds.png b/src/main/resources/assets/natura/textures/items/saguaro_seeds.png similarity index 100% rename from resources/assets/natura/textures/items/saguaro_seeds.png rename to src/main/resources/assets/natura/textures/items/saguaro_seeds.png diff --git a/resources/assets/natura/textures/items/sakura_door_item.png b/src/main/resources/assets/natura/textures/items/sakura_door_item.png similarity index 100% rename from resources/assets/natura/textures/items/sakura_door_item.png rename to src/main/resources/assets/natura/textures/items/sakura_door_item.png diff --git a/resources/assets/natura/textures/items/sakura_stick.png b/src/main/resources/assets/natura/textures/items/sakura_stick.png similarity index 100% rename from resources/assets/natura/textures/items/sakura_stick.png rename to src/main/resources/assets/natura/textures/items/sakura_stick.png diff --git a/resources/assets/natura/textures/items/seedbag_barley.png b/src/main/resources/assets/natura/textures/items/seedbag_barley.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_barley.png rename to src/main/resources/assets/natura/textures/items/seedbag_barley.png diff --git a/resources/assets/natura/textures/items/seedbag_blank.png b/src/main/resources/assets/natura/textures/items/seedbag_blank.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_blank.png rename to src/main/resources/assets/natura/textures/items/seedbag_blank.png diff --git a/resources/assets/natura/textures/items/seedbag_bone.png b/src/main/resources/assets/natura/textures/items/seedbag_bone.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_bone.png rename to src/main/resources/assets/natura/textures/items/seedbag_bone.png diff --git a/resources/assets/natura/textures/items/seedbag_carrot.png b/src/main/resources/assets/natura/textures/items/seedbag_carrot.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_carrot.png rename to src/main/resources/assets/natura/textures/items/seedbag_carrot.png diff --git a/resources/assets/natura/textures/items/seedbag_cotton.png b/src/main/resources/assets/natura/textures/items/seedbag_cotton.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_cotton.png rename to src/main/resources/assets/natura/textures/items/seedbag_cotton.png diff --git a/resources/assets/natura/textures/items/seedbag_melon.png b/src/main/resources/assets/natura/textures/items/seedbag_melon.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_melon.png rename to src/main/resources/assets/natura/textures/items/seedbag_melon.png diff --git a/resources/assets/natura/textures/items/seedbag_netherwart.png b/src/main/resources/assets/natura/textures/items/seedbag_netherwart.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_netherwart.png rename to src/main/resources/assets/natura/textures/items/seedbag_netherwart.png diff --git a/resources/assets/natura/textures/items/seedbag_potato.png b/src/main/resources/assets/natura/textures/items/seedbag_potato.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_potato.png rename to src/main/resources/assets/natura/textures/items/seedbag_potato.png diff --git a/resources/assets/natura/textures/items/seedbag_pumpkin.png b/src/main/resources/assets/natura/textures/items/seedbag_pumpkin.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_pumpkin.png rename to src/main/resources/assets/natura/textures/items/seedbag_pumpkin.png diff --git a/resources/assets/natura/textures/items/seedbag_wheat.png b/src/main/resources/assets/natura/textures/items/seedbag_wheat.png similarity index 100% rename from resources/assets/natura/textures/items/seedbag_wheat.png rename to src/main/resources/assets/natura/textures/items/seedbag_wheat.png diff --git a/resources/assets/natura/textures/items/silverbell_stick.png b/src/main/resources/assets/natura/textures/items/silverbell_stick.png similarity index 100% rename from resources/assets/natura/textures/items/silverbell_stick.png rename to src/main/resources/assets/natura/textures/items/silverbell_stick.png diff --git a/resources/assets/natura/textures/items/spruce_stick.png b/src/main/resources/assets/natura/textures/items/spruce_stick.png similarity index 100% rename from resources/assets/natura/textures/items/spruce_stick.png rename to src/main/resources/assets/natura/textures/items/spruce_stick.png diff --git a/resources/assets/natura/textures/items/stew_glowshroom.png b/src/main/resources/assets/natura/textures/items/stew_glowshroom.png similarity index 100% rename from resources/assets/natura/textures/items/stew_glowshroom.png rename to src/main/resources/assets/natura/textures/items/stew_glowshroom.png diff --git a/resources/assets/natura/textures/items/stew_mushroom.png b/src/main/resources/assets/natura/textures/items/stew_mushroom.png similarity index 100% rename from resources/assets/natura/textures/items/stew_mushroom.png rename to src/main/resources/assets/natura/textures/items/stew_mushroom.png diff --git a/resources/assets/natura/textures/items/sulfur.png b/src/main/resources/assets/natura/textures/items/sulfur.png similarity index 100% rename from resources/assets/natura/textures/items/sulfur.png rename to src/main/resources/assets/natura/textures/items/sulfur.png diff --git a/resources/assets/natura/textures/items/tiger_stick.png b/src/main/resources/assets/natura/textures/items/tiger_stick.png similarity index 100% rename from resources/assets/natura/textures/items/tiger_stick.png rename to src/main/resources/assets/natura/textures/items/tiger_stick.png diff --git a/resources/assets/natura/textures/items/waterdrop.png b/src/main/resources/assets/natura/textures/items/waterdrop.png similarity index 100% rename from resources/assets/natura/textures/items/waterdrop.png rename to src/main/resources/assets/natura/textures/items/waterdrop.png diff --git a/resources/assets/natura/textures/items/wheat_flour.png b/src/main/resources/assets/natura/textures/items/wheat_flour.png similarity index 100% rename from resources/assets/natura/textures/items/wheat_flour.png rename to src/main/resources/assets/natura/textures/items/wheat_flour.png diff --git a/resources/assets/natura/textures/items/willow_stick.png b/src/main/resources/assets/natura/textures/items/willow_stick.png similarity index 100% rename from resources/assets/natura/textures/items/willow_stick.png rename to src/main/resources/assets/natura/textures/items/willow_stick.png diff --git a/resources/assets/natura/textures/misc/bluegrasscolor.png b/src/main/resources/assets/natura/textures/misc/bluegrasscolor.png similarity index 100% rename from resources/assets/natura/textures/misc/bluegrasscolor.png rename to src/main/resources/assets/natura/textures/misc/bluegrasscolor.png diff --git a/resources/assets/natura/textures/misc/orangegrasscolor.png b/src/main/resources/assets/natura/textures/misc/orangegrasscolor.png similarity index 100% rename from resources/assets/natura/textures/misc/orangegrasscolor.png rename to src/main/resources/assets/natura/textures/misc/orangegrasscolor.png diff --git a/resources/assets/natura/textures/mob/creeperunstable.png b/src/main/resources/assets/natura/textures/mob/creeperunstable.png similarity index 100% rename from resources/assets/natura/textures/mob/creeperunstable.png rename to src/main/resources/assets/natura/textures/mob/creeperunstable.png diff --git a/resources/assets/natura/textures/mob/flamespider.png b/src/main/resources/assets/natura/textures/mob/flamespider.png similarity index 100% rename from resources/assets/natura/textures/mob/flamespider.png rename to src/main/resources/assets/natura/textures/mob/flamespider.png diff --git a/resources/assets/natura/textures/mob/imp.png b/src/main/resources/assets/natura/textures/mob/imp.png similarity index 100% rename from resources/assets/natura/textures/mob/imp.png rename to src/main/resources/assets/natura/textures/mob/imp.png diff --git a/resources/mcmod.info b/src/main/resources/mcmod.info similarity index 100% rename from resources/mcmod.info rename to src/main/resources/mcmod.info diff --git a/resources/pack.mcmeta b/src/main/resources/pack.mcmeta similarity index 100% rename from resources/pack.mcmeta rename to src/main/resources/pack.mcmeta From d5e6e204223cc26f2b491a5db9775009f59415ed Mon Sep 17 00:00:00 2001 From: Johann Bernhardt Date: Wed, 24 Nov 2021 21:11:12 +0100 Subject: [PATCH 2/4] Migrate to unified build script --- .gitattributes | 22 - .github/scripts/test-no-crash-reports.sh | 9 + .github/workflows/build-and-test.yml | 45 ++ .github/workflows/release-latest.yml | 44 ++ .github/workflows/release-tags.yml | 45 ++ .gitignore | 55 ++- build.gradle | 552 +++++++++++++++++++---- build.properties | 8 - dependencies.gradle | 9 + gradle.properties | 60 +++ gradle/wrapper/gradle-wrapper.jar | Bin 53324 -> 55616 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 48 +- gradlew.bat | 24 +- jitpack.yml | 2 + repositories.gradle | 10 + settings.gradle | 19 - 17 files changed, 773 insertions(+), 182 deletions(-) delete mode 100644 .gitattributes create mode 100644 .github/scripts/test-no-crash-reports.sh create mode 100644 .github/workflows/build-and-test.yml create mode 100644 .github/workflows/release-latest.yml create mode 100644 .github/workflows/release-tags.yml delete mode 100644 build.properties create mode 100644 dependencies.gradle create mode 100644 gradle.properties create mode 100644 jitpack.yml create mode 100644 repositories.gradle delete mode 100644 settings.gradle diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 412eeda7..00000000 --- a/.gitattributes +++ /dev/null @@ -1,22 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp -*.sln merge=union -*.csproj merge=union -*.vbproj merge=union -*.fsproj merge=union -*.dbproj merge=union - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/.github/scripts/test-no-crash-reports.sh b/.github/scripts/test-no-crash-reports.sh new file mode 100644 index 00000000..c67e342c --- /dev/null +++ b/.github/scripts/test-no-crash-reports.sh @@ -0,0 +1,9 @@ +directory="run/crash-reports" +if [ -d $directory ]; then + echo "Crash reports detected:" + cat $directory/* + exit 1 +else + echo "No crash reports detected" + exit 0 +fi diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 00000000..6c9b3cbc --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,45 @@ +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Build and test + +on: + pull_request: + branches: [ master, main ] + push: + branches: [ master, main ] + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up JDK 8 + uses: actions/setup-java@v2 + with: + java-version: '8' + distribution: 'adopt' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Setup the workspace + run: ./gradlew setupCIWorkspace + + - name: Build the mod + run: ./gradlew build + + - name: Run server for 1 minute + run: | + mkdir run + echo "eula=true" > run/eula.txt + timeout 10 ./gradlew runServer || true + + - name: Test no crashes happend + run: | + chmod +x .github/scripts/test-no-crash-reports.sh + .github/scripts/test-no-crash-reports.sh diff --git a/.github/workflows/release-latest.yml b/.github/workflows/release-latest.yml new file mode 100644 index 00000000..5ecccc04 --- /dev/null +++ b/.github/workflows/release-latest.yml @@ -0,0 +1,44 @@ +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Release latest build + +on: + push: + branches: [ master, main ] + +jobs: + build-and-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set release version + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + + - name: Set up JDK 8 + uses: actions/setup-java@v2 + with: + java-version: '8' + distribution: 'adopt' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Setup the workspace + run: ./gradlew setupCIWorkspace + + - name: Build the mod + run: ./gradlew build + + - name: Update latest tag + uses: "marvinpinto/action-automatic-releases@latest" + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + automatic_release_tag: "latest" + prerelease: false + title: "Latest build" + files: build/libs/*.jar diff --git a/.github/workflows/release-tags.yml b/.github/workflows/release-tags.yml new file mode 100644 index 00000000..25c354b2 --- /dev/null +++ b/.github/workflows/release-tags.yml @@ -0,0 +1,45 @@ +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Release tagged build + +on: + push: + tags: + - '*' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set release version + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + + - name: Set up JDK 8 + uses: actions/setup-java@v2 + with: + java-version: '8' + distribution: 'adopt' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Setup the workspace + run: ./gradlew setupCIWorkspace + + - name: Build the mod + run: ./gradlew build + + - name: Release under current tag + uses: "marvinpinto/action-automatic-releases@latest" + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + automatic_release_tag: "${{ env.RELEASE_VERSION }}" + prerelease: false + title: "${{ env.RELEASE_VERSION }}" + files: build/libs/*.jar diff --git a/.gitignore b/.gitignore index 71aef0cd..558ad12d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,28 @@ -#ant stuff -build.xml -/bin/ -/download/ -#Remove OS generated garbage -*/.DS_Store -.DS_Store -.DS_Store? -.Spotlight-V100 -.Trashes -Icon? -ehthumbs.db -Thumbs.db -#gradle stuff -/.gradle -/build/ +.gradle +.settings +/.idea/ /run/ -#IDEA files from Gradle -.idea/ -/*.iml -/*.ipr -/*.iws -#Vim backups -*~ -#eclipse stuffs -/.classpath -/.project -/.settings/ -#gradle stuff +/build/ /eclipse/ -*.bat +.classpath +.project +/bin/ +/config/ +/crash-reports/ +/logs/ +options.txt +/saves/ +usernamecache.json +banned-ips.json +banned-players.json +eula.txt +ops.json +server.properties +servers.dat +usercache.json +whitelist.json +/out/ +*.iml +*.ipr +*.iws +src/main/resources/mixins.*.json diff --git a/build.gradle b/build.gradle index 6f7cedb5..3e425e62 100644 --- a/build.gradle +++ b/build.gradle @@ -1,138 +1,524 @@ +//version: a553e159ecaf0fc236cf25b2c124ea90f92bb140 /* - * Natura - * Master build file - * Based on TConstruct's master build file - * Authors: Sunstrike, ProgWML6 - * Help from AbrarSyed +DO NOT CHANGE THIS FILE! + +Also, you may replace this file at any time if there is an update available. +Please check https://github.com/SinTh0r4s/ExampleMod1.7.10/blob/main/build.gradle for updates. */ + +import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar + +import java.util.concurrent.TimeUnit + buildscript { repositories { maven { - name = "mavenCentral" - url = "https://repo1.maven.org/maven2/" + name = "forge" + url = "https://maven.minecraftforge.net" } maven { - name = 'ForgeFS' - url = 'http://files.minecraftforge.net/maven' - } - maven { name = "sonatype" url = "https://oss.sonatype.org/content/repositories/snapshots/" } - + maven { + name = "Scala CI dependencies" + url = "https://repo1.maven.org/maven2/" + } + maven { + name = "jitpack" + url = "https://jitpack.io" + } } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' + classpath 'com.github.GTNewHorizons:ForgeGradle:1.2.4' } } +plugins { + id 'idea' + id 'scala' + id("org.ajoberstar.grgit") version("3.1.1") + id("com.github.johnrengelman.shadow") version("4.0.4") + id("com.palantir.git-version") version("0.12.3") +} -repositories { - maven { - name 'CB Maven FS' - url "http://chickenbones.net/maven/" +apply plugin: 'forge' + +def projectJavaVersion = JavaLanguageVersion.of(8) + +java { + toolchain { + languageVersion.set(projectJavaVersion) } - maven { - name "ProfMobius Maven FS" - url "http://mobiusstrip.eu/maven" +} + +idea { + module { + inheritOutputDirs = true + downloadJavadoc = true + downloadSources = true } - maven { - name 'DVS1 Maven FS' - url 'http://dvs1.progwml6.com/files/maven' +} + +checkPropertyExists("modName") +checkPropertyExists("modId") +checkPropertyExists("modGroup") +checkPropertyExists("autoUpdateBuildScript") +checkPropertyExists("minecraftVersion") +checkPropertyExists("forgeVersion") +checkPropertyExists("replaceGradleTokenInFile") +checkPropertyExists("gradleTokenModId") +checkPropertyExists("gradleTokenModName") +checkPropertyExists("gradleTokenVersion") +checkPropertyExists("gradleTokenGroupName") +checkPropertyExists("apiPackage") +checkPropertyExists("accessTransformersFile") +checkPropertyExists("usesMixins") +checkPropertyExists("mixinPlugin") +checkPropertyExists("mixinsPackage") +checkPropertyExists("coreModClass") +checkPropertyExists("containsMixinsAndOrCoreModOnly") +checkPropertyExists("usesShadowedDependencies") +checkPropertyExists("developmentEnvironmentUserName") + +def checkPropertyExists(String propertyName) { + if (project.hasProperty(propertyName) == false) { + throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/SinTh0r4s/ExampleMod1.7.10/blob/main/gradle.properties") } - maven { - name 'ForgeFS' - url 'http://files.minecraftforge.net/maven' +} + + +String javaSourceDir = "src/main/java/" +String scalaSourceDir = "src/main/scala/" + +String targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") +String targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") +if((new File(targetPackageJava).exists() || new File(targetPackageScala).exists()) == false) { + throw new GradleException("Could not resolve \"modGroup\"! Could not find " + targetPackageJava + " or " + targetPackageScala) +} + +if(apiPackage) { + targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + if((new File(targetPackageJava).exists() || new File(targetPackageScala).exists()) == false) { + throw new GradleException("Could not resolve \"apiPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala) } } +if(accessTransformersFile) { + String targetFile = "src/main/resources/META-INF/" + accessTransformersFile + if(new File(targetFile).exists() == false) { + throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile) + } +} -apply plugin: 'forge' +if(usesMixins.toBoolean()) { + if(mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) { + throw new GradleException("\"mixinPlugin\" requires \"mixinsPackage\" and \"mixinPlugin\" to be set!") + } -sourceCompatibility = 1.6 -targetCompatibility = 1.6 + targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/") + targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/") + if((new File(targetPackageJava).exists() || new File(targetPackageScala).exists()) == false) { + throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala) + } -group = 'mods.natura' + String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java" + String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".scala" + String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java" + if((new File(targetFileJava).exists() || new File(targetFileScala).exists() || new File(targetFileScalaJava).exists()) == false) { + throw new GradleException("Could not resolve \"mixinPlugin\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava) + } +} -// define the properties file -ext.configFile = file "build.properties" +if(coreModClass) { + String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java" + String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".scala" + String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java" + if((new File(targetFileJava).exists() || new File(targetFileScala).exists() || new File(targetFileScalaJava).exists()) == false) { + throw new GradleException("Could not resolve \"coreModClass\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava) + } +} -configFile.withReader { - // read config. it shall from now on be referenced as simply config or as project.config - def prop = new Properties() - prop.load(it) - project.ext.config = new ConfigSlurper().parse prop +configurations.all { + resolutionStrategy.cacheChangingModulesFor(0, TimeUnit.SECONDS) + + // Make sure GregTech build won't time out + System.setProperty("org.gradle.internal.http.connectionTimeout", 120000 as String) + System.setProperty("org.gradle.internal.http.socketTimeout", 120000 as String) +} + +// Fix Jenkins' Git: chmod a file should not be detected as a change and append a '.dirty' to the version +'git config core.fileMode false'.execute() +// Pulls version from git tag +version = minecraftVersion + "-" + gitVersion() +group = modGroup +archivesBaseName = modId + +minecraft { + version = minecraftVersion + "-" + forgeVersion + "-" + minecraftVersion + runDir = "run" + + if (replaceGradleTokenInFile) { + replaceIn replaceGradleTokenInFile + if(gradleTokenModId) { + replace gradleTokenModId, modId + } + if(gradleTokenModName) { + replace gradleTokenModName, modName + } + if(gradleTokenVersion) { + replace gradleTokenVersion, versionDetails().lastTag + } + if(gradleTokenGroupName) { + replace gradleTokenGroupName, modGroup + } + } +} + +if(file("addon.gradle").exists()) { + apply from: "addon.gradle" +} + +apply from: 'repositories.gradle' + +configurations { + implementation.extendsFrom(shadowImplementation) +} + +repositories { + maven { + name = "Overmind forge repo mirror" + url = "https://gregtech.overminddl1.com/" + } + if(usesMixins.toBoolean()) { + maven { + name = "sponge" + url = "https://repo.spongepowered.org/repository/maven-public" + } + maven { + url = "https://jitpack.io" + } + } } dependencies { - compile "mantle:Mantle:${config.minecraft_version}-${config.mantle_version}:deobf" - compile "tconstruct:TConstruct:${config.minecraft_version}-${config.tconstruct_version}:deobf" - compile "codechicken:CodeChickenLib:${config.minecraft_version}-${config.CCLIB_version}:dev" - compile "codechicken:ForgeMultipart:${config.minecraft_version}-${config.FMP_version}:dev" - compile "codechicken:CodeChickenCore:${config.minecraft_version}-${config.ccc_version}:dev" - compile "codechicken:NotEnoughItems:${config.minecraft_version}-${config.NEI_version}:dev" + if(usesMixins.toBoolean()) { + annotationProcessor("org.ow2.asm:asm-debug-all:5.0.3") + annotationProcessor("com.google.guava:guava:24.1.1-jre") + annotationProcessor("com.google.code.gson:gson:2.8.6") + annotationProcessor("org.spongepowered:mixin:0.8-SNAPSHOT") + // using 0.8 to workaround a issue in 0.7 which fails mixin application + compile("org.spongepowered:mixin:0.7.11-SNAPSHOT") { + // Mixin includes a lot of dependencies that are too up-to-date + exclude module: "launchwrapper" + exclude module: "guava" + exclude module: "gson" + exclude module: "commons-io" + exclude module: "log4j-core" + } + compile("com.github.GTNewHorizons:SpongeMixins:1.3.3:dev") + } } -minecraft { - version = config.minecraft_version + "-" + config.forge_version - runDir = 'run' +apply from: 'dependencies.gradle' + +def mixingConfigRefMap = "mixins." + modId + ".refmap.json" +def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfigRefMap +def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg" + +task generateAssets { + if(usesMixins.toBoolean()) { + new File(projectDir.toString() + "/src/main/resources/", "mixins." + modId + ".json").text = """{ + "required": true, + "minVersion": "0.7.11", + "package": "${modGroup}.${mixinsPackage}", + "plugin": "${modGroup}.${mixinPlugin}", + "refmap": "${mixingConfigRefMap}", + "target": "@env(DEFAULT)", + "compatibilityLevel": "JAVA_8" } -// sets version to the slimeKnights version format -task buildInfo { - def cmd = "git rev-parse --short HEAD" - def proc = cmd.execute() - proc.waitFor() - if (proc.exitValue() == 0) { - ext.revision = proc.text.trim() - } else { - ext.revision = "GITBORK" +""" } +} - if (System.getenv().BUILD_NUMBER != null) { - ext.buildNum = System.getenv().BUILD_NUMBER - } else { - ext.buildNum = "DEV" +task relocateShadowJar(type: ConfigureShadowRelocation) { + target = tasks.shadowJar + prefix = modGroup + ".shadow" +} + +shadowJar { + manifest { + attributes(getManifestAttributes()) } + + minimize() // This will only allow shading for actually used classes + configurations = [project.configurations.shadowImplementation] + dependsOn(relocateShadowJar) } -version = "1-7.10-2.4.2-dev" -sourceSets { - main { - resources { - srcDir 'resources' +jar { + manifest { + attributes(getManifestAttributes()) + } + + if(usesShadowedDependencies.toBoolean()) { + dependsOn(shadowJar) + enabled = false + } +} + +reobf { + if(usesMixins.toBoolean()) { + addExtraSrgFile mixinSrg + } +} + +afterEvaluate { + if(usesMixins.toBoolean()) { + tasks.compileJava { + options.compilerArgs += [ + "-AreobfSrgFile=${tasks.reobf.srg}", + "-AoutSrgFile=${mixinSrg}", + "-AoutRefMapFile=${refMap}", + // Elan: from what I understand they are just some linter configs so you get some warning on how to properly code + "-XDenableSunApiLintControl", + "-XDignore.symbol.file" + ] } } } + +runClient { + def arguments = [] + + if(usesMixins.toBoolean()) { + arguments += [ + "--mods=../build/libs/$modId-${version}.jar", + "--tweakClass org.spongepowered.asm.launch.MixinTweaker" + ] + } + + if(developmentEnvironmentUserName) { + arguments += [ + "--username", + developmentEnvironmentUserName + ] + } + + args(arguments) +} + +runServer { + def arguments = [] + + if (usesMixins.toBoolean()) { + arguments += [ + "--mods=../build/libs/$modId-${version}.jar", + "--tweakClass org.spongepowered.asm.launch.MixinTweaker" + ] + } + + args(arguments) +} + +tasks.withType(JavaExec).configureEach { + javaLauncher.set( + javaToolchains.launcherFor { + languageVersion = projectJavaVersion + } + ) +} + processResources -{ - // replace stuff in text files, not binary ones. - from(sourceSets.main.resources.srcDirs) { - include '**/*.info' - - // replace version and MCVersion - expand 'version':project.version, 'mcversion':project.minecraft.version + { + // this will ensure that this task is redone when the versions change. + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version + + // replace stuff in mcmod.info, nothing else + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + + // replace version and mcversion + expand "minecraftVersion": project.minecraft.version, + "modVersion": versionDetails().lastTag, + "modId": modId, + "modName": modName + } + + if(usesMixins.toBoolean()) { + from refMap + } + + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } + } + +def getManifestAttributes() { + def manifestAttributes = [:] + if(containsMixinsAndOrCoreModOnly.toBoolean() == false && (usesMixins.toBoolean() || coreModClass)) { + manifestAttributes += ["FMLCorePluginContainsFMLMod": true] + } + + if(accessTransformersFile) { + manifestAttributes += ["FMLAT" : accessTransformersFile.toString()] + } + + if(coreModClass) { + manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass] } - - // copy everything else, thats not text - from(sourceSets.main.resources.srcDirs) { - exclude '**/*.info' + + if(usesMixins.toBoolean()) { + manifestAttributes += [ + "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", + "MixinConfigs" : "mixins." + modId + ".json", + "ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false + ] + } + return manifestAttributes +} + +task sourcesJar(type: Jar) { + from (sourceSets.main.allJava) + from (file("$projectDir/LICENSE")) + getArchiveClassifier().set('sources') +} + +task shadowDevJar(type: ShadowJar) { + from sourceSets.main.output + getArchiveClassifier().set("dev") + + manifest { + attributes(getManifestAttributes()) } + + minimize() // This will only allow shading for actually used classes + configurations = [project.configurations.shadowImplementation] +} + +task relocateShadowDevJar(type: ConfigureShadowRelocation) { + target = tasks.shadowDevJar + prefix = modGroup + ".shadow" +} + +task circularResolverJar(type: Jar) { + dependsOn(relocateShadowDevJar) + dependsOn(shadowDevJar) + enabled = false } -// because the normal output has been made to be obfuscated -task devjar(type: Jar) { +task devJar(type: Jar) { from sourceSets.main.output - classifier = 'deobf' + getArchiveClassifier().set("dev") + + manifest { + attributes(getManifestAttributes()) + } + + if(usesShadowedDependencies.toBoolean()) { + dependsOn(circularResolverJar) + enabled = false + } } -task sourcesjar(type: Jar) { - from sourceSets.main.allJava - classifier = 'sources' +task apiJar(type: Jar) { + from (sourceSets.main.allJava) { + include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString() + '/**' + } + + from (sourceSets.main.output) { + include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString() + '/**' + } + + from (sourceSets.main.resources.srcDirs) { + include("LICENSE") + } + + getArchiveClassifier().set('api') } artifacts { - archives devjar - archives sourcesjar + archives sourcesJar + archives devJar + if(apiPackage) { + archives apiJar + } +} + +// Crude handler to append custom maven repositories to maven dependency +install{ + repositories{ + mavenInstaller{ + pom.withXml { + def repositoriesNode = asNode().appendNode("repositories") + project.repositories.each { repository -> + def repositoryNode = repositoriesNode.appendNode("repository") + repositoryNode.appendNode("name", repository.name) + repositoryNode.appendNode("url", repository.properties.get("url")) + } + } + } + } +} + +// Updating +task updateBuildScript { + doLast { + if (updateBuildScript()) return + + print("Build script already up-to-date!") + } +} + +if (isNewBuildScriptVersionAvailable()) { + if (autoUpdateBuildScript.toBoolean()) { + updateBuildScript() + } else { + println("Build script update available! Run 'gradle updateBuildScript'") + } +} + +static URL availableBuildScriptUrl() { + new URL("https://raw.githubusercontent.com/SinTh0r4s/ExampleMod1.7.10/main/build.gradle") +} + +static boolean updateBuildScript() { + if (isNewBuildScriptVersionAvailable()) { + def buildscriptFile = new File("build.gradle") + availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } } + print("Build script updated. Please REIMPORT the project or RESTART your IDE!") + return true + } + return false +} + +static boolean isNewBuildScriptVersionAvailable() { + Map parameters = ["connectTimeout": 2000, "readTimeout": 2000] + + String currentBuildScript = new File("build.gradle").getText() + String currentBuildScriptHash = getVersionHash(currentBuildScript) + String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText() + String availableBuildScriptHash = getVersionHash(availableBuildScript) + + boolean isUpToDate = currentBuildScriptHash.empty || availableBuildScriptHash.empty || currentBuildScriptHash == availableBuildScriptHash + return !isUpToDate +} + +static String getVersionHash(String buildScriptContent) { + String versionLine = buildScriptContent.find("^//version: [a-z0-9]*") + if(versionLine != null) { + return versionLine.split(": ").last() + } + return "" +} + +configure(updateBuildScript) { + group = 'forgegradle' + description = 'Updates the build script to the latest version' } diff --git a/build.properties b/build.properties deleted file mode 100644 index 0e938286..00000000 --- a/build.properties +++ /dev/null @@ -1,8 +0,0 @@ -minecraft_version=1.7.10 -forge_version=10.13.4.1614-1.7.10 -mantle_version=0.3.2.jenkins190 -tconstruct_version=1.8.7.build981 -FMP_version=1.2.0.345 -CCLIB_version=1.1.3.140 -NEI_version=1.0.5.120 -ccc_version=1.0.7.47 diff --git a/dependencies.gradle b/dependencies.gradle new file mode 100644 index 00000000..b84dbb9c --- /dev/null +++ b/dependencies.gradle @@ -0,0 +1,9 @@ +// Add your dependencies here + +dependencies { + compile("com.github.GTNewHorizons:TinkersConstruct:master-SNAPSHOT:dev") + compile("com.github.GTNewHorizons:waila:master-SNAPSHOT:dev") + + compileOnly("curse.maven:minefactory-reloaded-66672:2366150") + compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..406a2c66 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,60 @@ +modName = Natura + +# This is a case-sensitive string to identify your mod. Convention is to use lower case. +modId = Natura + +modGroup = mods.natura + +# WHY is there no version field? +# The build script relies on git to provide a version via tags. It is super easy and will enable you to always know the +# code base or your binary. Check out this tutorial: https://blog.mattclemente.com/2017/10/13/versioning-with-git-tags/ + +# Will update your build.gradle automatically whenever an update is available +autoUpdateBuildScript = false + +minecraftVersion = 1.7.10 +forgeVersion = 10.13.4.1614 + +# Select a username for testing your mod with breakpoints. You may leave this empty for a random user name each time you +# restart Minecraft in development. Choose this dependent on your mod: +# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name +# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty +developmentEnvironmentUserName = "Developer" + +# Define a source file of your project with: +# public static final String VERSION = "GRADLETOKEN_VERSION"; +# The string's content will be replaced with your mods version when compiled. You should use this to specify your mod's +# version in @Mod([...], version = VERSION, [...]) +# Leave these properties empty to skip individual token replacements +replaceGradleTokenInFile = Natura.java +gradleTokenModId = +gradleTokenModName = +gradleTokenVersion = GRADLETOKEN_VERSION +gradleTokenGroupName = + +# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise you can +# leave this property empty. +# Example value: apiPackage = api + modGroup = com.myname.mymodid -> com.myname.mymodid.api +apiPackage = + +# Specify the configuration file for Forge's access transformers here. I must be placed into /src/main/resources/META-INF/ +# Example value: mymodid_at.cfg +accessTransformersFile = + +# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled! +usesMixins = false +# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise. +mixinPlugin = +# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail! +mixinsPackage = +# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! +# This parameter is for legacy compatability only +# Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin +coreModClass = +# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class +# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false! +containsMixinsAndOrCoreModOnly = false + +# If enabled, you may use 'shadowImplementation' for dependencies. They will be integrated in your jar. It is your +# responsibility check the licence and request permission for distribution, if required. +usesShadowedDependencies = false diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 3baa851b28c65f87dd36a6748e1a85cf360c1301..5c2d1cf016b3885f6930543d57b744ea8c220a1a 100644 GIT binary patch literal 55616 zcmafaW0WS*vSoFbZJS-TZP!<}ZQEV8ZQHihW!tvx>6!c9%-lQoy;&DmfdT@8fB*sl68LLCKtKQ283+jS?^Q-bNq|NIAW8=eB==8_)^)r*{C^$z z{u;{v?IMYnO`JhmPq7|LA_@Iz75S9h~8`iX>QrjrmMeu{>hn4U;+$dor zz+`T8Q0f}p^Ao)LsYq74!W*)&dTnv}E8;7H*Zetclpo2zf_f>9>HT8;`O^F8;M%l@ z57Z8dk34kG-~Wg7n48qF2xwPp;SOUpd1}9Moir5$VSyf4gF)Mp-?`wO3;2x9gYj59oFwG>?Leva43@e(z{mjm0b*@OAYLC`O9q|s+FQLOE z!+*Y;%_0(6Sr<(cxE0c=lS&-FGBFGWd_R<5$vwHRJG=tB&Mi8@hq_U7@IMyVyKkOo6wgR(<% zQw1O!nnQl3T9QJ)Vh=(`cZM{nsEKChjbJhx@UQH+G>6p z;beBQ1L!3Zl>^&*?cSZjy$B3(1=Zyn~>@`!j%5v7IBRt6X`O)yDpVLS^9EqmHxBcisVG$TRwiip#ViN|4( zYn!Av841_Z@Ys=T7w#>RT&iXvNgDq3*d?$N(SznG^wR`x{%w<6^qj&|g})La;iD?`M=p>99p><39r9+e z`dNhQ&tol5)P#;x8{tT47i*blMHaDKqJs8!Pi*F{#)9%USFxTVMfMOy{mp2ZrLR40 z2a9?TJgFyqgx~|j0eA6SegKVk@|Pd|_6P$HvwTrLTK)Re`~%kg8o9`EAE1oAiY5Jgo=H}0*D?tSCn^=SIN~fvv453Ia(<1|s07aTVVtsRxY6+tT3589iQdi^ zC92D$ewm9O6FA*u*{Fe_=b`%q`pmFvAz@hfF@OC_${IPmD#QMpPNo0mE9U=Ch;k0L zZteokPG-h7PUeRCPPYG%H!WswC?cp7M|w42pbtwj!m_&4%hB6MdLQe&}@5-h~! zkOt;w0BbDc0H!RBw;1UeVckHpJ@^|j%FBZlC} zsm?nFOT$`F_i#1_gh4|n$rDe>0md6HvA=B%hlX*3Z%y@a&W>Rq`Fe(8smIgxTGb#8 zZ`->%h!?QCk>v*~{!qp=w?a*};Y**1uH`)OX`Gi+L%-d6{rV?@}MU#qfCU(!hLz;kWH=0A%W7E^pA zD;A%Jg5SsRe!O*0TyYkAHe&O9z*Ij-YA$%-rR?sc`xz_v{>x%xY39!8g#!Z0#03H( z{O=drKfb0cbx1F*5%q81xvTDy#rfUGw(fesh1!xiS2XT;7_wBi(Rh4i(!rR^9=C+- z+**b9;icxfq@<7}Y!PW-0rTW+A^$o*#ZKenSkxLB$Qi$%gJSL>x!jc86`GmGGhai9 zOHq~hxh}KqQHJeN$2U{M>qd*t8_e&lyCs69{bm1?KGTYoj=c0`rTg>pS6G&J4&)xp zLEGIHSTEjC0-s-@+e6o&w=h1sEWWvJUvezID1&exb$)ahF9`(6`?3KLyVL$|c)CjS zx(bsy87~n8TQNOKle(BM^>1I!2-CZ^{x6zdA}qeDBIdrfd-(n@Vjl^9zO1(%2pP9@ zKBc~ozr$+4ZfjmzEIzoth(k?pbI87=d5OfjVZ`Bn)J|urr8yJq`ol^>_VAl^P)>2r)s+*3z5d<3rP+-fniCkjmk=2hTYRa@t zCQcSxF&w%mHmA?!vaXnj7ZA$)te}ds+n8$2lH{NeD4mwk$>xZCBFhRy$8PE>q$wS`}8pI%45Y;Mg;HH+}Dp=PL)m77nKF68FggQ-l3iXlVZuM2BDrR8AQbK;bn1%jzahl0; zqz0(mNe;f~h8(fPzPKKf2qRsG8`+Ca)>|<&lw>KEqM&Lpnvig>69%YQpK6fx=8YFj zHKrfzy>(7h2OhUVasdwKY`praH?>qU0326-kiSyOU_Qh>ytIs^htlBA62xU6xg?*l z)&REdn*f9U3?u4$j-@ndD#D3l!viAUtw}i5*Vgd0Y6`^hHF5R=No7j8G-*$NWl%?t z`7Nilf_Yre@Oe}QT3z+jOUVgYtT_Ym3PS5(D>kDLLas8~F+5kW%~ZYppSrf1C$gL* zCVy}fWpZ3s%2rPL-E63^tA|8OdqKsZ4TH5fny47ENs1#^C`_NLg~H^uf3&bAj#fGV zDe&#Ot%_Vhj$}yBrC3J1Xqj>Y%&k{B?lhxKrtYy;^E9DkyNHk5#6`4cuP&V7S8ce9 zTUF5PQIRO7TT4P2a*4;M&hk;Q7&{(83hJe5BSm=9qt~;U)NTf=4uKUcnxC`;iPJeI zW#~w?HIOM+0j3ptB0{UU{^6_#B*Q2gs;1x^YFey(%DJHNWz@e_NEL?$fv?CDxG`jk zH|52WFdVsZR;n!Up;K;4E$|w4h>ZIN+@Z}EwFXI{w_`?5x+SJFY_e4J@|f8U08%dd z#Qsa9JLdO$jv)?4F@&z_^{Q($tG`?|9bzt8ZfH9P`epY`soPYqi1`oC3x&|@m{hc6 zs0R!t$g>sR@#SPfNV6Pf`a^E?q3QIaY30IO%yKjx#Njj@gro1YH2Q(0+7D7mM~c>C zk&_?9Ye>B%*MA+77$Pa!?G~5tm`=p{NaZsUsOgm6Yzclr_P^2)r(7r%n(0?4B#$e7 z!fP;+l)$)0kPbMk#WOjm07+e?{E)(v)2|Ijo{o1+Z8#8ET#=kcT*OwM#K68fSNo%< zvZFdHrOrr;>`zq!_welWh!X}=oN5+V01WJn7=;z5uo6l_$7wSNkXuh=8Y>`TjDbO< z!yF}c42&QWYXl}XaRr0uL?BNPXlGw=QpDUMo`v8pXzzG(=!G;t+mfCsg8 zJb9v&a)E!zg8|%9#U?SJqW!|oBHMsOu}U2Uwq8}RnWeUBJ>FtHKAhP~;&T4mn(9pB zu9jPnnnH0`8ywm-4OWV91y1GY$!qiQCOB04DzfDDFlNy}S{$Vg9o^AY!XHMueN<{y zYPo$cJZ6f7``tmlR5h8WUGm;G*i}ff!h`}L#ypFyV7iuca!J+C-4m@7*Pmj9>m+jh zlpWbud)8j9zvQ`8-oQF#u=4!uK4kMFh>qS_pZciyq3NC(dQ{577lr-!+HD*QO_zB9 z_Rv<#qB{AAEF8Gbr7xQly%nMA%oR`a-i7nJw95F3iH&IX5hhy3CCV5y>mK4)&5aC*12 zI`{(g%MHq<(ocY5+@OK-Qn-$%!Nl%AGCgHl>e8ogTgepIKOf3)WoaOkuRJQt%MN8W z=N-kW+FLw=1^}yN@*-_c>;0N{-B!aXy#O}`%_~Nk?{e|O=JmU8@+92Q-Y6h)>@omP=9i~ zi`krLQK^!=@2BH?-R83DyFkejZkhHJqV%^} zUa&K22zwz7b*@CQV6BQ9X*RB177VCVa{Z!Lf?*c~PwS~V3K{id1TB^WZh=aMqiws5)qWylK#^SG9!tqg3-)p_o(ABJsC!0;0v36;0tC= z!zMQ_@se(*`KkTxJ~$nIx$7ez&_2EI+{4=uI~dwKD$deb5?mwLJ~ema_0Z z6A8Q$1~=tY&l5_EBZ?nAvn$3hIExWo_ZH2R)tYPjxTH5mAw#3n-*sOMVjpUrdnj1DBm4G!J+Ke}a|oQN9f?!p-TcYej+(6FNh_A? zJ3C%AOjc<8%9SPJ)U(md`W5_pzYpLEMwK<_jgeg-VXSX1Nk1oX-{yHz z-;CW!^2ds%PH{L{#12WonyeK5A=`O@s0Uc%s!@22etgSZW!K<%0(FHC+5(BxsXW@e zAvMWiO~XSkmcz%-@s{|F76uFaBJ8L5H>nq6QM-8FsX08ug_=E)r#DC>d_!6Nr+rXe zzUt30Du_d0oSfX~u>qOVR*BmrPBwL@WhF^5+dHjWRB;kB$`m8|46efLBXLkiF|*W= zg|Hd(W}ZnlJLotYZCYKoL7YsQdLXZ!F`rLqLf8n$OZOyAzK`uKcbC-n0qoH!5-rh&k-`VADETKHxrhK<5C zhF0BB4azs%j~_q_HA#fYPO0r;YTlaa-eb)Le+!IeP>4S{b8&STp|Y0if*`-A&DQ$^ z-%=i73HvEMf_V6zSEF?G>G-Eqn+|k`0=q?(^|ZcqWsuLlMF2!E*8dDAx%)}y=lyMa z$Nn0_f8YN8g<4D>8IL3)GPf#dJYU@|NZqIX$;Lco?Qj=?W6J;D@pa`T=Yh z-ybpFyFr*3^gRt!9NnbSJWs2R-S?Y4+s~J8vfrPd_&_*)HBQ{&rW(2X>P-_CZU8Y9 z-32><7|wL*K+3{ZXE5}nn~t@NNT#Bc0F6kKI4pVwLrpU@C#T-&f{Vm}0h1N3#89@d zgcx3QyS;Pb?V*XAq;3(W&rjLBazm69XX;%^n6r}0!CR2zTU1!x#TypCr`yrII%wk8 z+g)fyQ!&xIX(*>?T}HYL^>wGC2E}euj{DD_RYKK@w=yF+44367X17)GP8DCmBK!xS zE{WRfQ(WB-v>DAr!{F2-cQKHIjIUnLk^D}7XcTI#HyjSiEX)BO^GBI9NjxojYfQza zWsX@GkLc7EqtP8(UM^cq5zP~{?j~*2T^Bb={@PV)DTkrP<9&hxDwN2@hEq~8(ZiF! z3FuQH_iHyQ_s-#EmAC5~K$j_$cw{+!T>dm#8`t%CYA+->rWp09jvXY`AJQ-l%C{SJ z1c~@<5*7$`1%b}n7ivSo(1(j8k+*Gek(m^rQ!+LPvb=xA@co<|(XDK+(tb46xJ4) zcw7w<0p3=Idb_FjQ@ttoyDmF?cT4JRGrX5xl&|ViA@Lg!vRR}p#$A?0=Qe+1)Mizl zn;!zhm`B&9t0GA67GF09t_ceE(bGdJ0mbXYrUoV2iuc3c69e;!%)xNOGG*?x*@5k( zh)snvm0s&gRq^{yyeE)>hk~w8)nTN`8HJRtY0~1f`f9ue%RV4~V(K*B;jFfJY4dBb z*BGFK`9M-tpWzayiD>p_`U(29f$R|V-qEB;+_4T939BPb=XRw~8n2cGiRi`o$2qm~ zN&5N7JU{L*QGM@lO8VI)fUA0D7bPrhV(GjJ$+@=dcE5vAVyCy6r&R#4D=GyoEVOnu z8``8q`PN-pEy>xiA_@+EN?EJpY<#}BhrsUJC0afQFx7-pBeLXR9Mr+#w@!wSNR7vxHy@r`!9MFecB4O zh9jye3iSzL0@t3)OZ=OxFjjyK#KSF|zz@K}-+HaY6gW+O{T6%Zky@gD$6SW)Jq;V0 zt&LAG*YFO^+=ULohZZW*=3>7YgND-!$2}2)Mt~c>JO3j6QiPC-*ayH2xBF)2m7+}# z`@m#q{J9r~Dr^eBgrF(l^#sOjlVNFgDs5NR*Xp;V*wr~HqBx7?qBUZ8w)%vIbhhe) zt4(#1S~c$Cq7b_A%wpuah1Qn(X9#obljoY)VUoK%OiQZ#Fa|@ZvGD0_oxR=vz{>U* znC(W7HaUDTc5F!T77GswL-jj7e0#83DH2+lS-T@_^SaWfROz9btt*5zDGck${}*njAwf}3hLqKGLTeV&5(8FC+IP>s;p{L@a~RyCu)MIa zs~vA?_JQ1^2Xc&^cjDq02tT_Z0gkElR0Aa$v@VHi+5*)1(@&}gEXxP5Xon?lxE@is z9sxd|h#w2&P5uHJxWgmtVZJv5w>cl2ALzri;r57qg){6`urTu(2}EI?D?##g=!Sbh z*L*>c9xN1a3CH$u7C~u_!g81`W|xp=54oZl9CM)&V9~ATCC-Q!yfKD@vp#2EKh0(S zgt~aJ^oq-TM0IBol!w1S2j7tJ8H7;SR7yn4-H}iz&U^*zW95HrHiT!H&E|rSlnCYr z7Y1|V7xebn=TFbkH;>WIH6H>8;0?HS#b6lCke9rSsH%3AM1#2U-^*NVhXEIDSFtE^ z=jOo1>j!c__Bub(R*dHyGa)@3h?!ls1&M)d2{?W5#1|M@6|ENYYa`X=2EA_oJUw=I zjQ)K6;C!@>^i7vdf`pBOjH>Ts$97}B=lkb07<&;&?f#cy3I0p5{1=?O*#8m$C_5TE zh}&8lOWWF7I@|pRC$G2;Sm#IJfhKW@^jk=jfM1MdJP(v2fIrYTc{;e5;5gsp`}X8-!{9{S1{h+)<@?+D13s^B zq9(1Pu(Dfl#&z|~qJGuGSWDT&u{sq|huEsbJhiqMUae}K*g+R(vG7P$p6g}w*eYWn zQ7luPl1@{vX?PMK%-IBt+N7TMn~GB z!Ldy^(2Mp{fw_0;<$dgHAv1gZgyJAx%}dA?jR=NPW1K`FkoY zNDgag#YWI6-a2#&_E9NMIE~gQ+*)i<>0c)dSRUMHpg!+AL;a;^u|M1jp#0b<+#14z z+#LuQ1jCyV_GNj#lHWG3e9P@H34~n0VgP#(SBX=v|RSuOiY>L87 z#KA{JDDj2EOBX^{`a;xQxHtY1?q5^B5?up1akjEPhi1-KUsK|J9XEBAbt%^F`t0I- zjRYYKI4OB7Zq3FqJFBZwbI=RuT~J|4tA8x)(v2yB^^+TYYJS>Et`_&yge##PuQ%0I z^|X!Vtof}`UuIxPjoH8kofw4u1pT5h`Ip}d8;l>WcG^qTe>@x63s#zoJiGmDM@_h= zo;8IZR`@AJRLnBNtatipUvL^(1P_a;q8P%&voqy#R!0(bNBTlV&*W9QU?kRV1B*~I zWvI?SNo2cB<7bgVY{F_CF$7z!02Qxfw-Ew#p!8PC#! z1sRfOl`d-Y@&=)l(Sl4CS=>fVvor5lYm61C!!iF3NMocKQHUYr0%QM}a4v2>rzPfM zUO}YRDb7-NEqW+p_;e0{Zi%0C$&B3CKx6|4BW`@`AwsxE?Vu}@Jm<3%T5O&05z+Yq zkK!QF(vlN}Rm}m_J+*W4`8i~R&`P0&5!;^@S#>7qkfb9wxFv@(wN@$k%2*sEwen$a zQnWymf+#Uyv)0lQVd?L1gpS}jMQZ(NHHCKRyu zjK|Zai0|N_)5iv)67(zDBCK4Ktm#ygP|0(m5tU`*AzR&{TSeSY8W=v5^=Ic`ahxM-LBWO+uoL~wxZmgcSJMUF9q%<%>jsvh9Dnp^_e>J_V=ySx4p?SF0Y zg4ZpZt@!h>WR76~P3_YchYOak7oOzR|`t+h!BbN}?zd zq+vMTt0!duALNWDwWVIA$O=%{lWJEj;5(QD()huhFL5=6x_=1h|5ESMW&S|*oxgF# z-0GRIb ziolwI13hJ-Rl(4Rj@*^=&Zz3vD$RX8bFWvBM{niz(%?z0gWNh_vUvpBDoa>-N=P4c zbw-XEJ@txIbc<`wC883;&yE4ayVh>+N($SJ01m}fumz!#!aOg*;y4Hl{V{b;&ux3& zBEmSq2jQ7#IbVm3TPBw?2vVN z0wzj|Y6EBS(V%Pb+@OPkMvEKHW~%DZk#u|A18pZMmCrjWh%7J4Ph>vG61 zRBgJ6w^8dNRg2*=K$Wvh$t>$Q^SMaIX*UpBG)0bqcvY%*by=$EfZAy{ZOA#^tB(D( zh}T(SZgdTj?bG9u+G{Avs5Yr1x=f3k7%K|eJp^>BHK#~dsG<&+=`mM@>kQ-cAJ2k) zT+Ht5liXdc^(aMi9su~{pJUhe)!^U&qn%mV6PS%lye+Iw5F@Xv8E zdR4#?iz+R4--iiHDQmQWfNre=iofAbF~1oGTa1Ce?hId~W^kPuN(5vhNx++ZLkn?l zUA7L~{0x|qA%%%P=8+-Ck{&2$UHn#OQncFS@uUVuE39c9o~#hl)v#!$X(X*4ban2c z{buYr9!`H2;6n73n^W3Vg(!gdBV7$e#v3qubWALaUEAf@`ava{UTx%2~VVQbEE(*Q8_ zv#me9i+0=QnY)$IT+@3vP1l9Wrne+MlZNGO6|zUVG+v&lm7Xw3P*+gS6e#6mVx~(w zyuaXogGTw4!!&P3oZ1|4oc_sGEa&m3Jsqy^lzUdJ^y8RlvUjDmbC^NZ0AmO-c*&m( zSI%4P9f|s!B#073b>Eet`T@J;3qY!NrABuUaED6M^=s-Q^2oZS`jVzuA z>g&g$!Tc>`u-Q9PmKu0SLu-X(tZeZ<%7F+$j3qOOftaoXO5=4!+P!%Cx0rNU+@E~{ zxCclYb~G(Ci%o{}4PC(Bu>TyX9slm5A^2Yi$$kCq-M#Jl)a2W9L-bq5%@Pw^ zh*iuuAz`x6N_rJ1LZ7J^MU9~}RYh+EVIVP+-62u+7IC%1p@;xmmQ`dGCx$QpnIUtK z0`++;Ddz7{_R^~KDh%_yo8WM$IQhcNOALCIGC$3_PtUs?Y44@Osw;OZ()Lk=(H&Vc zXjkHt+^1@M|J%Q&?4>;%T-i%#h|Tb1u;pO5rKst8(Cv2!3U{TRXdm&>fWTJG)n*q&wQPjRzg%pS1RO9}U0*C6fhUi&f#qoV`1{U<&mWKS<$oVFW>{&*$6)r6Rx)F4W zdUL8Mm_qNk6ycFVkI5F?V+cYFUch$92|8O^-Z1JC94GU+Nuk zA#n3Z1q4<6zRiv%W5`NGk*Ym{#0E~IA6*)H-=RmfWIY%mEC0? zSih7uchi`9-WkF2@z1ev6J_N~u;d$QfSNLMgPVpHZoh9oH-8D*;EhoCr~*kJ<|-VD z_jklPveOxWZq40E!SV@0XXy+~Vfn!7nZ1GXsn~U$>#u0d*f?RL9!NMlz^qxYmz|xt zz6A&MUAV#eD%^GcP#@5}QH5e7AV`}(N2#(3xpc!7dDmgu7C3TpgX5Z|$%Vu8=&SQI zdxUk*XS-#C^-cM*O>k}WD5K81e2ayyRA)R&5>KT1QL!T!%@}fw{>BsF+-pzu>;7{g z^CCSWfH;YtJGT@+An0Ded#zM9>UEFOdR_Xq zS~!5R*{p1Whq62ynHo|n$4p7&d|bal{iGsxAY?opi3R${)Zt*8YyOU!$TWMYXF?|i zPXYr}wJp#EH;keSG5WYJ*(~oiu#GDR>C4%-HpIWr7v`W`lzQN-lb?*vpoit z8FqJ)`LC4w8fO8Fu}AYV`awF2NLMS4$f+?=KisU4P6@#+_t)5WDz@f*qE|NG0*hwO z&gv^k^kC6Fg;5>Gr`Q46C{6>3F(p0QukG6NM07rxa&?)_C*eyU(jtli>9Zh#eUb(y zt9NbC-bp0>^m?i`?$aJUyBmF`N0zQ% zvF_;vLVI{tq%Ji%u*8s2p4iBirv*uD(?t~PEz$CfxVa=@R z^HQu6-+I9w>a35kX!P)TfnJDD!)j8!%38(vWNe9vK0{k*`FS$ABZ`rdwfQe@IGDki zssfXnsa6teKXCZUTd^qhhhUZ}>GG_>F0~LG7*<*x;8e39nb-0Bka(l)%+QZ_IVy3q zcmm2uKO0p)9|HGxk*e_$mX2?->&-MXe`=Fz3FRTFfM!$_y}G?{F9jmNgD+L%R`jM1 zIP-kb=3Hlsb35Q&qo(%Ja(LwQj>~!GI|Hgq65J9^A!ibChYB3kxLn@&=#pr}BwON0Q=e5;#sF8GGGuzx6O}z%u3l?jlKF&8Y#lUA)Cs6ZiW8DgOk|q z=YBPAMsO7AoAhWgnSKae2I7%7*Xk>#AyLX-InyBO?OD_^2^nI4#;G|tBvg3C0ldO0 z*`$g(q^es4VqXH2t~0-u^m5cfK8eECh3Rb2h1kW%%^8A!+ya3OHLw$8kHorx4(vJO zAlVu$nC>D{7i?7xDg3116Y2e+)Zb4FPAdZaX}qA!WW{$d?u+sK(iIKqOE-YM zH7y^hkny24==(1;qEacfFU{W{xSXhffC&DJV&oqw`u~WAl@=HIel>KC-mLs2ggFld zsSm-03=Jd^XNDA4i$vKqJ|e|TBc19bglw{)QL${Q(xlN?E;lPumO~;4w_McND6d+R zsc2p*&uRWd`wTDszTcWKiii1mNBrF7n&LQp$2Z<}zkv=8k2s6-^+#siy_K1`5R+n( z++5VOU^LDo(kt3ok?@$3drI`<%+SWcF*`CUWqAJxl3PAq!X|q{al;8%HfgxxM#2Vb zeBS756iU|BzB>bN2NP=AX&!{uZXS;|F`LLd9F^97UTMnNks_t7EPnjZF`2ocD2*u+ z?oKP{xXrD*AKGYGkZtlnvCuazg6g16ZAF{Nu%w+LCZ+v_*`0R$NK)tOh_c#cze;o$ z)kY(eZ5Viv<5zl1XfL(#GO|2FlXL#w3T?hpj3BZ&OAl^L!7@ zy;+iJWYQYP?$(`li_!|bfn!h~k#=v-#XXyjTLd+_txOqZZETqSEp>m+O0ji7MxZ*W zSdq+yqEmafrsLErZG8&;kH2kbCwluSa<@1yU3^Q#5HmW(hYVR0E6!4ZvH;Cr<$`qf zSvqRc`Pq_9b+xrtN3qLmds9;d7HdtlR!2NV$rZPCh6>(7f7M}>C^LeM_5^b$B~mn| z#)?`E=zeo9(9?{O_ko>51~h|c?8{F=2=_-o(-eRc z9p)o51krhCmff^U2oUi#$AG2p-*wSq8DZ(i!Jmu1wzD*)#%J&r)yZTq`3e|v4>EI- z=c|^$Qhv}lEyG@!{G~@}Wbx~vxTxwKoe9zn%5_Z^H$F1?JG_Kadc(G8#|@yaf2-4< zM1bdQF$b5R!W1f`j(S>Id;CHMzfpyjYEC_95VQ*$U3y5piVy=9Rdwg7g&)%#6;U%b2W}_VVdh}qPnM4FY9zFP(5eR zWuCEFox6e;COjs$1RV}IbpE0EV;}5IP}Oq|zcb*77PEDIZU{;@_;8*22{~JRvG~1t zc+ln^I+)Q*+Ha>(@=ra&L&a-kD;l$WEN;YL0q^GE8+})U_A_StHjX_gO{)N>tx4&F zRK?99!6JqktfeS-IsD@74yuq*aFJoV{5&K(W`6Oa2Qy0O5JG>O`zZ-p7vBGh!MxS;}}h6(96Wp`dci3DY?|B@1p8fVsDf$|0S zfE{WL5g3<9&{~yygYyR?jK!>;eZ2L#tpL2)H#89*b zycE?VViXbH7M}m33{#tI69PUPD=r)EVPTBku={Qh{ zKi*pht1jJ+yRhVE)1=Y()iS9j`FesMo$bjLSqPMF-i<42Hxl6%y7{#vw5YT(C}x0? z$rJU7fFmoiR&%b|Y*pG?7O&+Jb#Z%S8&%o~fc?S9c`Dwdnc4BJC7njo7?3bp#Yonz zPC>y`DVK~nzN^n}jB5RhE4N>LzhCZD#WQseohYXvqp5^%Ns!q^B z&8zQN(jgPS(2ty~g2t9!x9;Dao~lYVujG-QEq{vZp<1Nlp;oj#kFVsBnJssU^p-4% zKF_A?5sRmA>d*~^og-I95z$>T*K*33TGBPzs{OMoV2i+(P6K|95UwSj$Zn<@Rt(g%|iY z$SkSjYVJ)I<@S(kMQ6md{HxAa8S`^lXGV?ktLX!ngTVI~%WW+p#A#XTWaFWeBAl%U z&rVhve#Yse*h4BC4nrq7A1n>Rlf^ErbOceJC`o#fyCu@H;y)`E#a#)w)3eg^{Hw&E7);N5*6V+z%olvLj zp^aJ4`h*4L4ij)K+uYvdpil(Z{EO@u{BcMI&}5{ephilI%zCkBhBMCvOQT#zp|!18 zuNl=idd81|{FpGkt%ty=$fnZnWXxem!t4x{ zat@68CPmac(xYaOIeF}@O1j8O?2jbR!KkMSuix;L8x?m01}|bS2=&gsjg^t2O|+0{ zlzfu5r5_l4)py8uPb5~NHPG>!lYVynw;;T-gk1Pl6PQ39Mwgd2O+iHDB397H)2grN zHwbd>8i%GY>Pfy7;y5X7AN>qGLZVH>N_ZuJZ-`z9UA> zfyb$nbmPqxyF2F;UW}7`Cu>SS%0W6h^Wq5e{PWAjxlh=#Fq+6SiPa-L*551SZKX&w zc9TkPv4eao?kqomkZ#X%tA{`UIvf|_=Y7p~mHZKqO>i_;q4PrwVtUDTk?M7NCssa?Y4uxYrsXj!+k@`Cxl;&{NLs*6!R<6k9$Bq z%grLhxJ#G_j~ytJpiND8neLfvD0+xu>wa$-%5v;4;RYYM66PUab)c9ruUm%d{^s{# zTBBY??@^foRv9H}iEf{w_J%rV<%T1wv^`)Jm#snLTIifjgRkX``x2wV(D6(=VTLL4 zI-o}&5WuwBl~(XSLIn5~{cGWorl#z+=(vXuBXC#lp}SdW=_)~8Z(Vv!#3h2@pdA3d z{cIPYK@Ojc9(ph=H3T7;aY>(S3~iuIn05Puh^32WObj%hVN(Y{Ty?n?Cm#!kGNZFa zW6Ybz!tq|@erhtMo4xAus|H8V_c+XfE5mu|lYe|{$V3mKnb1~fqoFim;&_ZHN_=?t zysQwC4qO}rTi}k8_f=R&i27RdBB)@bTeV9Wcd}Rysvod}7I%ujwYbTI*cN7Kbp_hO z=eU521!#cx$0O@k9b$;pnCTRtLIzv){nVW6Ux1<0@te6`S5%Ew3{Z^9=lbL5$NFvd4eUtK?%zgmB;_I&p`)YtpN`2Im(?jPN<(7Ua_ZWJRF(CChv`(gHfWodK%+joy>8Vaa;H1w zIJ?!kA|x7V;4U1BNr(UrhfvjPii7YENLIm`LtnL9Sx z5E9TYaILoB2nSwDe|BVmrpLT43*dJ8;T@1l zJE)4LEzIE{IN}+Nvpo3=ZtV!U#D;rB@9OXYw^4QH+(52&pQEcZq&~u9bTg63ikW9! z=!_RjN2xO=F+bk>fSPhsjQA;)%M1My#34T`I7tUf>Q_L>DRa=>Eo(sapm>}}LUsN% zVw!C~a)xcca`G#g*Xqo>_uCJTz>LoWGSKOwp-tv`yvfqw{17t`9Z}U4o+q2JGP^&9 z(m}|d13XhYSnEm$_8vH-Lq$A^>oWUz1)bnv|AVn_0FwM$vYu&8+qUg$+qP}nwrykD zwmIF?wr$()X@33oz1@B9zi+?Th^nZnsES)rb@O*K^JL~ZH|pRRk$i0+ohh?Il)y&~ zQaq{}9YxPt5~_2|+r#{k#~SUhO6yFq)uBGtYMMg4h1qddg!`TGHocYROyNFJtYjNe z3oezNpq6%TP5V1g(?^5DMeKV|i6vdBq)aGJ)BRv;K(EL0_q7$h@s?BV$)w31*c(jd z{@hDGl3QdXxS=#?0y3KmPd4JL(q(>0ikTk6nt98ptq$6_M|qrPi)N>HY>wKFbnCKY z%0`~`9p)MDESQJ#A`_>@iL7qOCmCJ(p^>f+zqaMuDRk!z01Nd2A_W^D%~M73jTqC* zKu8u$$r({vP~TE8rPk?8RSjlRvG*BLF}ye~Su%s~rivmjg2F z24dhh6-1EQF(c>Z1E8DWY)Jw#9U#wR<@6J)3hjA&2qN$X%piJ4s={|>d-|Gzl~RNu z##iR(m;9TN3|zh+>HgTI&82iR>$YVoOq$a(2%l*2mNP(AsV=lR^>=tIP-R9Tw!BYnZROx`PN*JiNH>8bG}&@h0_v$yOTk#@1;Mh;-={ZU7e@JE(~@@y0AuETvsqQV@7hbKe2wiWk@QvV=Kz`%@$rN z_0Hadkl?7oEdp5eaaMqBm;#Xj^`fxNO^GQ9S3|Fb#%{lN;1b`~yxLGEcy8~!cz{!! z=7tS!I)Qq%w(t9sTSMWNhoV#f=l5+a{a=}--?S!rA0w}QF!_Eq>V4NbmYKV&^OndM z4WiLbqeC5+P@g_!_rs01AY6HwF7)$~%Ok^(NPD9I@fn5I?f$(rcOQjP+z?_|V0DiN zb}l0fy*el9E3Q7fVRKw$EIlb&T0fG~fDJZL7Qn8*a5{)vUblM)*)NTLf1ll$ zpQ^(0pkSTol`|t~`Y4wzl;%NRn>689mpQrW=SJ*rB;7}w zVHB?&sVa2%-q@ANA~v)FXb`?Nz8M1rHKiZB4xC9<{Q3T!XaS#fEk=sXI4IFMnlRqG+yaFw< zF{}7tcMjV04!-_FFD8(FtuOZx+|CjF@-xl6-{qSFF!r7L3yD()=*Ss6fT?lDhy(h$ zt#%F575$U(3-e2LsJd>ksuUZZ%=c}2dWvu8f!V%>z3gajZ!Dlk zm=0|(wKY`c?r$|pX6XVo6padb9{EH}px)jIsdHoqG^(XH(7}r^bRa8BC(%M+wtcB? z6G2%tui|Tx6C3*#RFgNZi9emm*v~txI}~xV4C`Ns)qEoczZ>j*r zqQCa5k90Gntl?EX!{iWh=1t$~jVoXjs&*jKu0Ay`^k)hC^v_y0xU~brMZ6PPcmt5$ z@_h`f#qnI$6BD(`#IR0PrITIV^~O{uo=)+Bi$oHA$G* zH0a^PRoeYD3jU_k%!rTFh)v#@cq`P3_y=6D(M~GBud;4 zCk$LuxPgJ5=8OEDlnU!R^4QDM4jGni}~C zy;t2E%Qy;A^bz_5HSb5pq{x{g59U!ReE?6ULOw58DJcJy;H?g*ofr(X7+8wF;*3{rx>j&27Syl6A~{|w{pHb zeFgu0E>OC81~6a9(2F13r7NZDGdQxR8T68&t`-BK zE>ZV0*0Ba9HkF_(AwfAds-r=|dA&p`G&B_zn5f9Zfrz9n#Rvso`x%u~SwE4SzYj!G zVQ0@jrLwbYP=awX$21Aq!I%M{x?|C`narFWhp4n;=>Sj!0_J!k7|A0;N4!+z%Oqlk z1>l=MHhw3bi1vT}1!}zR=6JOIYSm==qEN#7_fVsht?7SFCj=*2+Ro}B4}HR=D%%)F z?eHy=I#Qx(vvx)@Fc3?MT_@D))w@oOCRR5zRw7614#?(-nC?RH`r(bb{Zzn+VV0bm zJ93!(bfrDH;^p=IZkCH73f*GR8nDKoBo|!}($3^s*hV$c45Zu>6QCV(JhBW=3(Tpf z=4PT6@|s1Uz+U=zJXil3K(N6;ePhAJhCIo`%XDJYW@x#7Za);~`ANTvi$N4(Fy!K- z?CQ3KeEK64F0@ykv$-0oWCWhYI-5ZC1pDqui@B|+LVJmU`WJ=&C|{I_))TlREOc4* zSd%N=pJ_5$G5d^3XK+yj2UZasg2) zXMLtMp<5XWWfh-o@ywb*nCnGdK{&S{YI54Wh2|h}yZ})+NCM;~i9H@1GMCgYf`d5n zwOR(*EEkE4-V#R2+Rc>@cAEho+GAS2L!tzisLl${42Y=A7v}h;#@71_Gh2MV=hPr0_a% z0!={Fcv5^GwuEU^5rD|sP;+y<%5o9;#m>ssbtVR2g<420(I-@fSqfBVMv z?`>61-^q;M(b3r2z{=QxSjyH=-%99fpvb}8z}d;%_8$$J$qJg1Sp3KzlO_!nCn|g8 zzg8skdHNsfgkf8A7PWs;YBz_S$S%!hWQ@G>guCgS--P!!Ui9#%GQ#Jh?s!U-4)7ozR?i>JXHU$| zg0^vuti{!=N|kWorZNFX`dJgdphgic#(8sOBHQdBkY}Qzp3V%T{DFb{nGPgS;QwnH9B9;-Xhy{? z(QVwtzkn9I)vHEmjY!T3ifk1l5B?%%TgP#;CqG-?16lTz;S_mHOzu#MY0w}XuF{lk z*dt`2?&plYn(B>FFXo+fd&CS3q^hquSLVEn6TMAZ6e*WC{Q2e&U7l|)*W;^4l~|Q= zt+yFlLVqPz!I40}NHv zE2t1meCuGH%<`5iJ(~8ji#VD{?uhP%F(TnG#uRZW-V}1=N%ev&+Gd4v!0(f`2Ar-Y z)GO6eYj7S{T_vxV?5^%l6TF{ygS_9e2DXT>9caP~xq*~oE<5KkngGtsv)sdCC zaQH#kSL%c*gLj6tV)zE6SGq|0iX*DPV|I`byc9kn_tNQkPU%y<`rj zMC}lD<93=Oj+D6Y2GNMZb|m$^)RVdi`&0*}mxNy0BW#0iq!GGN2BGx5I0LS>I|4op z(6^xWULBr=QRpbxIJDK~?h;K#>LwQI4N<8V?%3>9I5l+e*yG zFOZTIM0c3(q?y9f7qDHKX|%zsUF%2zN9jDa7%AK*qrI5@z~IruFP+IJy7!s~TE%V3 z_PSSxXlr!FU|Za>G_JL>DD3KVZ7u&}6VWbwWmSg?5;MabycEB)JT(eK8wg`^wvw!Q zH5h24_E$2cuib&9>Ue&@%Cly}6YZN-oO_ei5#33VvqV%L*~ZehqMe;)m;$9)$HBsM zfJ96Hk8GJyWwQ0$iiGjwhxGgQX$sN8ij%XJzW`pxqgwW=79hgMOMnC|0Q@ed%Y~=_ z?OnjUB|5rS+R$Q-p)vvM(eFS+Qr{_w$?#Y;0Iknw3u(+wA=2?gPyl~NyYa3me{-Su zhH#8;01jEm%r#5g5oy-f&F>VA5TE_9=a0aO4!|gJpu470WIrfGo~v}HkF91m6qEG2 zK4j=7C?wWUMG$kYbIp^+@)<#ArZ$3k^EQxraLk0qav9TynuE7T79%MsBxl3|nRn?L zD&8kt6*RJB6*a7=5c57wp!pg)p6O?WHQarI{o9@3a32zQ3FH8cK@P!DZ?CPN_LtmC6U4F zlv8T2?sau&+(i@EL6+tvP^&=|aq3@QgL4 zOu6S3wSWeYtgCnKqg*H4ifIQlR4hd^n{F+3>h3;u_q~qw-Sh;4dYtp^VYymX12$`? z;V2_NiRt82RC=yC+aG?=t&a81!gso$hQUb)LM2D4Z{)S zI1S9f020mSm(Dn$&Rlj0UX}H@ zv={G+fFC>Sad0~8yB%62V(NB4Z|b%6%Co8j!>D(VyAvjFBP%gB+`b*&KnJ zU8s}&F+?iFKE(AT913mq;57|)q?ZrA&8YD3Hw*$yhkm;p5G6PNiO3VdFlnH-&U#JH zEX+y>hB(4$R<6k|pt0?$?8l@zeWk&1Y5tlbgs3540F>A@@rfvY;KdnVncEh@N6Mfi zY)8tFRY~Z?Qw!{@{sE~vQy)0&fKsJpj?yR`Yj+H5SDO1PBId3~d!yjh>FcI#Ug|^M z7-%>aeyQhL8Zmj1!O0D7A2pZE-$>+-6m<#`QX8(n)Fg>}l404xFmPR~at%$(h$hYD zoTzbxo`O{S{E}s8Mv6WviXMP}(YPZoL11xfd>bggPx;#&pFd;*#Yx%TtN1cp)MuHf z+Z*5CG_AFPwk624V9@&aL0;=@Ql=2h6aJoqWx|hPQQzdF{e7|fe(m){0==hk_!$ou zI|p_?kzdO9&d^GBS1u+$>JE-6Ov*o{mu@MF-?$r9V>i%;>>Fo~U`ac2hD*X}-gx*v z1&;@ey`rA0qNcD9-5;3_K&jg|qvn@m^+t?8(GTF0l#|({Zwp^5Ywik@bW9mN+5`MU zJ#_Ju|jtsq{tv)xA zY$5SnHgHj}c%qlQG72VS_(OSv;H~1GLUAegygT3T-J{<#h}))pk$FjfRQ+Kr%`2ZiI)@$96Nivh82#K@t>ze^H?R8wHii6Pxy z0o#T(lh=V>ZD6EXf0U}sG~nQ1dFI`bx;vivBkYSVkxXn?yx1aGxbUiNBawMGad;6? zm{zp?xqAoogt=I2H0g@826=7z^DmTTLB11byYvAO;ir|O0xmNN3Ec0w%yHO({-%q(go%?_X{LP?=E1uXoQgrEGOfL1?~ zI%uPHC23dn-RC@UPs;mxq6cFr{UrgG@e3ONEL^SoxFm%kE^LBhe_D6+Ia+u0J=)BC zf8FB!0J$dYg33jb2SxfmkB|8qeN&De!%r5|@H@GiqReK(YEpnXC;-v~*o<#JmYuze zW}p-K=9?0=*fZyYTE7A}?QR6}m_vMPK!r~y*6%My)d;x4R?-=~MMLC_02KejX9q6= z4sUB4AD0+H4ulSYz4;6mL8uaD07eXFvpy*i5X@dmx--+9`ur@rcJ5<L#s%nq3MRi4Dpr;#28}dl36M{MkVs4+Fm3Pjo5qSV)h}i(2^$Ty|<7N z>*LiBzFKH30D!$@n^3B@HYI_V1?yM(G$2Ml{oZ}?frfPU+{i|dHQOP^M0N2#NN_$+ zs*E=MXUOd=$Z2F4jSA^XIW=?KN=w6{_vJ4f(ZYhLxvFtPozPJv9k%7+z!Zj+_0|HC zMU0(8`8c`Sa=%e$|Mu2+CT22Ifbac@7Vn*he`|6Bl81j`44IRcTu8aw_Y%;I$Hnyd zdWz~I!tkWuGZx4Yjof(?jM;exFlUsrj5qO=@2F;56&^gM9D^ZUQ!6TMMUw19zslEu zwB^^D&nG96Y+Qwbvgk?Zmkn9%d{+V;DGKmBE(yBWX6H#wbaAm&O1U^ zS4YS7j2!1LDC6|>cfdQa`}_^satOz6vc$BfFIG07LoU^IhVMS_u+N=|QCJao0{F>p z-^UkM)ODJW9#9*o;?LPCRV1y~k9B`&U)jbTdvuxG&2%!n_Z&udT=0mb@e;tZ$_l3bj6d0K2;Ya!&)q`A${SmdG_*4WfjubB)Mn+vaLV+)L5$yD zYSTGxpVok&fJDG9iS8#oMN{vQneO|W{Y_xL2Hhb%YhQJgq7j~X7?bcA|B||C?R=Eo z!z;=sSeKiw4mM$Qm>|aIP3nw36Tbh6Eml?hL#&PlR5xf9^vQGN6J8op1dpLfwFg}p zlqYx$610Zf?=vCbB_^~~(e4IMic7C}X(L6~AjDp^;|=d$`=!gd%iwCi5E9<6Y~z0! zX8p$qprEadiMgq>gZ_V~n$d~YUqqqsL#BE6t9ufXIUrs@DCTfGg^-Yh5Ms(wD1xAf zTX8g52V!jr9TlWLl+whcUDv?Rc~JmYs3haeG*UnV;4bI=;__i?OSk)bF3=c9;qTdP zeW1exJwD+;Q3yAw9j_42Zj9nuvs%qGF=6I@($2Ue(a9QGRMZTd4ZAlxbT5W~7(alP1u<^YY!c3B7QV z@jm$vn34XnA6Gh1I)NBgTmgmR=O1PKp#dT*mYDPRZ=}~X3B8}H*e_;;BHlr$FO}Eq zJ9oWk0y#h;N1~ho724x~d)A4Z-{V%F6#e5?Z^(`GGC}sYp5%DKnnB+i-NWxwL-CuF+^JWNl`t@VbXZ{K3#aIX+h9-{T*+t(b0BM&MymW9AA*{p^&-9 zWpWQ?*z(Yw!y%AoeoYS|E!(3IlLksr@?Z9Hqlig?Q4|cGe;0rg#FC}tXTmTNfpE}; z$sfUYEG@hLHUb$(K{A{R%~%6MQN|Bu949`f#H6YC*E(p3lBBKcx z-~Bsd6^QsKzB0)$FteBf*b3i7CN4hccSa-&lfQz4qHm>eC|_X!_E#?=`M(bZ{$cvU zZpMbr|4omp`s9mrgz@>4=Fk3~8Y7q$G{T@?oE0<(I91_t+U}xYlT{c&6}zPAE8ikT z3DP!l#>}i!A(eGT+@;fWdK#(~CTkwjs?*i4SJVBuNB2$6!bCRmcm6AnpHHvnN8G<| zuh4YCYC%5}Zo;BO1>L0hQ8p>}tRVx~O89!${_NXhT!HUoGj0}bLvL2)qRNt|g*q~B z7U&U7E+8Ixy1U`QT^&W@ZSRN|`_Ko$-Mk^^c%`YzhF(KY9l5))1jSyz$&>mWJHZzHt0Jje%BQFxEV}C00{|qo5_Hz7c!FlJ|T(JD^0*yjkDm zL}4S%JU(mBV|3G2jVWU>DX413;d+h0C3{g3v|U8cUj`tZL37Sf@1d*jpwt4^B)`bK zZdlwnPB6jfc7rIKsldW81$C$a9BukX%=V}yPnaBz|i6(h>S)+Bn44@i8RtBZf0XetH&kAb?iAL zD%Ge{>Jo3sy2hgrD?15PM}X_)(6$LV`&t*D`IP)m}bzM)+x-xRJ zavhA)>hu2cD;LUTvN38FEtB94ee|~lIvk~3MBPzmTsN|7V}Kzi!h&za#NyY zX^0BnB+lfBuW!oR#8G&S#Er2bCVtA@5FI`Q+a-e?G)LhzW_chWN-ZQmjtR

eWu-UOPu^G}|k=o=;ffg>8|Z*qev7qS&oqA7%Z{4Ezb!t$f3& z^NuT8CSNp`VHScyikB1YO{BgaBVJR&>dNIEEBwYkfOkWN;(I8CJ|vIfD}STN z{097)R9iC@6($s$#dsb*4BXBx7 zb{6S2O}QUk>upEfij9C2tjqWy7%%V@Xfpe)vo6}PG+hmuY1Tc}peynUJLLmm)8pshG zb}HWl^|sOPtYk)CD-7{L+l(=F zOp}fX8)|n{JDa&9uI!*@jh^^9qP&SbZ(xxDhR)y|bjnn|K3MeR3gl6xcvh9uqzb#K zYkVjnK$;lUky~??mcqN-)d5~mk{wXhrf^<)!Jjqc zG~hX0P_@KvOKwV=X9H&KR3GnP3U)DfqafBt$e10}iuVRFBXx@uBQ)sn0J%%c<;R+! zQz;ETTVa+ma>+VF%U43w?_F6s0=x@N2(oisjA7LUOM<$|6iE|$WcO67W|KY8JUV_# zg7P9K3Yo-c*;EmbsqT!M4(WT`%9uk+s9Em-yB0bE{B%F4X<8fT!%4??vezaJ(wJhj zfOb%wKfkY3RU}7^FRq`UEbB-#A-%7)NJQwQd1As=!$u#~2vQ*CE~qp`u=_kL<`{OL zk>753UqJVx1-4~+d@(pnX-i zV4&=eRWbJ)9YEGMV53poXpv$vd@^yd05z$$@i5J7%>gYKBx?mR2qGv&BPn!tE-_aW zg*C!Z&!B zH>3J16dTJC(@M0*kIc}Jn}jf=f*agba|!HVm|^@+7A?V>Woo!$SJko*Jv1mu>;d}z z^vF{3u5Mvo_94`4kq2&R2`32oyoWc2lJco3`Ls0Ew4E7*AdiMbn^LCV%7%mU)hr4S3UVJjDLUoIKRQ)gm?^{1Z}OYzd$1?a~tEY ztjXmIM*2_qC|OC{7V%430T?RsY?ZLN$w!bkDOQ0}wiq69){Kdu3SqW?NMC))S}zq^ zu)w!>E1!;OrXO!RmT?m&PA;YKUjJy5-Seu=@o;m4*Vp$0OipBl4~Ub)1xBdWkZ47=UkJd$`Z}O8ZbpGN$i_WtY^00`S8=EHG#Ff{&MU1L(^wYjTchB zMTK%1LZ(eLLP($0UR2JVLaL|C2~IFbWirNjp|^=Fl48~Sp9zNOCZ@t&;;^avfN(NpNfq}~VYA{q%yjHo4D>JB>XEv(~Z!`1~SoY=9v zTq;hrjObE_h)cmHXLJ>LC_&XQ2BgGfV}e#v}ZF}iF97bG`Nog&O+SA`2zsn%bbB309}I$ zYi;vW$k@fC^muYBL?XB#CBuhC&^H)F4E&vw(5Q^PF{7~}(b&lF4^%DQzL0(BVk?lM zTHXTo4?Ps|dRICEiux#y77_RF8?5!1D-*h5UY&gRY`WO|V`xxB{f{DHzBwvt1W==r zdfAUyd({^*>Y7lObr;_fO zxDDw7X^dO`n!PLqHZ`by0h#BJ-@bAFPs{yJQ~Ylj^M5zWsxO_WFHG}8hH>OK{Q)9` zSRP94d{AM(q-2x0yhK@aNMv!qGA5@~2tB;X?l{Pf?DM5Y*QK`{mGA? zjx;gwnR~#Nep12dFk<^@-U{`&`P1Z}Z3T2~m8^J&7y}GaMElsTXg|GqfF3>E#HG=j zMt;6hfbfjHSQ&pN9(AT8q$FLKXo`N(WNHDY!K6;JrHZCO&ISBdX`g8sXvIf?|8 zX$-W^ut!FhBxY|+R49o44IgWHt}$1BuE|6|kvn1OR#zhyrw}4H*~cpmFk%K(CTGYc zNkJ8L$eS;UYDa=ZHWZy`rO`!w0oIcgZnK&xC|93#nHvfb^n1xgxf{$LB`H1ao+OGb zKG_}>N-RHSqL(RBdlc7J-Z$Gaay`wEGJ_u-lo88{`aQ*+T~+x(H5j?Q{uRA~>2R+} zB+{wM2m?$->unwg8-GaFrG%ZmoHEceOj{W21)Mi2lAfT)EQuNVo+Do%nHPuq7Ttt7 z%^6J5Yo64dH671tOUrA7I2hL@HKZq;S#Ejxt;*m-l*pPj?=i`=E~FAXAb#QH+a}-% z#3u^pFlg%p{hGiIp>05T$RiE*V7bPXtkz(G<+^E}Risi6F!R~Mbf(Qz*<@2&F#vDr zaL#!8!&ughWxjA(o9xtK{BzzYwm_z2t*c>2jI)c0-xo8ahnEqZ&K;8uF*!Hg0?Gd* z=eJK`FkAr>7$_i$;kq3Ks5NNJkNBnw|1f-&Ys56c9Y@tdM3VTTuXOCbWqye9va6+ZSeF0eh} zYb^ct&4lQTfNZ3M3(9?{;s><(zq%hza7zcxlZ+`F8J*>%4wq8s$cC6Z=F@ zhbvdv;n$%vEI$B~B)Q&LkTse!8Vt};7Szv2@YB!_Ztp@JA>rc(#R1`EZcIdE+JiI% zC2!hgYt+~@%xU?;ir+g92W`*j z3`@S;I6@2rO28zqj&SWO^CvA5MeNEhBF+8-U0O0Q1Co=I^WvPl%#}UFDMBVl z5iXV@d|`QTa$>iw;m$^}6JeuW zjr;{)S2TfK0Q%xgHvONSJb#NA|LOmg{U=k;R?&1tQbylMEY4<1*9mJh&(qo`G#9{X zYRs)#*PtEHnO;PV0G~6G`ca%tpKgb6<@)xc^SQY58lTo*S$*sv5w7bG+8YLKYU`8{ zNBVlvgaDu7icvyf;N&%42z2L4(rR<*Jd48X8Jnw zN>!R$%MZ@~Xu9jH?$2Se&I|ZcW>!26BJP?H7og0hT(S`nXh6{sR36O^7%v=31T+eL z)~BeC)15v>1m#(LN>OEwYFG?TE0_z)MrT%3SkMBBjvCd6!uD+03Jz#!s#Y~b1jf>S z&Rz5&8rbLj5!Y;(Hx|UY(2aw~W(8!3q3D}LRE%XX(@h5TnP@PhDoLVQx;6|r^+Bvs zaR55cR%Db9hZ<<|I%dDkone+8Sq7dqPOMnGoHk~-R*#a8w$c)`>4U`k+o?2|E>Sd4 zZ0ZVT{95pY$qKJ54K}3JB!(WcES>F+x56oJBRg))tMJ^#Qc(2rVcd5add=Us6vpBNkIg9b#ulk%!XBU zV^fH1uY(rGIAiFew|z#MM!qsVv%ZNb#why9%9In4Kj-hDYtMdirWLFzn~de!nnH(V zv0>I3;X#N)bo1$dFzqo(tzmvqNUKraAz~?)OSv42MeM!OYu;2VKn2-s7#fucX`|l~ zplxtG1Pgk#(;V=`P_PZ`MV{Bt4$a7;aLvG@KQo%E=;7ZO&Ws-r@XL+AhnPn>PAKc7 zQ_iQ4mXa-a4)QS>cJzt_j;AjuVCp8g^|dIV=DI0>v-f_|w5YWAX61lNBjZEZax3aV znher(j)f+a9_s8n#|u=kj0(unR1P-*L7`{F28xv054|#DMh}q=@rs@-fbyf(2+52L zN>hn3v!I~%jfOV=j(@xLOsl$Jv-+yR5{3pX)$rIdDarl7(C3)})P`QoHN|y<<2n;` zJ0UrF=Zv}d=F(Uj}~Yv9(@1pqUSRa5_bB*AvQ|Z-6YZ*N%p(U z<;Bpqr9iEBe^LFF!t{1UnRtaH-9=@p35fMQJ~1^&)(2D|^&z?m z855r&diVS6}jmt2)A7LZDiv;&Ys6@W5P{JHY!!n7W zvj3(2{1R9Y=TJ|{^2DK&be*ZaMiRHw>WVI^701fC) zAp1?8?oiU%Faj?Qhou6S^d11_7@tEK-XQ~%q!!7hha-Im^>NcRF7OH7s{IO7arZQ{ zE8n?2><7*!*lH}~usWPWZ}2&M+)VQo7C!AWJSQc>8g_r-P`N&uybK5)p$5_o;+58Q z-Ux2l<3i|hxqqur*qAfHq=)?GDchq}ShV#m6&w|mi~ar~`EO_S=fb~<}66U>5i7$H#m~wR;L~4yHL2R&;L*u7-SPdHxLS&Iy76q$2j#Pe)$WulRiCICG*t+ zeehM8`!{**KRL{Q{8WCEFLXu3+`-XF(b?c1Z~wg?c0lD!21y?NLq?O$STk3NzmrHM zsCgQS5I+nxDH0iyU;KKjzS24GJmG?{D`08|N-v+Egy92lBku)fnAM<}tELA_U`)xKYb=pq|hejMCT1-rg0Edt6(*E9l9WCKI1a=@c99swp2t6Tx zFHy`8Hb#iXS(8c>F~({`NV@F4w0lu5X;MH6I$&|h*qfx{~DJ*h5e|61t1QP}tZEIcjC%!Fa)omJTfpX%aI+OD*Y(l|xc0$1Zip;4rx; zV=qI!5tSuXG7h?jLR)pBEx!B15HCoVycD&Z2dlqN*MFQDb!|yi0j~JciNC!>){~ zQQgmZvc}0l$XB0VIWdg&ShDTbTkArryp3x)T8%ulR;Z?6APx{JZyUm=LC-ACkFm`6 z(x7zm5ULIU-xGi*V6x|eF~CN`PUM%`!4S;Uv_J>b#&OT9IT=jx5#nydC4=0htcDme zDUH*Hk-`Jsa>&Z<7zJ{K4AZE1BVW%zk&MZ^lHyj8mWmk|Pq8WwHROz0Kwj-AFqvR)H2gDN*6dzVk>R3@_CV zw3Z@6s^73xW)XY->AFwUlk^4Q=hXE;ckW=|RcZFchyOM0vqBW{2l*QR#v^SZNnT6j zZv|?ZO1-C_wLWVuYORQryj29JA; zS4BsxfVl@X!W{!2GkG9fL4}58Srv{$-GYngg>JuHz!7ZPQbfIQr4@6ZC4T$`;Vr@t zD#-uJ8A!kSM*gA&^6yWi|F}&59^*Rx{qn3z{(JYxrzg!X2b#uGd>&O0e=0k_2*N?3 zYXV{v={ONL{rW~z_FtFj7kSSJZ?s);LL@W&aND7blR8rlvkAb48RwJZlOHA~t~RfC zOD%ZcOzhYEV&s9%qns0&ste5U!^MFWYn`Od()5RwIz6%@Ek+Pn`s79unJY-$7n-Uf z&eUYvtd)f7h7zG_hDiFC!psCg#q&0c=GHKOik~$$>$Fw*k z;G)HS$IR)Cu72HH|JjeeauX;U6IgZ_IfxFCE_bGPAU25$!j8Etsl0Rk@R`$jXuHo8 z3Hhj-rTR$Gq(x)4Tu6;6rHQhoCvL4Q+h0Y+@Zdt=KTb0~wj7-(Z9G%J+aQu05@k6JHeCC|YRFWGdDCV}ja;-yl^9<`>f=AwOqML1a~* z9@cQYb?!+Fmkf}9VQrL8$uyq8k(r8)#;##xG9lJ-B)Fg@15&To(@xgk9SP*bkHlxiy8I*wJQylh(+9X~H-Is!g&C!q*eIYuhl&fS&|w)dAzXBdGJ&Mp$+8D| zZaD<+RtjI90QT{R0YLk6_dm=GfCg>7;$ zlyLsNYf@MfLH<}ott5)t2CXiQos zFLt^`%ygB2Vy^I$W3J_Rt4olRn~Gh}AW(`F@LsUN{d$sR%bU&3;rsD=2KCL+4c`zv zlI%D>9-)U&R3;>d1Vdd5b{DeR!HXDm44Vq*u?`wziLLsFUEp4El;*S0;I~D#TgG0s zBXYZS{o|Hy0A?LVNS)V4c_CFwyYj-E#)4SQq9yaf`Y2Yhk7yHSdos~|fImZG5_3~~o<@jTOH@Mc7`*xn-aO5F zyFT-|LBsm(NbWkL^oB-Nd31djBaYebhIGXhsJyn~`SQ6_4>{fqIjRp#Vb|~+Qi}Mdz!Zsw= zz?5L%F{c{;Cv3Q8ab>dsHp)z`DEKHf%e9sT(aE6$az?A}3P`Lm(~W$8Jr=;d8#?dm_cmv>2673NqAOenze z=&QW`?TQAu5~LzFLJvaJ zaBU3mQFtl5z?4XQDBWNPaH4y)McRpX#$(3o5Nx@hVoOYOL&-P+gqS1cQ~J;~1roGH zVzi46?FaI@w-MJ0Y7BuAg*3;D%?<_OGsB3)c|^s3A{UoAOLP8scn`!5?MFa|^cTvq z#%bYG3m3UO9(sH@LyK9-LSnlVcm#5^NRs9BXFtRN9kBY2mPO|@b7K#IH{B{=0W06) zl|s#cIYcreZ5p3j>@Ly@35wr-q8z5f9=R42IsII=->1stLo@Q%VooDvg@*K(H@*5g zUPS&cM~k4oqp`S+qp^*nxzm^0mg3h8ppEHQ@cXyQ=YKV-6)FB*$KCa{POe2^EHr{J zOxcVd)s3Mzs8m`iV?MSp=qV59blW9$+$P+2;PZDRUD~sr*CQUr&EDiCSfH@wuHez+ z`d5p(r;I7D@8>nbZ&DVhT6qe+accH;<}q$8Nzz|d1twqW?UV%FMP4Y@NQ`3(+5*i8 zP9*yIMP7frrneG3M9 zf>GsjA!O#Bifr5np-H~9lR(>#9vhE6W-r`EjjeQ_wdWp+rt{{L5t5t(Ho|4O24@}4 z_^=_CkbI`3;~sXTnnsv=^b3J}`;IYyvb1gM>#J9{$l#Zd*W!;meMn&yXO7x`Epx_Y zm-1wlu~@Ii_7D}>%tzlXW;zQT=uQXSG@t$<#6-W*^vy7Vr2TCpnix@7!_|aNXEnN<-m?Oq;DpN*x6f>w za1Wa5entFEDtA0SD%iZv#3{wl-S`0{{i3a9cmgNW`!TH{J*~{@|5f%CKy@uk*8~af zt_d34U4y&3y9IZ5cXxLQ?(XjH5?q3Z0KxK~y!-CUyWG6{<)5lkhbox0HnV&7^zNBn zjc|?X!Y=63(Vg>#&Wx%=LUr5{i@~OdzT#?P8xu#P*I_?Jl7xM4dq)4vi}3Wj_c=XI zSbc)@Q2Et4=(nBDU{aD(F&*%Ix!53_^0`+nOFk)}*34#b0Egffld|t_RV91}S0m)0 zap{cQDWzW$geKzYMcDZDAw480!1e1!1Onpv9fK9Ov~sfi!~OeXb(FW)wKx335nNY! za6*~K{k~=pw`~3z!Uq%?MMzSl#s%rZM{gzB7nB*A83XIGyNbi|H8X>a5i?}Rs+z^; z2iXrmK4|eDOu@{MdS+?@(!-Ar4P4?H_yjTEMqm7`rbV4P275(-#TW##v#Dt14Yn9UB-Sg3`WmL0+H~N;iC`Mg%pBl?1AAOfZ&e; z*G=dR>=h_Mz@i;lrGpIOQwezI=S=R8#);d*;G8I(39ZZGIpWU)y?qew(t!j23B9fD z?Uo?-Gx3}6r8u1fUy!u)7LthD2(}boE#uhO&mKBau8W8`XV7vO>zb^ZVWiH-DOjl2 zf~^o1CYVU8eBdmpAB=T%i(=y}!@3N%G-*{BT_|f=egqtucEtjRJJhSf)tiBhpPDpgzOpG12UgvOFnab&16Zn^2ZHjs)pbd&W1jpx%%EXmE^ zdn#R73^BHp3w%&v!0~azw(Fg*TT*~5#dJw%-UdxX&^^(~V&C4hBpc+bPcLRZizWlc zjR;$4X3Sw*Rp4-o+a4$cUmrz05RucTNoXRINYG*DPpzM&;d1GNHFiyl(_x#wspacQ zL)wVFXz2Rh0k5i>?Ao5zEVzT)R(4Pjmjv5pzPrav{T(bgr|CM4jH1wDp6z*_jnN{V ziN56m1T)PBp1%`OCFYcJJ+T09`=&=Y$Z#!0l0J2sIuGQtAr>dLfq5S;{XGJzNk@a^ zk^eHlC4Gch`t+ue3RviiOlhz81CD9z~d|n5;A>AGtkZMUQ#f>5M14f2d}2 z8<*LNZvYVob!p9lbmb!0jt)xn6O&JS)`}7v}j+csS3e;&Awj zoNyjnqLzC(QQ;!jvEYUTy73t_%16p)qMb?ihbU{y$i?=a7@JJoXS!#CE#y}PGMK~3 zeeqqmo7G-W_S97s2eed^erB2qeh4P25)RO1>MH7ai5cZJTEevogLNii=oKG)0(&f` z&hh8cO{of0;6KiNWZ6q$cO(1)9r{`}Q&%p*O0W7N--sw3Us;)EJgB)6iSOg(9p_mc zRw{M^qf|?rs2wGPtjVKTOMAfQ+ZNNkb$Ok0;Pe=dNc7__TPCzw^H$5J0l4D z%p(_0w(oLmn0)YDwrcFsc*8q)J@ORBRoZ54GkJpxSvnagp|8H5sxB|ZKirp%_mQt_ z81+*Y8{0Oy!r8Gmih48VuRPwoO$dDW@h53$C)duL4_(osryhwZSj%~KsZ?2n?b`Z* z#C8aMdZxYmCWSM{mFNw1ov*W}Dl=%GQpp90qgZ{(T}GOS8#>sbiEU;zYvA?=wbD5g+ahbd1#s`=| zV6&f#ofJC261~Ua6>0M$w?V1j##jh-lBJ2vQ%&z`7pO%frhLP-1l)wMs=3Q&?oth1 zefkPr@3Z(&OL@~|<0X-)?!AdK)ShtFJ;84G2(izo3cCuKc{>`+aDoziL z6gLTL(=RYeD7x^FYA%sPXswOKhVa4i(S4>h&mLvS##6-H?w8q!B<8Alk>nQEwUG)SFXK zETfcTwi=R3!ck|hSM`|-^N3NWLav&UTO{a9=&Tuz-Kq963;XaRFq#-1R18fi^Gb-; zVO>Q{Oe<^b0WA!hkBi9iJp3`kGwacXX2CVQ0xQn@Y2OhrM%e4)Ea7Y*Df$dY2BpbL zv$kX}*#`R1uNA(7lk_FAk~{~9Z*Si5xd(WKQdD&I?8Y^cK|9H&huMU1I(251D7(LL z+){kRc=ALmD;#SH#YJ+|7EJL6e~w!D7_IrK5Q=1DCulUcN(3j`+D_a|GP}?KYx}V+ zx_vLTYCLb0C?h;e<{K0`)-|-qfM16y{mnfX(GGs2H-;-lRMXyb@kiY^D;i1haxoEk zsQ7C_o2wv?;3KS_0w^G5#Qgf*>u)3bT<3kGQL-z#YiN9QH7<(oDdNlSdeHD zQJN-U*_wJM_cU}1YOH=m>DW~{%MAPxL;gLdU6S5xLb$gJt#4c2KYaEaL8ORWf=^(l z-2`8^J;&YG@vb9em%s~QpU)gG@24BQD69;*y&-#0NBkxumqg#YYomd2tyo0NGCr8N z5<5-E%utH?Ixt!(Y4x>zIz4R^9SABVMpLl(>oXnBNWs8w&xygh_e4*I$y_cVm?W-^ ze!9mPy^vTLRclXRGf$>g%Y{(#Bbm2xxr_Mrsvd7ci|X|`qGe5=54Zt2Tb)N zlykxE&re1ny+O7g#`6e_zyjVjRi5!DeTvSJ9^BJqQ*ovJ%?dkaQl!8r{F`@KuDEJB3#ho5 zmT$A&L=?}gF+!YACb=%Y@}8{SnhaGCHRmmuAh{LxAn0sg#R6P_^cJ-9)+-{YU@<^- zlYnH&^;mLVYE+tyjFj4gaAPCD4CnwP75BBXA`O*H(ULnYD!7K14C!kGL_&hak)udZ zkQN8)EAh&9I|TY~F{Z6mBv7sz3?<^o(#(NXGL898S3yZPTaT|CzZpZ~pK~*9Zcf2F zgwuG)jy^OTZD`|wf&bEdq4Vt$ir-+qM7BosXvu`>W1;iFN7yTvcpN_#at)Q4n+(Jh zYX1A-24l9H5jgY?wdEbW{(6U1=Kc?Utren80bP`K?J0+v@{-RDA7Y8yJYafdI<7-I z_XA!xeh#R4N7>rJ_?(VECa6iWhMJ$qdK0Ms27xG&$gLAy(|SO7_M|AH`fIY)1FGDp zlsLwIDshDU;*n`dF@8vV;B4~jRFpiHrJhQ6TcEm%OjWTi+KmE7+X{19 z>e!sg0--lE2(S0tK}zD&ov-{6bMUc%dNFIn{2^vjXWlt>+uxw#d)T6HNk6MjsfN~4 zDlq#Jjp_!wn}$wfs!f8NX3Rk#9)Q6-jD;D9D=1{$`3?o~caZjXU*U32^JkJ$ZzJ_% zQWNfcImxb!AV1DRBq`-qTV@g1#BT>TlvktYOBviCY!13Bv?_hGYDK}MINVi;pg)V- z($Bx1Tj`c?1I3pYg+i_cvFtcQ$SV9%%9QBPg&8R~Ig$eL+xKZY!C=;M1|r)$&9J2x z;l^a*Ph+isNl*%y1T4SviuK1Nco_spQ25v5-}7u?T9zHB5~{-+W*y3p{yjn{1obqf zYL`J^Uz8zZZN8c4Dxy~)k3Ws)E5eYi+V2C!+7Sm0uu{xq)S8o{9uszFTnE>lPhY=5 zdke-B8_*KwWOd%tQs_zf0x9+YixHp+Qi_V$aYVc$P-1mg?2|_{BUr$6WtLdIX2FaF zGmPRTrdIz)DNE)j*_>b9E}sp*(1-16}u za`dgT`KtA3;+e~9{KV48RT=CGPaVt;>-35}%nlFUMK0y7nOjoYds7&Ft~#>0$^ciZ zM}!J5Mz{&|&lyG^bnmh?YtR z*Z5EfDxkrI{QS#Iq752aiA~V)DRlC*2jlA|nCU!@CJwxO#<=j6ssn;muv zhBT9~35VtwsoSLf*(7vl&{u7d_K_CSBMbzr zzyjt&V5O#8VswCRK3AvVbS7U5(KvTPyUc0BhQ}wy0z3LjcdqH8`6F3!`)b3(mOSxL z>i4f8xor(#V+&#ph~ycJMcj#qeehjxt=~Na>dx#Tcq6Xi4?BnDeu5WBBxt603*BY& zZ#;o1kv?qpZjwK-E{8r4v1@g*lwb|8w@oR3BTDcbiGKs)a>Fpxfzh&b ziQANuJ_tNHdx;a*JeCo^RkGC$(TXS;jnxk=dx++D8|dmPP<0@ z$wh#ZYI%Rx$NKe-)BlJzB*bot0ras3I%`#HTMDthGtM_G6u-(tSroGp1Lz+W1Y`$@ zP`9NK^|IHbBrJ#AL3!X*g3{arc@)nuqa{=*2y+DvSwE=f*{>z1HX(>V zNE$>bbc}_yAu4OVn;8LG^naq5HZY zh{Hec==MD+kJhy6t=Nro&+V)RqORK&ssAxioc7-L#UQuPi#3V2pzfh6Ar400@iuV5 z@r>+{-yOZ%XQhsSfw%;|a4}XHaloW#uGluLKux0II9S1W4w=X9J=(k&8KU()m}b{H zFtoD$u5JlGfpX^&SXHlp$J~wk|DL^YVNh2w(oZ~1*W156YRmenU;g=mI zw({B(QVo2JpJ?pJqu9vijk$Cn+%PSw&b4c@uU6vw)DjGm2WJKt!X}uZ43XYlDIz%& z=~RlgZpU-tu_rD`5!t?289PTyQ zZgAEp=zMK>RW9^~gyc*x%vG;l+c-V?}Bm;^{RpgbEnt_B!FqvnvSy)T=R zGa!5GACDk{9801o@j>L8IbKp#!*Td5@vgFKI4w!5?R{>@^hd8ax{l=vQnd2RDHopo zwA+qb2cu4Rx9^Bu1WNYT`a(g}=&&vT`&Sqn-irxzX_j1=tIE#li`Hn=ht4KQXp zzZj`JO+wojs0dRA#(bXBOFn**o+7rPY{bM9m<+UBF{orv$#yF8)AiOWfuas5Fo`CJ zqa;jAZU^!bh8sjE7fsoPn%Tw11+vufr;NMm3*zC=;jB{R49e~BDeMR+H6MGzDlcA^ zKg>JEL~6_6iaR4i`tSfUhkgPaLXZ<@L7poRF?dw_DzodYG{Gp7#24<}=18PBT}aY` z{)rrt`g}930jr3^RBQNA$j!vzTh#Mo1VL`QCA&US?;<2`P+xy8b9D_Hz>FGHC2r$m zW>S9ywTSdQI5hh%7^e`#r#2906T?))i59O(V^Rpxw42rCAu-+I3y#Pg6cm#&AX%dy ze=hv0cUMxxxh1NQEIYXR{IBM&Bk8FK3NZI3z+M>r@A$ocd*e%x-?W;M0pv50p+MVt zugo<@_ij*6RZ;IPtT_sOf2Zv}-3R_1=sW37GgaF9Ti(>V z1L4ju8RzM%&(B}JpnHSVSs2LH#_&@`4Kg1)>*)^i`9-^JiPE@=4l$+?NbAP?44hX&XAZy&?}1;=8c(e0#-3bltVWg6h=k!(mCx=6DqOJ-I!-(g;*f~DDe={{JGtH7=UY|0F zNk(YyXsGi;g%hB8x)QLpp;;`~4rx>zr3?A|W$>xj>^D~%CyzRctVqtiIz7O3pc@r@JdGJiH@%XR_9vaYoV?J3K1cT%g1xOYqhXfSa`fg=bCLy% zWG74UTdouXiH$?H()lyx6QXt}AS)cOa~3IdBxddcQp;(H-O}btpXR-iwZ5E)di9Jf zfToEu%bOR11xf=Knw7JovRJJ#xZDgAvhBDF<8mDu+Q|!}Z?m_=Oy%Ur4p<71cD@0OGZW+{-1QT?U%_PJJ8T!0d2*a9I2;%|A z9LrfBU!r9qh4=3Mm3nR_~X-EyNc<;?m`?dKUNetCnS)}_-%QcWuOpw zAdZF`4c_24z&m{H9-LIL`=Hrx%{IjrNZ~U<7k6p{_wRkR84g>`eUBOQd3x5 zT^kISYq)gGw?IB8(lu1=$#Vl?iZdrx$H0%NxW)?MO$MhRHn8$F^&mzfMCu>|`{)FL z`ZgOt`z%W~^&kzMAuWy9=q~$ldBftH0}T#(K5e8;j~!x$JjyspJ1IISI?ON5OIPB$ z-5_|YUMb+QUsiv3R%Ys4tVYW+x$}dg;hw%EdoH%SXMp`)v?cxR4wic{X9pVBH>=`#`Kcj!}x4 zV!`6tj|*q?jZdG(CSevn(}4Ogij5 z-kp;sZs}7oNu0x+NHs~(aWaKGV@l~TBkmW&mPj==N!f|1e1SndS6(rPxsn7dz$q_{ zL0jSrihO)1t?gh8N zosMjR3n#YC()CVKv zos2TbnL&)lHEIiYdz|%6N^vAUvTs6?s|~kwI4uXjc9fim`KCqW3D838Xu{48p$2?I zOeEqQe1}JUZECrZSO_m=2<$^rB#B6?nrFXFpi8jw)NmoKV^*Utg6i8aEW|^QNJuW& z4cbXpHSp4|7~TW(%JP%q9W2~@&@5Y5%cXL#fMhV59AGj<3$Hhtfa>24DLk{7GZUtr z5ql**-e58|mbz%5Kk~|f!;g+Ze^b);F+5~^jdoq#m+s?Y*+=d5ruym%-Tnn8htCV; zDyyUrWydgDNM&bI{yp<_wd-q&?Ig+BN-^JjWo6Zu3%Eov^Ja>%eKqrk&7kUqeM8PL zs5D}lTe_Yx;e=K`TDya!-u%y$)r*Cr4bSfN*eZk$XT(Lv2Y}qj&_UaiTevxs_=HXjnOuBpmT> zBg|ty8?|1rD1~Ev^6=C$L9%+RkmBSQxlnj3j$XN?%QBstXdx+Vl!N$f2Ey`i3p@!f zzqhI3jC(TZUx|sP%yValu^nzEV96o%*CljO>I_YKa8wMfc3$_L()k4PB6kglP@IT#wBd*3RITYADL}g+hlzLYxFmCt=_XWS}=jg8`RgJefB57z(2n&&q>m ze&F(YMmoRZW7sQ;cZgd(!A9>7mQ2d#!-?$%G8IQ0`p1|*L&P$GnU0i0^(S;Rua4v8 z_7Qhmv#@+kjS-M|($c*ZOo?V2PgT;GKJyP1REABlZhPyf!kR(0UA7Bww~R<7_u6#t z{XNbiKT&tjne(&=UDZ+gNxf&@9EV|fblS^gxNhI-DH;|`1!YNlMcC{d7I{u_E~cJOalFEzDY|I?S3kHtbrN&}R3k zK(Ph_Ty}*L3Et6$cUW`0}**BY@44KtwEy(jW@pAt`>g> z&8>-TmJiDwc;H%Ae%k6$ndZlfKruu1GocgZrLN=sYI52}_I%d)~ z6z40!%W4I6ch$CE2m>Dl3iwWIbcm27QNY#J!}3hqc&~(F8K{^gIT6E&L!APVaQhj^ zjTJEO&?**pivl^xqfD(rpLu;`Tm1MV+Wtd4u>X6u5V{Yp%)xH$k410o{pGoKdtY0t@GgqFN zO=!hTcYoa^dEPKvPX4ukgUTmR#q840gRMMi%{3kvh9gt(wK;Fniqu9A%BMsq?U&B5DFXC8t8FBN1&UIwS#=S zF(6^Eyn8T}p)4)yRvs2rCXZ{L?N6{hgE_dkH_HA#L3a0$@UMoBw6RE9h|k_rx~%rB zUqeEPL|!Pbp|up2Q=8AcUxflck(fPNJYP1OM_4I(bc24a**Qnd-@;Bkb^2z8Xv?;3yZp*| zoy9KhLo=;8n0rPdQ}yAoS8eb zAtG5QYB|~z@Z(Fxdu`LmoO>f&(JzsO|v0V?1HYsfMvF!3| zka=}6U13(l@$9&=1!CLTCMS~L01CMs@Abl4^Q^YgVgizWaJa%{7t)2sVcZg0mh7>d z(tN=$5$r?s={yA@IX~2ot9`ZGjUgVlul$IU4N}{ zIFBzY3O0;g$BZ#X|VjuTPKyw*|IJ+&pQ` z(NpzU`o=D86kZ3E5#!3Ry$#0AW!6wZe)_xZ8EPidvJ0f+MQJZ6|ZJ$CEV6;Yt{OJnL`dewc1k>AGbkK9Gf5BbB-fg? zgC4#CPYX+9%LLHg@=c;_Vai_~#ksI~)5|9k(W()g6ylc(wP2uSeJ$QLATtq%e#zpT zp^6Y)bV+e_pqIE7#-hURQhfQvIZpMUzD8&-t$esrKJ}4`ZhT|woYi>rP~y~LRf`*2!6 z6prDzJ~1VOlYhYAuBHcu9m>k_F>;N3rpLg>pr;{EDkeQPHfPv~woj$?UTF=txmaZy z?RrVthxVcqUM;X*(=UNg4(L|0d250Xk)6GF&DKD@r6{aZo;(}dnO5@CP7pMmdsI)- zeYH*@#+|)L8x7)@GNBu0Npyyh6r z^~!3$x&w8N)T;|LVgnwx1jHmZn{b2V zO|8s#F0NZhvux?0W9NH5;qZ?P_JtPW86)4J>AS{0F1S0d}=L2`{F z_y;o;17%{j4I)znptnB z%No1W>o}H2%?~CFo~0j?pzWk?dV4ayb!s{#>Yj`ZJ!H)xn}*Z_gFHy~JDis)?9-P=z4iOQg{26~n?dTms7)+F}? zcXvnHHnnbNTzc!$t+V}=<2L<7l(84v1I3b;-)F*Q?cwLNlgg{zi#iS)*rQ5AFWe&~ zWHPPGy{8wEC9JSL?qNVY76=es`bA{vUr~L7f9G@mP}2MNF0Qhv6Sgs`r_k!qRbSXK zv16Qqq`rFM9!4zCrCeiVS~P2e{Pw^A8I?p?NSVR{XfwlQo*wj|Ctqz4X-j+dU7eGkC(2y`(P?FM?P4gKki3Msw#fM6paBq#VNc>T2@``L{DlnnA-_*i10Kre&@-H!Z7gzn9pRF61?^^ z8dJ5kEeVKb%Bly}6NLV}<0(*eZM$QTLcH#+@iWS^>$Of_@Mu1JwM!>&3evymgY6>C_)sK+n|A5G6(3RJz0k>(z2uLdzXeTw)e4*g!h} zn*UvIx-Ozx<3rCF#C`khSv`Y-b&R4gX>d5osr$6jlq^8vi!M$QGx05pJZoY#RGr*J zsJmOhfodAzYQxv-MoU?m_|h^aEwgEHt5h_HMkHwtE+OA03(7{hm1V?AlYAS7G$u5n zO+6?51qo@aQK5#l6pM`kD5OmI28g!J2Z{5kNlSuKl=Yj3QZ|bvVHU}FlM+{QV=<=) z+b|%Q!R)FE z@ycDMSKV2?*XfcAc5@IOrSI&3&aR$|oAD8WNA6O;p~q-J@ll{x`jP<*eEpIYOYnT zer_t=dYw6a0avjQtKN&#n&(KJ5Kr$RXPOp1@Fq#0Of zTXQkq4qQxKWR>x#d{Hyh?6Y)U07;Q$?BTl7mx2bSPY_juXub1 z%-$)NKXzE<%}q>RX25*oeMVjiz&r_z;BrQV-(u>!U>C*OisXNU*UftsrH6vAhTEm@ zoKA`?fZL1sdd!+G@*NNvZa>}37u^x8^T>VH0_6Bx{3@x5NAg&55{2jUE-w3zCJNJi z^IlU=+DJz-9K&4c@7iKj(zlj@%V}27?vYmxo*;!jZVXJMeDg;5T!4Y1rxNV-e$WAu zkk6^Xao8HC=w2hpLvM(!xwo|~$eG6jJj39zyQHf)E+NPJlfspUhzRv&_qr8+Z1`DA zz`EV=A)d=;2&J;eypNx~q&Ir_7e_^xXg(L9>k=X4pxZ3y#-ch$^TN}i>X&uwF%75c(9cjO6`E5 z16vbMYb!lEIM?jxn)^+Ld8*hmEXR4a8TSfqwBg1(@^8$p&#@?iyGd}uhWTVS`Mlpa zGc+kV)K7DJwd46aco@=?iASsx?sDjbHoDVU9=+^tk46|Fxxey1u)_}c1j z^(`5~PU%og1LdSBE5x4N&5&%Nh$sy0oANXwUcGa>@CCMqP`4W$ZPSaykK|giiuMIw zu#j)&VRKWP55I(5K1^cog|iXgaK1Z%wm%T;;M3X`-`TTWaI}NtIZj;CS)S%S(h}qq zRFQ#{m4Qk$7;1i*0PC^|X1@a1pcMq1aiRSCHq+mnfj^FS{oxWs0McCN-lK4>SDp#` z7=Duh)kXC;lr1g3dqogzBBDg6>et<<>m>KO^|bI5X{+eMd^-$2xfoP*&e$vdQc7J% zmFO~OHf7aqlIvg%P`Gu|3n;lKjtRd@;;x#$>_xU(HpZos7?ShZlQSU)bY?qyQM3cHh5twS6^bF8NBKDnJgXHa)? zBYv=GjsZuYC2QFS+jc#uCsaEPEzLSJCL=}SIk9!*2Eo(V*SAUqKw#?um$mUIbqQQb zF1Nn(y?7;gP#@ws$W76>TuGcG=U_f6q2uJq?j#mv7g;llvqu{Yk~Mo>id)jMD7;T> zSB$1!g)QpIf*f}IgmV;!B+3u(ifW%xrD=`RKt*PDC?M5KI)DO`VXw(7X-OMLd3iVU z0CihUN(eNrY;m?vwK{55MU`p1;JDF=6ITN$+!q8W#`iIsN8;W7H?`htf%RS9Lh+KQ z_p_4?qO4#*`t+8l-N|kAKDcOt zoHsqz_oO&n?@4^Mr*4YrkDX44BeS*0zaA1j@*c}{$;jUxRXx1rq7z^*NX6d`DcQ}L z6*cN7e%`2#_J4z8=^GM6>%*i>>X^_0u9qn%0JTUo)c0zIz|7a`%_UnB)-I1cc+ z0}jAK0}jBl|6-2VT759oxBnf%-;7vs>7Mr}0h3^$0`5FAy}2h{ps5%RJA|^~6uCqg zxBMK5bQVD{Aduh1lu4)`Up*&( zCJQ>nafDb#MuhSZ5>YmD@|TcrNv~Q%!tca;tyy8Iy2vu2CeA+AsV^q*Wohg%69XYq zP0ppEDEYJ9>Se&X(v=U#ibxg()m=83pLc*|otbG;`CYZ z*YgsakGO$E$E_$|3bns7`m9ARe%myU3$DE;RoQ<6hR8e;%`pxO1{GXb$cCZl9lVnJ$(c` z``G?|PhXaz`>)rb7jm2#v7=(W?@ zjUhrNndRFMQ}%^^(-nmD&J>}9w@)>l;mhRr@$}|4ueOd?U9ZfO-oi%^n4{#V`i}#f zqh<@f^%~(MnS?Z0xsQI|Fghrby<&{FA+e4a>c(yxFL!Pi#?DW!!YI{OmR{xEC7T7k zS_g*9VWI}d0IvIXx*d5<7$5Vs=2^=ews4qZGmAVyC^9e;wxJ%BmB(F5*&!yyABCtLVGL@`qW>X9K zpv=W~+EszGef=am3LG+#yIq5oLXMnZ_dxSLQ_&bwjC^0e8qN@v!p?7mg02H<9`uaJ zy0GKA&YQV2CxynI3T&J*m!rf4@J*eo235*!cB1zEMQZ%h5>GBF;8r37K0h?@|E*0A zIHUg0y7zm(rFKvJS48W7RJwl!i~<6X2Zw+Fbm9ekev0M;#MS=Y5P(kq^(#q11zsvq zDIppe@xOMnsOIK+5BTFB=cWLalK#{3eE>&7fd11>l2=MpNKjsZT2kmG!jCQh`~Fu0 z9P0ab`$3!r`1yz8>_7DYsO|h$kIsMh__s*^KXv?Z1O8|~sEz?Y{+GDzze^GPjk$E$ zXbA-1gd77#=tn)YKU=;JE?}De0)WrT%H9s3`fn|%YibEdyZov3|MJ>QWS>290eCZj z58i<*>dC9=kz?s$sP_9kK1p>nV3qvbleExyq56|o+oQsb{ZVmuu1n~JG z0sUvo_i4fSM>xRs8rvG$*+~GZof}&ISxn(2JU*K{L<3+b{bBw{68H&Uiup@;fWWl5 zgB?IWMab0LkXK(Hz#yq>scZbd2%=B?DO~^q9tarlzZysN+g}n0+v);JhbjUT8AYrt z3?;0r%p9zLJv1r$%q&HKF@;3~0wVwO!U5m;J`Mm|`Nc^80sZd+Wj}21*SPoF82hCF zoK?Vw;4ioafdAkZxT1er-LLVi-*0`@2Ur&*!b?0U>R;no+S%)xoBuBxRw$?weN-u~tKE}8xb@7Gs%(aC;e1-LIlSfXDK(faFW)mnHdrLc3`F z6ZBsT^u0uVS&il=>YVX^*5`k!P4g1)2LQmz{?&dgf`7JrA4ZeE0sikL`k!Eb6r=g0 z{aCy_0I>fxSAXQYz3lw5G|ivg^L@(x-uch!AphH+d;E4`175`R0#b^)Zp>EM1Ks=zx6_261>!7 z{7F#a{Tl@Tpw9S`>7_i|PbScS-(dPJv9_0-FBP_aa@Gg^2IoKNZM~#=sW$SH3MJ|{ zsQy8F43lX7hYx<{v^Q9`2QsMzeen3cGpiTgzVp- z`aj3&Wv0(he1qKI!2jpGpO-i0Wpcz%vdn`2o9x&3;^nsZPt3cuF92} zYoG~qx&RbGNfs0g1_%fW3J6U6Q7RFE9R7bSFE`h_2oMmEW}=Whfyww_E6xRW);ad0 z%YzFr(EqpPRqWrEN+PiT*cr%kZVyB3!Bo6w1vflt^@)DBu&x~exD7ID9D7|r>L@06cl+OPig2%1QAZ~)6h#IKDr zeagR*+_;p!hw#Bgl3knl9v;-HwLw=^E7ize5`+p zwr6{Qd@GJ=7D^=oM!g%Fz2^Hf&BxpQdUUpS2Q=wrLlPSV4S)p)wWZ$XXpD?XV?57#nE&vWEn}p=9#qg%84Ju`ApC$!v^@<3o>GTg3%CNUKqWP4) z^zKvWR&tN18o-nB8a!Y;JNpl;23DG`$c<{J0adnX1||d?u0rF_FTk+_Q3@}ArOCbk zs8k=Ts%&QwBr5NYG1auR8581Qon3@x9)aR12#qy028&h+j;k3nU0dp93eU&*9SJc! zUxQMRtmi#s$G(l(n9#zqwuC;LrtWAz5nssAq2uW_dWN4f(j_2C1+QJO1_{t)0|DA+Azip zHJoJAwNwddCMDL|F;Py*)UZV4pYru*Zmf6>5pMa?p1Beo)XGjN4Wm?Pn7l7S3S-9^ zyfMG`FZq5F4G^oUtB50v_9Ky~zxu3FL)F@5qYI|Hp>w0YG(1%msRl&^t!NesUB}RE zrfv77*-K_)vp6R3B+1S{q(VC$+&$4bQ{uHCPp-JU!u6v`?KU9YGCc zWFVpU7KtR$Ky=Ud>r!1U)bAELpkqyF+>+Q-j?4-=bouGU#$ zr@>eg0CY?A&g$EjpAfKhbYCrdO*$)Nx!d@6Y$97?#ZrFJXT`PI>*O#!>TK9}mLBJn z>7JVWBHoNrrWpL5Fy@fCmQ1-`_S?cm<=Qzam*=oacQ? zEVa;Vn?va@ReMEyF4w0$!B%_4Bf|ah#DjFd2lPvQ+-Ics#wp#_96aC*8KwGSuMy+i z#Smlk`;(*eI!t&m66HE4oOk%kgjvnhG12WtHt_>F3*{Y!W8IGVE|1dfd?@?ie@8@F zC!vpESq~=fNCMD~IKPO9Gr2^QlF=5VSQkNIF^vp$6R0MPXu0Ab$0KG{^{q8x8FfNp+boj5Pc!R=?OfdgKrSp8Ec^=VsIoH5gu^y(z8TiomYb> z7*rH5MAC4T8Q%F&gx3Gx;8nRBP=6HYYvnZ^)?1_blmF$2*Ta<#RFqVSS)=jK* z3gAn@(c33D^t*Oqv*l&|i3Bb`-S5wHi&;qNwID~aB_+p#d5(TP431zk=3y}s4DYpP zr}g0@yc7IAyZigWA^7vT0uO|EluXoC*bIVPGQ4;q>4{{3_j)9TB;XbWn38tBgf7s$ zwif0lPwOL6DBg?z1vCq$Od7$?g*(jZ#UZ6S2kwk8_gM(WM1{r*Y!;e@BSs%alQ`sr zgfpvY0@g)X9Do&&fwEc>N69niPNsTu=A-EDM)pY_qH>nXOkPGS!LVwpo0VvrsFcbS z8&r$skza(V4vpT%QI#bQ=&mLbmXWEL&F;!$vs=MYbrXJSwF$EzOj9C|r@;Ln^Fp;q zi(;pqQR_( zG7-jA^ipE6q(DU@YS$+1DMP;`bu*(`Fv%fd!=p}(!Qvh|?@nBrs>nOBD4%TjeQ z@U^i`M}NHSd$XG^W#kjSV)j9cP2r=TZW+zDLn@r{W6Y;kgNQ2z|0D3 z95J5)GPC>_kq8?2V2-_MR3)Z{`x4?RiDPc#Mtc}_Kz96en@%{}i7};CKjUxYmmNHT z9=@?H&yGvRhw!Q>U}g&kH^hIT`UGx-L1+2SMt&^a;`!cxWyF1PKz(pi+1x}){@g;C zUwc_iH=pRucNH&8SGFxXo=fhR$q*lutCV#u2`eq5@eYdwmR7xX3ri`>YW=pmZ)j5t z)gueRpaOPxgK7|;pbR$SKvIMAgBd=xjgLmF8Jf`)l}XGEpiy%!W*iGMgo>D=>f+eJ#j!apojQKUaraT_WhO`$HecfiMWvECeC#j zFA56J(fNrat;#HH#m-D`!OkQWE>pv-u9NgON8FB;MeNnNs`o}DU@YF#yeIti`%P#x zeEjnvF(y6{V40Ur9U4;hndOWybeNZjgv@~>$d|K60P)&1n z6-$7cxFVihZC(|&zXbtXX3(;N8pS`2tTgL@v2nBLcs;#&WDnmS}OkXBVK z^GjltA=4k?m=EDgOY#kL5^2=q8fZ^!mk)}Bj3W0e0n0;D#N>+8$^O_rki~r47N?w; z-Juf(plG_Io}%xZ;>l}cP`B0LAPEkyxpYsULQ;p5)qv@wFc^EB6GDnO$9!Fkw&QjA zR+tVv!3ugea7&#sH^9jRFBt!eS}i0zOy@Wn_4Y5?a+YQAOL=4Mu3_C3bIcU zlCiaKl<^=_P2d}DhP49Q3Z^!5bhCr=I#+}WU_elI$s_r3J7-K&kLcT}RBHE#!=cy5 zOM1;VQ{YhmM%0p+7dk<02NUW|Q8d$R)V96titmnch;Cf8eThXzF-CE)rWUkh=2Ce-ki>z*&pFk*PZc7<+?r~$Enf;4Vm!( z2<9t&2+@!`MB;B<&;&6o#@{Od-8-ZT7+88*i!`)4 z!0>LL_zdn5ocN6H;XVEq&8u)h1ZnXL&UkxvnlXY`SDd!l(8q#OO5c$8#^lQ2Jo5)L4m=k)3p)NBoNvNp5+$^X95`}~}nGXy%lrwW(N zm@wjq#*2Zwbru|(;p2Sm^d6WI!HKr!Gn;?07rejL;B3$jH*RpY3SfaB1Hi=8&ODdH zh3qvO#{p*Hx8K-WIV>7RFuQ6sW z&)d(=dsN|AQ~#`Z=hlb957v@`(-_{IR;s+PL{ommP*-_f zofTg7_oYfgvOCFAYy-Kn-SU7mU{57ZjZi^Qa`uj2EY+%`B0_ZO#>aORHv29>t#x1f z2L~PY{RC>1lYh;W>p?X)9)Be`@T77L z=G>dYCCn0|YMk?fG0B*WFOg&i4jtu^LT!{%#2llf5e=bi5yLlxu7{qEb?i-F36MO! z+Gt2Y%85?4JapDW1ssxJ#yvRre}HAWrs!ql63xsw4LU88Q`}3z?oB%3bD|MBW1Fc! zvj`ud|MN;DaC#A;{xW?X>dGXPz_ApAb=E>iPZGJ7WZr?QAQ2_YB-Fq)6@YaXLrhE( z#Y_JwL6lMsl%p0_VHtNNmr{pMN)k?!ZeD~eArrEZNoav%R?!SPxB2HZDP*nr3r&KU z@hoqD!~S>Vn)yucCH*7J{Lnx^O#dPM`5J@(T~%Fmv>y&>E@HgNUN$M+lGYGi6-FuY z78*1%bP#f=QiDt49E$KT*TV^EV8`bV9YZ|J%V0-@S+3dTbf)nb|5wS%Jq42E)k(9a zmrYxL-<#I{)-{EnkI#5P;GPIa|MQWOAZo%(ri&qWIogbe-=wjQ?*&F03M4Ash5PmZ za95a9f2+X~Ol58csYa?1c|tWhX|EdODX(&5TCLQ>wC&?EOk08N(QcI<%8^f$4`I^V zeNphNAopKw>pFJcK0mXEi-RO1Pjbf?v98&h{`4t}(_&Po>tUHtux#?$7NZMtmg2JJ z?!P{uhuCs#LFxtuq5^#Rvxzc?dh%0DGb5d&h)KC8(}$^u@02hW?*4w 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 Date: Wed, 24 Nov 2021 21:18:32 +0100 Subject: [PATCH 3/4] Fix missing method and update mcmod.info --- .../natura/plugins/waila/NaturaCropDataProvider.java | 9 +++++++++ src/main/resources/mcmod.info | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/mods/natura/plugins/waila/NaturaCropDataProvider.java b/src/main/java/mods/natura/plugins/waila/NaturaCropDataProvider.java index e37c6ab8..8f368dcf 100644 --- a/src/main/java/mods/natura/plugins/waila/NaturaCropDataProvider.java +++ b/src/main/java/mods/natura/plugins/waila/NaturaCropDataProvider.java @@ -7,8 +7,12 @@ import mcp.mobius.waila.api.IWailaDataProvider; import mods.natura.blocks.crops.CropBlock; import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.StatCollector; +import net.minecraft.world.World; public class NaturaCropDataProvider implements IWailaDataProvider { @@ -58,4 +62,9 @@ public List getWailaTail(ItemStack itemStack, List currenttip, I return currenttip; } + @Override + public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, int x, int y, int z) { + return tag; + } + } diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 9f06ca54..d4b62b48 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -1,10 +1,10 @@ [ { - "modid": "Natura", - "name": "Natura", + "modid": "${modId}", + "name": "${modName}", "description": "Heyo, Redwood trees! Chop them all day long!", - "version": "${version}", - "mcversion": "${mcversion}", + "version": "${modVersion}", + "mcversion": "${minecraftVersion}", "url": "www.minecraftforum.net/topic/1753754-natura/", "updateUrl": "", "authors": [ From 41746de6c8e2c026b2d0bf3696310c09bd3d19cc Mon Sep 17 00:00:00 2001 From: Johann Bernhardt Date: Wed, 24 Nov 2021 21:30:42 +0100 Subject: [PATCH 4/4] Reduce dependencies --- dependencies.gradle | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index b84dbb9c..ff46b0aa 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,9 +1,26 @@ // Add your dependencies here dependencies { - compile("com.github.GTNewHorizons:TinkersConstruct:master-SNAPSHOT:dev") - compile("com.github.GTNewHorizons:waila:master-SNAPSHOT:dev") - compileOnly("curse.maven:minefactory-reloaded-66672:2366150") - compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") + compile("com.github.GTNewHorizons:Mantle:master-SNAPSHOT:dev") + + compileOnly("com.github.GTNewHorizons:waila:master-SNAPSHOT:dev") { + transitive = false + } + compileOnly("com.github.GTNewHorizons:ForgeMultipart:master-SNAPSHOT:dev") { + transitive = false + } + compileOnly("com.github.GTNewHorizons:NotEnoughItems:master-SNAPSHOT:dev") { + transitive = false + } + compileOnly("com.github.GTNewHorizons:TinkersConstruct:master-SNAPSHOT:dev") { + transitive = false + } + + compileOnly("curse.maven:minefactory-reloaded-66672:2366150") { + transitive = false + } + compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { + transitive = false + } }